Контроль температуры воды в газовой колонке при помощи 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 или какой то другой...
