SULI COMPANY | Научно-технический сайт Сулико Асабашвили » Электроника » Arduino » Контроль температуры воды в газовой колонке при помощи Arduino
Информация к новости
  • Просмотров: 1375
  • Автор: sulicompany
  • Дата: 16-02-2013, 05:38
 (голосов: 0)
16-02-2013, 05:38

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

Категория: Электроника » Arduino


 

  •   

 собрал автоматический регулятор для своей газовой колонки — Oasis 20RG.
Всё что для этого потребовалось — это:
— ,
— ,
— проводочки, резисторы и прочая мелочевка.
Колонка умеет показывать текущую температуру воды, а значит — у неё на борту уже есть датчик который можно считать при помощи ардуино.
Датчик нашёлся на выходе горячей воды и оказался обычным термистором.
Подключив его через  к аналоговому входу Arduino, получаем аналоговое значение, которое, при помощи функции  переводится в температуру.

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


Скетч:
#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);
 
}
 
}


Ссылки: