Регулятор расхода жидкости
- Войдите на сайт для отправки комментариев
Здравствуйте.
Собираю регулятор расхода жидкости на Arduino MEGA, а точнее на его копии SainSmart Mega2560. В качестве датчика расхода стоит расходомер на основе датчика Холла. Для подачи жидкости используется НШ (насос шестеренчатый), приводом которому служит обычная дрель. Дрель будет подключатся не к переменке 220В, а к постоянке 220В. Между силовой частью и Мегой будет опто развязка. Силовая часть с опто развязкой уже собрана. Сейчас жду приезда Меги и тем временем пишу прошивку. Нужна библиотека ПИД регулятора (на счет PID_v1 я вкурсе, но в ней, если я не ошибаюсь, обратная связь идет по аналоговому сигналу, а мне нужно по дискретному (импульсному)). Можно написать библиотеку самому, но в программировании я не слишком силен, по этому обращаюсь к Вам.
Если кто то может помочь, отзовитесь. Буду очень благодарен.
Свою прошивку, пока нет реального контроллера, проверяю на Протеусе (7.9).
Есть один нюанс, в Протеусе, не могу работать с аналоговыми входами. Не могу понять в чем проблема. Может что то надо настроить, или он в принципе не может работать с аналоговыми входами? Также пробовал другие версии Протеуса (7,8 и 7,10) никаких изменений.
Программу пишу в arduino-1.0.2, и созданный ею hex гружу в Протеус.
Кто в курсе, подскажите что можно сделать.
Программировал датчик расхода (хола) с выводом на жкэ.
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 8); boolean lastButton = LOW; volatile int NbTopsFan; //measuring the rising edges of the signal float Calc; int hallsensor = 2; //The pin location of the sensor void rpm () //This is the function that the interupt calls { NbTopsFan++; //This function measures the rising and falling edge of the } // The setup() method runs once, when the sketch starts void setup() // { pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input pinMode(9, OUTPUT); analogWrite(9, 50); Serial.begin(9600); //This is the setup function where the serial port is attachInterrupt(0, rpm, RISING); //and the interrupt is attached } // the loop() method runs over and over again, // as long as the Arduino has power void loop () { NbTopsFan = 0; //Set NbTops to 0 ready for calculations sei(); //Enables interrupts delay (300); //Wait 1 second cli(); //Disable interrupts Calc = (NbTopsFan * 217.5 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour Serial.print (Calc, DEC); //Prints the number calculated above Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line lcd.begin(8, 2); // печать сообщения на LCD. lcd.setCursor(0, 0); lcd.print("Q="); lcd.print(Calc, DEC); lcd.setCursor(0, 1); lcd.print("q="); lcd.print(Calc*0.015, DEC); }"217.5" - подгонял путем измерения расхода.
http://arduino.ru/forum/programmirovanie/regulyator-oborotov-kollektornogo-dvigatelya?page=1#comment-8094
И это работает ?
И это работает ?
да, рабоет!
Программировал датчик расхода (хола) с выводом на жкэ.
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 8); boolean lastButton = LOW; volatile int NbTopsFan; //measuring the rising edges of the signal float Calc; int hallsensor = 2; //The pin location of the sensor void rpm () //This is the function that the interupt calls { NbTopsFan++; //This function measures the rising and falling edge of the } // The setup() method runs once, when the sketch starts void setup() // { pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input pinMode(9, OUTPUT); analogWrite(9, 50); Serial.begin(9600); //This is the setup function where the serial port is attachInterrupt(0, rpm, RISING); //and the interrupt is attached } // the loop() method runs over and over again, // as long as the Arduino has power void loop () { NbTopsFan = 0; //Set NbTops to 0 ready for calculations sei(); //Enables interrupts delay (300); //Wait 1 second cli(); //Disable interrupts Calc = (NbTopsFan * 217.5 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour Serial.print (Calc, DEC); //Prints the number calculated above Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line lcd.begin(8, 2); // печать сообщения на LCD. lcd.setCursor(0, 0); lcd.print("Q="); lcd.print(Calc, DEC); lcd.setCursor(0, 1); lcd.print("q="); lcd.print(Calc*0.015, DEC); }"217.5" - подгонял путем измерения расхода.
спасибо!
уже все собрано и находится на стадии тестирования!
если кого то интересует такой дивайс, пишите.
Roman подскажи пожалуйста как правильно подключить оптопару, какие резисторы куда втыкать и как определить, что она правильно подключена, а то я уже 2 дня мучаюсь? Оптопара от принтера HP.
У оптопары 4 контакта, а провода три. Какие 2 контакта объеденены?
Roman подскажи пожалуйста как правильно подключить оптопару, какие резисторы куда втыкать и как определить, что она правильно подключена, а то я уже 2 дня мучаюсь? Оптопара от принтера HP.
это частичная схема оптопары, где источник света - светодиод, а приемник - фотодиод. соединены вместе могут быть как катоды (2,4) так и аноды (1,3). в вашем случаи нужно смотреть даташит к вашей оптопаре.
подбор резисторов, также нужно делать исходя из данных оптопары в даташите.
Величина
NbTopsFanпропорциональна расходу, поэтому с ней можно работать посредством ПИД библиотеки.Могут быть проблемы, связанные с немгновенностью измерения расхода:
29)
delay (300);//Wait 1 second