Контроль температуры воды в газовой колонке при помощи Arduino

Нет ответов
pooller
Offline
Зарегистрирован: 13.04.2014

Наткнулся я, как то очень давно в интернете, на очень интересный проект обеспечивающий контроль температуры воды в газовой колонке при помощи 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 или какой то другой...