ТЕРМОРЕЛЕ НА ARDUINO UNO

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

Для начала надо установить среду разработки, IDE, которую можно скачать с офф. сайта. Кстати, версия для Linux работает отлично и не надо никаких драйверов. Есть лишь один нюанс: при попытке залить скетч в вашу Ардуинку программа, скорее всего, выдаст сообщение типа "Permission denied" - значит, ей не предоставлены соответствующие права. Лечится это дело таким образом, хотя точнее даже не образом, а скорее "числом зверя":

sudo chmod 666 /dev/ttyUSB0

Конечно же, данная команда поможет только в том случае, если ваше устройство подцепилось на ttyUSB0. В противном случае можете паниковать и плакать. Ну... На самом деле, можно подсмотреть маркировку устройства в системе в той же IDE, в которой вы будете писать свой скетч.

 

У меня тут используется экранчик, который подключается вот так:

Датчик температуры "LM35":

lm35.png

Реле:

Диод:

На этих иллюстрациях показан сам принцип подключения, но вообще-то назначение пинов ввода-вывода можно менять по своему усмотрению. 

А вот и код программы c подробными комментариями:

#include  //подключение библиотеки для управления жидкокристаллическим дисплеем
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Объяление пинов, на которых сидит этот дисплей
int val; //Объявление переменной, считанной с аналогового пина
int tempPin = 1;//Активация пина для измерения температуры
int ledPin = 8; //Активация пина для сигнала тревоги
int Relay = 9; // Релюшка, т. е. силовой ключ
int sensorPin = 0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600); // Открываем серийный порт для вывода цифрового значения температуры
pinMode(ledPin,OUTPUT); //Режим работы пина для сигнала тревоги
pinMode(Relay,OUTPUT); //Режим работы пина для силового ключа
}
// По-ихнему, "Loop" - значит петля. Все, что пойдет внутри, будет повторяться циклически.
void loop() {
int reading = analogRead(sensorPin);
float voltage = reading * 5.0;
voltage /= 1024.0;
int temperatureC = (voltage - 0.5) * 100-1 ; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((voltage - 500mV) times 100)
Serial.print("Temp. 2 = ");
Serial.print(temperatureC);
Serial.println(" C");
Serial.println("******************");
//Конструкция термометра
val = analogRead(tempPin);
int mv = ( val/1024.0)*5000; //неведомая фигня
int cel = mv/10; //продолжение неведомой фигни. По идедее, cel - это конечное значение температуры, которое получается
//из mv, деленного на 10. Если заменить "int" на "float", значения будут указаны в виде числа с десятичной дробью.
//Конец конструкции термометра.
//Вывод информации в серийный порт
Serial.print("Temp. 1 = "); //просто надпись...
Serial.print(cel); // Значение самой температуры, взятое из переменной "cel".
Serial.print(" C");//Тоже просто надпись...
Serial.println(); // C этой фигней все серийно-портовое пойдет колонкой сверху вниз, без нее - в строку, слева направо.
delay(500); //частота, с которой информация выводится в серийный порт
//конец вывода информации в серийный порт
//Вывод информации на LCD дисплей
lcd.setCursor(0,0); //установка положения курсора: первый сегмент, первая строка.
lcd.print("Temperature ");
lcd.print(cel); // Значение самой температуры, взятое из переменной "cel".
delay(500); //частота, с которой информация выводится на экран.
lcd.print(" C");
lcd.setCursor(3,1); //установка положение курсора: четвертый сегмент, вторая строка.
//конец вывода информации на экран
if(cel>=27)//Логическое "если". Если температура больше или равна 27, то...
{
digitalWrite(ledPin, HIGH); // Влючается сигнал тревоги
lcd.print("Power OFF!"); //На ЖК экран выводится сообщение о том, что питание нагревательного элемента отключено.
digitalWrite(9, HIGH); //При температуре выше 28 силовой ключ включается, т.е. высокольтные приборы не работают.
delay(5000); //Датчик температуры не очень стабилен. Чтобы лишний раз не щелкать релюхой, ставим интервал в 5 сек.
}
if(cel<27) //Если температура меньше 27, то...
{
digitalWrite(ledPin, LOW); // сигнал тревоги выключается.
lcd.print("Power ON!"); //На LCD дисплей выводится сообщение о том. что питание нагревательного элемента включено.
digitalWrite(9, LOW); //При температуре ниже 27 силовой ключ выключается, т.е. высокольтные приборы работают.
delay(5000); //Датчик температуры не очень стабилен. Чтобы лишний раз не щелкать релюхой, ставим интервал в 5 сек.
}
}

Видео готовго результата