Уважаемые мастера, добрый день.
Прошу проверить скетч для регулятора оборотов диз.двигателя (сам я новичок в программировании, поэтому прошу помощи у более опытных спецов))).
Для контроля оборотов планируется датчик холла, который считывает обороты с зуб.колеса (фото)
.
За один оборот коленвала над датчиком пройдет 5 зубов.
Управление подачей топлива осуществляется моторчиком на ТНВД.
Моторчик будет управляться через релюшки, которыми будем управлять 8 и 9-м пинами.
Скетч:
Прошу проверить скетч для регулятора оборотов диз.двигателя (сам я новичок в программировании, поэтому прошу помощи у более опытных спецов))).
Для контроля оборотов планируется датчик холла, который считывает обороты с зуб.колеса (фото)
.
За один оборот коленвала над датчиком пройдет 5 зубов.
Управление подачей топлива осуществляется моторчиком на ТНВД.
Моторчик будет управляться через релюшки, которыми будем управлять 8 и 9-м пинами.
Скетч:
C++:
//-----------дисплей-----------
#include <Arduino.h>
#include <TM1637Display.h>
// Контакты для подключения модуля (цифровые контакты)
#define CLK 5
#define DIO 4
TM1637Display display(CLK, DIO);
//--------дисплей-------
unsigned long lastflash;
int RPM;
void setup() {
Serial.begin(9600); //открыть порт
//-------Счетчик оборотов на датчике холла----------
attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
}
void sens() {
RPM=60/((float)(micros()-lastflash)/1000000); //расчет
lastflash=micros(); //запомнить время последнего оборота
}
void loop() {
display.setBrightness(2);
display.showNumberDec(RPM/5, false); //вывод на дисплей оборотов коленвала (обороты зуб.колеса делим на 5)
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
}
//---------контроль оборотов-------
if (RPM>8050){ //если обороты увеличатся на 10 об/мин
digitalWrite(8, HIGH); //подать 5 вольт на 8 пин для вкл мотора ТНВД на уменьшение оборотов;
}
if (RPM=8000){ //когда обороты уменьшатся до 1600 (1600*5=8000)
digitalWrite(8, LOW); //снять 5 вольт с 8 пина для откл мотора ТНВД на уменьшение оборотов;
}
if (RPM<7950){ //если обороты уменьшатся на 10 об/мин
digitalWrite(9, HIGH); //подать 5 вольт на 9 пин для вкл мотора ТНВД на увеличение оборотов;
}
if (RPM=8000){ //когда обороты увеличатся до 1600 (1600*5=8000)
digitalWrite(9, LOW); //снять 5 вольт с 9 пина для откл мотора ТНВД на увеличение оборотов;
}
Serial.println(RPM); //вывод в порт
delay(1000); //задержка для стабильности
}
Вложения
-
146.9 KB Просмотры: 3
Изменено: