Форум Нужна помощь в написании скетча для Arduino, ESP8266, DigiSpark

Электронное управление дроссельной заслонкой

13 июня, 2019 - 07:48
Управление дроссельной заслонкой карбюратора относительно оборотов двигателя и температуры.
romeo_com romeo_com Зарегистрирован:
13.06.2019
13 июня, 2019 - 08:44 #1
Подробное описание проекта. С описание всех мелочей, процессов и действий которые должен выполнять проект.

Будущее за микроконтроллерами
Admin Admin Зарегистрирован:
3.07.2018
18 октября, 2019 - 09:17 #3
romeo_com пишет:как добавить файл?
romeo_com romeo_com Зарегистрирован:
13.06.2019
18 октября, 2019 - 09:20 #5
#include <Servo.h> //библиотека серво (стандартная)
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS A1 // пин для дс18б20 ( one wire)
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
Servo servo; //объявить серво назвать servo
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer = {0x28, 0xFF, 0xC5, 0x2F, 0x86, 0x16, 0x4, 0xC6}; //адресс датчика 18b20
unsigned long lastflash;
int TempMax;
int RPM, pos;
unsigned int min_pos = 0; //минимальная частота оборотов
unsigned int max_pos = 1500; //максимальная частота оборотов
unsigned int min_ser = 0; //полностью закрыта заслонка
unsigned int max_ser = 180; //полностью открытас заслонка

void setup()
{
sensors.begin();
Serial.begin(9600); //открыть порт
attachInterrupt(0, sens, RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
servo.attach(4); //серво на 4 порту

{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
//lcd.setCursor(0, 1);

}
}

void sens()
{
RPM = 60 / ((float)(micros() - lastflash) / 1000000); //расчет
lastflash = micros(); //запомнить время последнего оборота
}
void printTemperature(DeviceAddress Thermometer)
{

float T = sensors.getTempC(Thermometer);
//lcd.setCursor(8, 1);
//lcd.print("Temp C: ");
//lcd.print(T);
}
void loop()
{

sensors.requestTemperatures();
int T = (sensors.getTempC(Thermometer));
if (T <= (75))
{
pos = map(RPM, min_pos, max_pos, min_ser, max_ser); //перевести значение от минимума до максимума в угол поворота сервы (от 0 до 180)
servo.write(pos); //повернуть серву
lcd.setCursor(0, 0);
lcd.print("Temp C: ");
lcd.print(T);
lcd.setCursor(0, 1);
lcd.print("RPM ");
lcd.print(RPM); //послать в порт
if ((micros() - lastflash) > 1000000)//если сигнала нет больше секунды
{
RPM = 0; //считаем что RPM 0
}
}
if ((T >= (55)))

{
servo.write(max_ser); //отключение автоподсоса при достижении температуры (полностью открыта заслонка)
delay(1000); //задержка для закрытия заслонки воздуха
servo.detach(); // отклюение серво привода заслонки
}
}
romeo_com romeo_com Зарегистрирован:
13.06.2019

Войдите или Зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Яндекс.Метрика

Portal-PK (Портал ПК) © 2015 - 2020
ЧПУ
Подписаться на новости
RSS