Старенький котёл Webasto и Ардуино нано

Тема в разделе "Глядите, что я сделал", создана пользователем TiPash235j, 1 апр 2015.

  1. TiPash235j

    TiPash235j Нерд

  2. TiPash235j

    TiPash235j Нерд

    Вот схема платы, на видео нет меги и GSM модуля. ShemaA3.JPG
     
    вячеслав васильевич и SergNSK нравится это.
  3. SergNSK

    SergNSK Нуб

  4. TiPash235j

    TiPash235j Нерд

    //nano bord

    int start_Pin = 0; // analog in
    int AirPump_L1_Pin = 6; // вентилятор замедлённый поток воздуха цэпь через резистор
    int AirPump_L2_Pin = 7; // вторая скорость без резистора, на полную нагрузку
    int candle_glow_Pin = 2; // свеча накала
    int WaterPump_Pin = 3; // цыркуляцыонный насос pumpCirPin
    int GasPump_Pin = 4; // реле дозирующего насоса dozPin
    int bug_Pin = 5; // ошибка звуковой сигнал
    int sensF_Pin = 6; // analog in сенсор пламени
    int sensT_Pin = 7; // analog in термо датчик
    int i, t, b, p, d, val, low;

    // переменные
    boolean STOP = false;

    void setup()
    { // Цыфровая команда // Исполнение команды. //стабилизатор напряжение нужен на 5 вольт и потключить к 5 вольт пину и конденсатор 3300микра варад желательно и состороны 12 вольт.
    pinMode(start_Pin, INPUT); //--2--___________________________// Остановка программы.
    pinMode(AirPump_L1_Pin, OUTPUT); //--3--___________________________// Запуск программы.
    pinMode(AirPump_L2_Pin, OUTPUT); //--4--___________________________// Онализ сенсоров, просмотр из показаний.
    pinMode(candle_glow_Pin, OUTPUT); //--5--__________________________// Включить вентилятор слабенько.
    pinMode(GasPump_Pin, OUTPUT); //--6--__________________________// Включить наполную мощность.
    pinMode(bug_Pin, OUTPUT); //--7--__________________________// Остановить вентилятор.
    pinMode(WaterPump_Pin, OUTPUT); //--8--__________________________// Водяной насос включен.
    analogReference(DEFAULT); //--11--__________________________// Водяной насос выключен.
    Serial.begin(9600); //-10,15,20,25,30,35,40,45,50,100// Количество доз топлива, просто дозацыя.
    }

    void loop()
    {
    delay(200);
    //1. запуск програмы при нажатщй кнопки
    int start = analogRead(start_Pin); // считывает показания стартовой кнопки

    int valF = analogRead(sensF_Pin); //считывает показания фотосенсора
    valF = constrain(valF, 370, 870); //Ограничивает считываемое значение
    int levelF = map(valF, 370, 870, 0, 100); //задаёт нужный пораметр от 0 до 100

    int valT = analogRead(sensT_Pin); // считывает показания термосенсора
    int TemprC = map(valT, 325, 263, 28, 75); // задаётся деапазон считаваемому значению и его границы значения на выходе

    int val = Serial.parseInt(); // начало программы командой 3 от компютера

    //****************************** АНАЛИЗ ******************************//
    if (val == 4) //просмотр покозаний по запросу 4
    {
    int valF = analogRead(sensF_Pin); //считывает показания фотосенсора
    valF = constrain(valF, 370, 870); //Ограничивает считываемое значение
    int levelF = map(valF, 370, 870, 0, 100); //задаёт нужный пораметр от 0 до 100

    int valT = analogRead(sensT_Pin); // считывает показания термосенсора
    int TemprC = map(valT, 325, 263, 28, 75);

    start = analogRead(start_Pin);
    Serial.print("START BYUTON: ");
    Serial.print(start);
    Serial.print(" Flame: ");
    Serial.print(levelF);
    Serial.print(" Temperatura: ");
    Serial.println(TemprC);
    }

    //****************************** ДОЗАЦЫЯ ТОПЛИВА ******************************//
    if ((val == 10) || (val == 15) || (val == 20) || (val == 25) || (val == 30) || (val == 35) || (val == 40) || (val == 45) || (val == 50) || (val == 100)) //Дозацыя по команде от компютера
    {
    Serial.print("Kolichestvo doz topliva:");
    Serial.println(val);

    for (i = 0; i < val; i++) //энное раз прыскнет топливом
    {
    digitalWrite(GasPump_Pin, HIGH);
    delay(150);
    digitalWrite(GasPump_Pin, LOW);
    delay(250);
    }
    }

    //****************************** РУЧНАЯ ПРОДУВКА ВЕНТИЛЯТОРОМ ******************************//
    if (val == 5)
    {
    digitalWrite(AirPump_L1_Pin, HIGH);
    Serial.println("Ventiljator vklu4on");
    }
    if (val == 6)
    {
    digitalWrite(AirPump_L1_Pin, HIGH);
    digitalWrite(AirPump_L2_Pin, HIGH);
    Serial.println("Ventiljator vklu4on na polnoju nagruzku");
    }
    if (val == 7 || val == 2)
    {
    digitalWrite(AirPump_L1_Pin, LOW);
    digitalWrite(AirPump_L2_Pin, LOW);
    Serial.println("Ventiljator ostanovlen");
    }

    //****************************** РУЧНАЯ ПРОМЫВКА ВОДЕНЫМ НАСОСОМ ******************************//
    if (val == 8)
    {
    digitalWrite(WaterPump_Pin, HIGH);
    Serial.println("Vodenoj nasos on");
    int valT = analogRead(sensT_Pin); // считывает показания термосенсора
    int TemprC = map(valT, 325, 263, 28, 75); // задаётся деапазон считаваемому значению и его границы значения на выходе
    Serial.print("Temperatura:");
    Serial.println(TemprC);
    }
    if (val == 11 || val == 2)
    {
    digitalWrite(WaterPump_Pin, LOW);
    Serial.println("Vodenoj nasos off");
    }

    //****************************** ЗАПУСК УСТАНОВКИ ******************************//
    if ((TemprC <= 60 && val == 3) || (TemprC <= 60 && start == 1023)) // если нажата стартовая кнопка и температура ниже 65 градусов, то запук
    {
    Serial.println("START");
    digitalWrite(AirPump_L1_Pin, HIGH); //вглючон воздушный вентилятор на 1 скорость

    for ( b = 0; b < 4; b++ ) // 3 раза запускает печь
    {
    delay(10000);
    digitalWrite(candle_glow_Pin, HIGH);
    delay(7500);

    Serial.println("Gas pumping");
    for (i = 0; i < 10; i++) // 10 раз прыскнет топливом
    {
    digitalWrite(GasPump_Pin, HIGH);
    delay(150);
    digitalWrite(GasPump_Pin, LOW);
    delay(250);
    }

    digitalWrite(candle_glow_Pin, LOW); //выключить свечу накала
    delay(100);
    int valF = analogRead(sensF_Pin); //считывает показания фотосенсора
    valF = constrain(valF, 370, 870); //Ограничивает считываемое значение
    int levelF = map(valF, 370, 870, 0, 100);
    Serial.print("Flame:");
    Serial.println(levelF);
    Serial.print("Temperatura:");
    Serial.println(TemprC);
    Serial.println(i);

    //****************************** РАБОТА УСТАНОВКИ ******************************//
    if (levelF >= 20 && i == 10 ) //если фото сенсор фиксирует пламя, то программа проходит далее///////////////////////////////////////
    {
    digitalWrite(candle_glow_Pin, LOW); //выключить свечу накала
    digitalWrite(WaterPump_Pin, HIGH); //вклить воденой насос
    delay(25);
    digitalWrite(GasPump_Pin, HIGH);
    delay(150);
    digitalWrite(GasPump_Pin, LOW);
    digitalWrite(AirPump_L1_Pin, HIGH); //вглючон воздушный вентилятор на 1 скорость
    Serial.println("Na4alo");

    while (TemprC <= 75 && levelF >= 9 && start <= 1000 ) // Бесконецный цыкл до 75 градусов, до того как неуменьшется пламя ниже 9, до того пока старт не будет больше 1000.
    {
    start = analogRead(start_Pin);
    Serial.println(start);

    int valT = analogRead(sensT_Pin); // считывает показания сенсора термометра
    TemprC = map(valT, 358, 263, 13, 75); // задаётся деопазон значению и его границы значения на выход

    int valF = analogRead(sensF_Pin); //считывает показания фотосенсора
    valF = constrain(valF, 370, 870); //Ограничивает считываемое значение
    levelF = map(valF, 370, 870, 0, 100); //задаёт нужный пораметр от 0 до 100

    digitalWrite(AirPump_L2_Pin, LOW); // Выключить вентилятора полную мощность
    t = map(TemprC, 36, 75, 600, 950);
    t = constrain(t, 600, 950);

    if (TemprC <= 35) // первый этап разгона до чегота.....
    {
    digitalWrite(AirPump_L1_Pin, HIGH); //вторая скорость без резистора, на полную нагрузку выключена
    t = 450; //время выключенного топлевного насоса
    }

    digitalWrite(GasPump_Pin, HIGH);
    delay(150);
    digitalWrite(GasPump_Pin, LOW);
    low = t;
    delay(low);

    Serial.print("Flame: ");
    Serial.print(levelF);
    Serial.print(" Temperatura:");
    Serial.print(TemprC);
    Serial.print(" Interval dozacii gorjuchego:");
    Serial.println(low);

    if (Serial.available())
    {
    int val = Serial.parseInt();
    if (val == 2) // остановка программы по команде от компютера
    {
    val = 2;
    break;
    }
    }
    }
    STOP = true;
    break;
    }
    }

    //****************************** ОСТАНОВКА ******************************//
    if (( b == 4 ) || (STOP = true) || (val == 2) ) // ОСТАНОВКА ПО 3 пречинам
    {
    Serial.println("STOP");
    delay(1000);
    digitalWrite(GasPump_Pin, LOW);
    delay(1500);
    digitalWrite(AirPump_L1_Pin, HIGH);
    delay(20000);
    digitalWrite(AirPump_L2_Pin, HIGH);
    delay(15000);
    digitalWrite(AirPump_L2_Pin, LOW);
    delay(500);
    digitalWrite(AirPump_L1_Pin, LOW);
    delay(500);
    digitalWrite(WaterPump_Pin, LOW);
    delay(50);

    for ( p = 0; p < 3 ; p++ ) // 3 коротких звуковых сигнала
    {
    digitalWrite(bug_Pin, HIGH);
    delay(1000);
    digitalWrite(bug_Pin, LOW);
    delay(1000);
    }
    }
    }
    }
     
  5. SergNSK

    SergNSK Нуб

    Огромное спасибо!!!!! Я просто в шоке от такой головы как у тебя!!!!
     
  6. SergNSK

    SergNSK Нуб

    А у тебя как я понял 2 ардунки, а зачем именно 2?
     
  7. TiPash235j

    TiPash235j Нерд

    Вобще ардуно стоят как семечки, нано по 3 бакса за штуку китайцы таргуют. Мегу я взял, так как был комлектик где есть глсд икранчик и всякое борохлишко 40 баксов. А вот гсм модуль 50 баксов гдето, ето что бы с помощю смс управлять или запрашивать устройства которое будет поткльчено через Арду мегу.
     
    ИгорьК и SergNSK нравится это.
  8. SergNSK

    SergNSK Нуб

    А датчики где брал? Или родные вебастовские используешь?
     
  9. ИгорьК

    ИгорьК Гуру

    Классный проект! Но вот очень интересно, искренне интересно, не стремно эти семечки присоединять к газовому оборудованию? Ладно, какая-нибудь подсветка левая... У меня первая "семечка" нано продержалась месяц, ну сдохла и сдохла - шут с ней. А здесь?
     
  10. SergNSK

    SergNSK Нуб

    В чем разница между теми микроконтроллерами которые стоят в вебастах и в ардуинке. Если собрать грамотно без лишних и внезапных токовых или вольтажных выбросов и перегрузок то будет работать вечно.
    На электровеликах голден моторс стоят ардуинки.
     
  11. ИгорьК

    ИгорьК Гуру

    В микроконтроллерах (ЦП платы) скорее всего разницы нет. Есть разница в технологиях изготовлении плат ардуино и работе с качеством комплектующих.
     
    9xA59kK и zezebra нравится это.
  12. SergNSK

    SergNSK Нуб

    Я в лс написал посмотрите .
     
  13. TiPash235j

    TiPash235j Нерд

    Да есть такая тема, я брал разные нано ардуинки. И за голимых комплектующих они згарают. Один раз подзорядку на 12 воль вкличил. Другой раз не вытошив из уизб, начал подключать к сериал порту тх рх. Ну и тоже чото згорело. Да и пусть, главное что всё получилось, всё работоет. И можно чтото делать. А эти опоратные проблемки проевляются по ходу дела.
     
  14. Sparkfire

    Sparkfire Гик

    Хороший проект, интересный код. Почитал с удовольствием.
     
  15. mishael.933

    mishael.933 Нуб

    А на ардуино Уно подойдёт?
     
  16. allesanbr

    allesanbr Нерд

    интересное решение, но если топливо это бензин, то для возгорания я бы использовал обычную свечу зажигания с катушкой зажигания. для экономии энергии.

    В этом случае устройство можно сделать предельно автономным, и заставить пол дня работать например от небольшого аккумулятора со скутера
     
  17. mishael.933

    mishael.933 Нуб

    Тогда уж лучше приспособить кухонную электрозажигалку,работает от пальчиковой барейки
     
  18. allesanbr

    allesanbr Нерд

    Тоже вариант, но свеча зажигания как активный элемент в данном случае не теряет актуальность.
     
  19. mishael.933

    mishael.933 Нуб

    Вот бы какой нибуть простой датчик пламени,замыкающий или размыкающий реле,так вообще и не нужен этот контроллер!?
     
  20. allesanbr

    allesanbr Нерд

    кто мешает?
    Пламя это огонь.
    Либо фото-диод, либо Фоторезистор, либо термодатчик на высокую температуру, либо термореле.
    Если задача стоит: заставить работать вебасту от кнопки в одном режиме, в принципе можно вообще на конденсаторе, резисторе и транзисторе сделать задержку по времени, на которую будет включаться искрообразование. В этом случае контроллер ненужен.

    Но если организовать плавную автоматически-регулируемую подачу топлива, то без контроллера никак.