Строю Терр для его автоматизации решил использовать ардуино , с паяльником дружу с детства , но вот по программированию конечно тёмный лес , собрать КОД с примеров могу но вот как реализовать не знаю , читал на амперке уроки и смотрел видео но вот что то не получается! В общем решил писать КОД сейчас, пока ещё всё едет ко мне в посылке а именно Arduino UNO , сенсорный экран Arduino совместимый 3,2 "TFT LCD , с датчиками не определился (хочу послушать мнение профи), в качестве средства ввода параметров и навигации по меню хочу использовать энкодер с кнопкой) , желательно управлять нагрузкой симистрами В задачи должно входить : Полная автономность (не зависимость от ПК , вод параметров влажности и температуры с помощью экрана ) , мониторинг в реальном времени влажности и температуры в 4-х точках : фоновая , тёплый угол , холодный угол , купалка , Разделение температуры на время дня , при достижении заданной температуры (дневной , ночной) отключение обогревательного элемента а так же его включение при падении температуры на 3 градуса , при уровне влажности ниже заданного уровня включение увлажнителя , при превышении уровня влажности включение принудительной вентиляции (с задержкой в минут 10) , реализация заката , рассвета . Звуковой сигнал при выходи из строя датчиков , и отключение обогревателей и увлажнителя в случаи выход из строя датчика теплого угла либо фоновой температуры
Я думаю задачу стоит дополнить схемой, её тут точно не хватает, пока едут запчасти, лучше посмотреть какой нибудь самоучитель по С/С++ на youtube, и попробовать порешать какие нибудь простенькие задачки, разобраться так сказать с основными конструкциями языка.
Смотрел , зажигал диоды , ну и так далее , согласно примерам понял как опрашивать датчики , но вот экран конечно сам не разберусь , литературу безусловно почитаю , схему буду рисовать завтра , завтра и выложу
http://www.elecfreaks.com/store/32width-400240-tft-lcm-tft0132w-widescreen-p-116.html Там в документах внизу есть библиотека и демонстрационные примеры по работе с экраном, все что нужно.Осталось узнать как подключить экран.
Может нужна вот такая плата http://vkitae24.ru/index.php?route=catalog&product=144471 ? для подключения экрана
Только если у вас отдельный дисплей. Если на шилде - тогда не нужно. У вас какой? Судя по ссылке выше все таки отдельный... Тогда да, нужен переходник.
Мы конечно профи и обязательно поможем, только прикольно будет разбираться с дисплеем который есть только у вас Переходник имело смысл заказать сразу. Экран расчитан на работу с другой платой Ардуино, он для Mega. Если вы сталкиваетесь с микроконтроллерами впервые, советую приобрести стандартный и всем тут известный дисплей либо 16х2, либо 20х4 этим вы избавите себя от многих проблем. А когда поймёте как всё это устроено, будете наводить красоту. Ещё одно наблюдение, чем круче дисплей, тем меньше остаётся свободных портов контроллера. Такое устройство должно быть жутко надёжным, оно конечно будет радовать хозяина в его присутствии, но ломаться оно будет, когда вас не будет дома, так, что аварийное отключение оно хорошо, но походу дублировать датчики тоже придётся.
это пример кода , не мой , но мне бы подошёл #include <LiquidCrystal.h> // Подключаем стандартную библиотеку управления экраном #define DHTPIN 8 // Считывающий пин с датчика #define DHTTYPE DHT11 // Модель датчика #define tPIN 7 // Пин управления температурой #define hPIN 6 // Пин управления влажностью #define lPIN 5 // Пин управления светом #define sdPIN 3 // Пин управления светодиодной лентой DHT dht(DHTPIN, DHTTYPE); // Создаем объект dht int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл int tempDay = 32; // Желаемая дневная температура в градусах Цельсия int tempNight = 24; // Желаемая ночная температура в градусах Цельсия int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл int humDay = 75; // Желаемая дневная влажность int humNight = 50; // Желаемая ночная влажность LiquidCrystal lcd(12, 11, 10, 9, 4, 2); // Инициализируем дисплей void setup() // инициализация основных данных { Serial.begin(9600); // Инициализируем COM-порт dht.begin(); // Инициализируем датчик pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод pinMode(hPIN, OUTPUT); pinMode(lPIN, OUTPUT); lcd.begin(16,2); // устанавливаем размеры экрана } void loop() // зацикливание (код управляющей программы) { if (Serial.available() > 0) SetTime(); // Если на COM-порт поступила информация, то изменим системное время float h = dht.readHumidity(); // Считываем влажность float t = dht.readTemperature(); // Считываем температуру int Hour = RTC.get(DS1307_HR,true); // Получаем значение текущего часа int Minute = RTC.get(DS1307_MIN,false); int Second = RTC.get(DS1307_SEC,false); boolean Day = (Hour >= 8 & Hour <20); // Если текущий час находится в промежутке от 8 до 20, то действуют дневные параметры tStatus = (t < ((Day) ? tempDay : tempNight)) ? LOW:HIGH; // Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл //Relay.lineWrite(tPIN, tStatus); digitalWrite(tPIN, tStatus); if (h < ((Day) ? humDay : humNight)) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл digitalWrite(hPIN, hStatus); digitalWrite(lPIN, (Day) ? LOW:HIGH); // Если дневное время, то включим подсветку switch(Hour) // в зависимости от времени меняем яркость светодиодной ленты { case 7:analogWrite(sdPIN, map(Minute, 0, 59, 0, 255)); break; case 20:analogWrite(sdPIN, map(Minute, 0, 59, 255, 0)); break; default:analogWrite(sdPIN, (Day) ? 255:0); } lcd.setCursor(1,0); // устанавливаем позицию курсора на экране (на один символ правее левого верхнего угла) lcd.print(t, 1); lcd.print("C "); lcd.print(h, 1); lcd.print("%"); // Выводим информацию о климате lcd.setCursor(4,1); // устанавливаем курсор для вывода времени lcd.print(addZero(Hour));lcd.print(":");lcd.print(addZero(Minute));lcd.print(":");lcd.println(addZero(Second)+ " "); // Выводим время lcd.setCursor(1,1);lcd.print((tStatus == LOW) ? "+":" "); // Выводим индикатор работы подогрева lcd.setCursor(13,1);lcd.print((hStatus == LOW) ? "+":" "); // Выводим индикатор работы увлажнения delay(500); // Задержка в пол секунды } void SetTime() // установка времени из шаблона tчч:мм { if (Serial.read() == 't') // Если первый символ t, то установим указанное время { int h = (Serial.read() - '0') * 10 + (Serial.read() - '0'); Serial.read(); int m = (Serial.read() - '0') * 10 + (Serial.read() - '0'); RTC.stop(); RTC.set(DS1307_SEC,0); //set the seconds RTC.set(DS1307_MIN,m); //set the minutes RTC.set(DS1307_HR,h); //set the hours RTC.start(); } Serial.flush(); } String addZero(int val) { if (val<10) return "0" + String(val);else return String(val); }
Я вот не знаю как все остальные я люблю делать так - не всё сразу подключать и отлаживать, а по частям, допустим подключил сенсор, проверил его работу, затем описал какую то логику работы этого сенсора,проверил работает или не работает, потом перешел к задаче номер 2 подключить дисплей проверить его работоспособность демо-примерами, и т.д. вообще подключение дисплея это самая последняя задача наверное в любых проектах, я правда только один дисплей подключал winstar wg12864b. но могу сказать что с ним довольно легко работать, я думаю с цветным дисплеем должна быть похожая история...там разницы я думаю особой нет разве что тот цветной, просто вызываешь из библиотеки нужные функции, которые слова пишут, квадраты рисуют и т.п. ещё ТониМонтана мой тебе совет когда пишешь код выделяй его Код (Text): void setup() { } void loop() { } что то типо этого, также не помешало бы полный список всего имеющегося оборудования, предпологаемая схема подключения, возможно даже предполагаемая схема размещения всего этого дела в пространстве(хотя это в принципе не обязательно), пока так тогда будет больше представления о происходящем... пока так
И в процессе в отдельном текстовом файле сопровождения проекта, писать номера ног ардуины или контроллера, на которые претендует каждое из устройств