Официальный сайт компании Arduino по адресу arduino.cc
Климат контроль на Arduino MEGA 2560
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 24/11/2015 - 11:53
Всем привет, дали в универе задание сделать климат контроль для двухкомнатной квартиры. В общем имеется набор датчиков, ардуино и дисплей 480х320. Начал писать код(сразу скажу, в этом я новичок от мокушки до кончиков пальцев ног) и сразу же столкнулся с проблеммой, даже с несколькими, а именно:
1) Не могу сдеать так, чтоб оно сначало вывело на экран то, что написано в строках с 20 по 66 один раз(как фон), а потом выводило динамические значения с датчиков. если раскомментировать строку 67 тогда не выводит вообще никаких значений на экран.
2) В сериал порте выводит значение датчика нормально, а на экране выводит 0.
Вот код. Я его только начал писать. Не пинайте.
#include <UTFT.h> extern uint8_t SmallFont[]; extern uint8_t BigFont[]; UTFT myGLCD(CTE32HR, 38, 39, 40, 41); const int sensorPin = 0; //датчик const int Relay = 13; //светодиод int smoke_level; //уровень дыма void setup() { Serial.begin(9600); pinMode(sensorPin, INPUT); pinMode(Relay, OUTPUT); myGLCD.InitLCD(); } void loop() { int x1, x2, y1, y2; myGLCD.clrScr(); { // Нарисовать несколько линий myGLCD.setColor(VGA_WHITE); //myGLCD.drawLine(x1,y1,x2,y2); myGLCD.drawLine(0, 184, 479, 184); myGLCD.drawLine(0, 49, 479, 49); myGLCD.drawLine(0, 319, 479, 319); myGLCD.drawLine(239, 49, 239, 319); myGLCD.setColor(VGA_WHITE); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(BigFont); myGLCD.print("HH.MM.SS", CENTER, 1); myGLCD.setFont(SmallFont); myGLCD.print("DD.MM.YYYY", CENTER, 20); //Улица myGLCD.setFont(BigFont); myGLCD.setColor(VGA_WHITE); myGLCD.print("OUTDOORS", 55, 59); myGLCD.print("Temp. :", LEFT, 89); myGLCD.print("Hum. :", LEFT, 129); //Кухня myGLCD.setColor(VGA_WHITE); myGLCD.print("KITCHEN", 303, 59); myGLCD.print("Temp. :", 240, 89); myGLCD.print("Setting:", 240, 109); myGLCD.print("Hum. :", 240, 129); myGLCD.setColor(VGA_RED); myGLCD.print("Gas: ", 240, 149); //Малая комната myGLCD.setColor(VGA_WHITE); myGLCD.print("SMALL ROOM", 29, 194); myGLCD.setColor(VGA_WHITE); myGLCD.print("Temp. :", LEFT, 224); myGLCD.print("Setting:", LEFT, 244); myGLCD.print("Hum. :", LEFT, 264); //Большая комната myGLCD.setColor(VGA_WHITE); myGLCD.print("LARGE ROOM", 279, 194); myGLCD.print("Temp. :", 240, 224); myGLCD.print("Setting:", 240, 244); myGLCD.print("Hum. :", 240, 264); // while (1) {} } { const int sensorPin = 0; //датчик const int Relay = 13; //светодиод int smoke; //уровень дыма smoke_level = analogRead(sensorPin); // считать уровень дыма Serial.println(smoke_level); myGLCD.setColor(VGA_WHITE); myGLCD.print(String(smoke), 303, 149); if (smoke_level > 100) { // проверить допустимый ли уровень дыма (газа) digitalWrite(Relay, HIGH); // если больше допустимого, зажечь светодиод } else { digitalWrite(Relay, LOW); } } delay (5000); }
Строки 19,68,69,70,71,83 - не нужны, вообще не нужны.
Строки 20-66 перенесите из loop() в конец setup(). Есть некоторые различия между loop() и setup(), хорошо бы Вам о них узнать.
Строка 67 - это бесконечный цикл, то есть выполнение скетча останавливается в этом месте. Совсем останавливается.
В строке 76 выводится значение smoke_level, а в строке 76 - smoke (нужна ли она вообще ?).
Общий вывод: Вам сильно не хватает понимания того, что Вы пишете, но это не навсегда ))), практика писания и гугление теории помогут.
дали в универе задание
Хоть один признался! Молодец!
Большое вам спасибо, изменил, всё заработало. Просто клепал по примерам, которые дали. Да и программирую я под железо с сегодняшнего утра) С С++ и JAVA для меня сложновато перейти на AVR-овские коды. Буду сидеть и гуглить да учить, пока не поседею)
дали в универе задание
Хоть один признался! Молодец!
В смысле?
В смысле никто обычно не признаётся, что это учебное задание.
В смысле никто обычно не признаётся, что это учебное задание.
Аааа, в этом смысле) А что, мне скрывать чтоле? Страшная тайна покрытая мраком! Уууууу!!! XD
Кстати, не подскажете, в чем измеряется уровень газа датчиком MQ-2? В промилле? Гуглил- не нашел такой информации.
Хоть один признался! Молодец!
Именно это меня и сподвигло помочь )))
Кстати, не подскажете, в чем измеряется уровень газа датчиком MQ-2? В промилле? Гуглил- не нашел такой информации.
в попугаях. не шучу.
в попугаях. не шучу.
Я понимаю, это смешно, но попросил же не пинать.
Кстати, не подскажете, в чем измеряется уровень газа датчиком MQ-2? В промилле? Гуглил- не нашел такой информации.
Да, на самом деле, в попугаях. Это, скорее, не измеритель, а датчик.
Почитайте даташит (https://www.seeedstudio.com/depot/datasheet/MQ-2.pdf), возможно, там найдёте.
Особенно хороша концовка этого документа:
"Resistance value of MQ-2 is difference to various kinds and various concentration gases. So,When using this components, sensitivity adjustment is very necessary. we recommend that you calibrate the detector for 1000ppm liquified petroleum gas,or 1000ppm iso-butaneconcentration in air and use value of Load resistance that( RL) about 20 KΩ(5KΩ to 47 KΩ). When accurately measuring, the proper alarm point for the gas detector should be determined after considering the temperature and humidity influence."
Почитайте даташит.
Как раз его дочитал. ppm это получается миллионная доля.
в попугаях. не шучу.
Я понимаю, это смешно, но попросил же не пинать.
дык эта... не шутил-же...
Кстати, не подскажете, в чем измеряется уровень газа датчиком MQ-2? В промилле? Гуглил- не нашел такой информации.
В вольтах. Только MQ2 - это больше для дыма (хотя и метан с бутаном тоже). Для природного газа лучше MQ4.
А вообще, если интересно посмотреть как работаюст с с датчиками MQN на ардуино - Вам сюда http://playground.arduino.cc/Main/MQGasSensors
Вы не знаете, как подключить несколько BMP180 к одной Arduino?
Вы не знаете, как подключить несколько BMP180 к одной Arduino?
есть тема (или даже несколько) на форуме по этой теме.
http://arduino.ru/forum/programmirovanie/arduino-mega-2560-i-datchiki-bmp180
есть тема (или даже несколько) на форуме по этой теме.
Нашел только это http://arduino.ru/forum/programmirovanie/arduino-mega-2560-i-datchiki-bmp180, но тут ничего не сказано об этом нормально.
есть тема (или даже несколько) на форуме по этой теме.
Нашел только это http://arduino.ru/forum/programmirovanie/arduino-mega-2560-i-datchiki-bmp180, но тут ничего не сказано об этом нормально.
Я, если честно не пользовался ни аппаратными "расширителями" I2C, ни программными. Но если бы мне приперло использовать два таких датчика одновременно - я просто добавил бы к одному (или к обоим) по микроконтроллеру. Я не знаю, зачем вам может понадобится два таких датчика, но не исключено, что добавление "мозгов" может оказаться полезным со многих позиций.
А возможно ли как нибудь переназначить ножки для приема и передачи? Ибо оно автоматом выставлено SDA-A4(A20) и CLC- A5(A21)
Большое вам спасибо, изменил, всё заработало. Просто клепал по примерам, которые дали. Да и программирую я под железо с сегодняшнего утра) С С++ и JAVA для меня сложновато перейти на AVR-овские коды. Буду сидеть и гуглить да учить, пока не поседею)
Что-то не похоже что Вы ассемблер выложили. Ну a ежели Вам тяжело перейти с С++ на С++, тады ой! :)
А разве AVR не на Си программируется? Да и коды НА железо и ПОД железо тоже немного отличаются. Я всего первый курс. Не надо так...
Поменял всё как Вы сказали, заработало. Счет с газового сенсора выводит и DHT работает, только если подключу к аналоговому пину( Хотя всё делал по примерам из библиотек. BMP пробовал подключать к меге(в тесте и в коде что ниже) и ничего, показывает нули. При том, что подключая к нано- всё работает. Подобная беда и с DHT- в тестовом коде всё работает и на нано и на меге, но только если в меге подключить к аналоговому пину
извиняюсь за беспокойство, хотела попросить у Вас помощи по поводу климат-контроля, тк мне нужно разработать блок управления климат-контроля но я плохо представляю как все взаимосвязано с МК и т.д... Тоже в универе дали такое задание...И некому помочь ;( если не сложно напишите мне пожалуйста на почту viktoriastrelkova@mail.ru
Пытаюсь переделать по свои нужды данный проект (надеюсь автор не против), но что то не так (первый раз имею с этим дело) может кто подсказать что не так? нужно заставить работать реле 1 (включние по температуре 29 и отключение 32 градуса)
Пытаюсь переделать по свои нужды данный проект (надеюсь автор не против), но что то не так (первый раз имею с этим дело) может кто подсказать что не так?
Только Вы и никто другой. Объясните толком что с ним не так, тогда может быть Вам помогут.
нужно заставить работать реле 1 (включние по температуре 29 и отключение 32 градуса), оно не хочет.... один раз щелкнет при включении и все.
Я тут тоже новичек, но может надо так.
Можно конечно еще добавить проверку если Low то перевести в High иначе ничего не делаем.
Я тут тоже новичек, но может надо так.
Можно конечно еще добавить проверку если Low то перевести в High иначе ничего не делаем.
Приведённые два куска кода будут сначала не включать реле, а выключать - если реле управляется по низкому уровню. Т.е. логика работы сменится с точностью до наоборот.