Контроль температуры воды в газовой колонке при помощи Arduino
- Войдите на сайт для отправки комментариев
Вс, 19/02/2017 - 19:52
Наткнулся я, как то очень давно в интернете, на очень интересный проект обеспечивающий контроль температуры воды в газовой колонке при помощи Arduino.
http://robocraft.ru/blog/projects/961.html
Вот собственно и сам скетч:
#include <Servo.h> int termalPin=A5; int enablePin=8; int ledPin=7; int temp; int lastTemp=0; boolean enabled=false; static int minAngle=5; static int maxAngle=100; static int needTemp=40; Servo myservo; void setup() { //включаем сериал Serial.begin(9600); //устанавливаем режимы пинов pinMode(enablePin,INPUT); pinMode(ledPin,OUTPUT); } void loop() { //мапим показания датчика на температуру temp = map(analogRead(termalPin),800,635,31,51); if(digitalRead(enablePin)==HIGH) { //колонка включена if(!enabled) { //если до этого не была включена //атачим серву myservo.attach(9); //ставим на середину myservo.write(50); Serial.println("WARMING UP BOILER."); //ждем пока колонка разогреется delay(10000); Serial.println("BOILER READY!"); } //поехали enabled=true; //зажигаем светодиод digitalWrite(ledPin,HIGH); Serial.print("BOILER ONLINE. CURRENT TEMP: "); Serial.print(temp); Serial.println(" C"); //смотрим на температуру и куда ее крутить if(temp>needTemp) decTemp(); if(temp<needTemp) incTemp(); delay(300); } else { if(enabled) { //выключение Serial.println("BOILER OFFLINE. GOOD LUCK!"); //ставим серву посредине myservo.write(50); //детачим чтоб не жужжала myservo.detach(); enabled=false; } //гасим лампочку digitalWrite(ledPin,LOW); } } void incTemp() { int p=needTemp-temp; Serial.print("Increasing TEMP. P="); Serial.println(p); int pos=myservo.read(); int newpos=pos-p; for(int i=pos;i>=newpos;i--) { if(i>minAngle) myservo.write(i); if(i<minAngle) myservo.write(minAngle); delay(50); } if(p>5) { delay(p*1000); } else { if(p<=3) delay(p*3000); else delay(p*2000); } } void decTemp() { int p=temp-needTemp; Serial.print("Decreasing TEMP. P="); Serial.println(p); int pos=myservo.read(); int newpos=pos+p; for(int i=pos;i<=newpos;i++) { if(i<maxAngle) myservo.write(i); if(i>maxAngle) myservo.write(maxAngle); delay(50); } if(p>5) { delay(p*1000); } else { if(p<=3) delay(p*3000); else delay(p*2000); } }
Все в этом проекте просто здорово регулирование температуры воды реализовано через управление потоком газа. Только вот хотелось бы добавить возможность изменять заданную температуру с помощью кнопок или же лучше всего к такому проекту подойдет энкодер и соответственно нелишней будет индикация температуры задание и действительная. Например от nokia 5110 или какой то другой...