ТЕРМОРЕЛЕ НА ARDUINO UNO
Может, кому пригодится такая штука. Например, для выращивания каких-нибудь эксзотических растений.
Для начала надо установить среду разработки, IDE, которую можно скачать с офф. сайта. Кстати, версия для Linux работает отлично и не надо никаких драйверов. Есть лишь один нюанс: при попытке залить скетч в вашу Ардуинку программа, скорее всего, выдаст сообщение типа "Permission denied" - значит, ей не предоставлены соответствующие права. Лечится это дело таким образом, хотя точнее даже не образом, а скорее "числом зверя":
sudo chmod 666 /dev/ttyUSB0
Конечно же, данная команда поможет только в том случае, если ваше устройство подцепилось на ttyUSB0. В противном случае можете паниковать и плакать. Ну... На самом деле, можно подсмотреть маркировку устройства в системе в той же IDE, в которой вы будете писать свой скетч.
У меня тут используется экранчик, который подключается вот так:
Датчик температуры "LM35":
Реле:
Диод:
На этих иллюстрациях показан сам принцип подключения, но вообще-то назначение пинов ввода-вывода можно менять по своему усмотрению.
А вот и код программы 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 сек. } }