Вентилятор 220В на ардуино
- Войдите на сайт для отправки комментариев
Чт, 05/04/2018 - 22:39
Здравствуйте!
Хочу реализовать проект вентилятора на ардуино с термодатчиком и выводом температуры на экран.
В наличии есть:
Arduino nano
OLED дисплей 128X64
Датчик температуры DS18B20
Модуль Реле
Вентилятор 220В
Есть 2 скетча:
- для дисплея с термодатчиком
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 10 // номер пина к которому подключен DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #include <OLED_I2C.h> OLED myOLED(8, 9, 8); // 8pin - SDA , 9pin - SCL extern uint8_t RusFont[]; // Русский шрифт extern uint8_t MegaNumbers[]; // Подключение больших шрифтов extern uint8_t SmallFont[]; // Базовый шрифт без поддержки русскийх символов. void setup() { sensors.begin(); myOLED.begin(); } void loop() { sensors.requestTemperatures(); myOLED.clrScr(); // очищаем экран myOLED.setFont(RusFont); // Устанавливаем русский шрифт myOLED.print("Ntvgthfnehf", CENTER, 0); // Выводим надпись "Температура" myOLED.setFont(SmallFont); myOLED.print("iarduino.ru", CENTER, 55); // вывод текста myOLED.setFont(MegaNumbers); myOLED.print(String(sensors.getTempCByIndex(0) , 1), CENTER, 9); // Отображение температуры myOLED.update(); delay(100); }
- для термодатчика и включением/выключением реле
#include <OneWire.h> OneWire ds(10); void setup() { Serial.begin(9600); pinMode(3, OUTPUT); } void loop() { byte i; byte data[12]; byte addr[8]; float celsius; // поиск адреса датчика if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // команда на измерение температуры delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); // команда на начало чтения измеренной температуры // считываем показания температуры из внутренней памяти датчика for ( i = 0; i < 9; i++) { data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; // датчик может быть настроен на разную точность, выясняем её byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс // преобразование показаний датчика в градусы Цельсия celsius = (float)raw / 16.0; Serial.print("t="); Serial.println(celsius); if (celsius > 26.5) // Если температура достигает температуры 26.5, включаем вентилятор { digitalWrite(3, HIGH); delay(500); } if (celsius < 24.0) // Если температура опустится ниже температуры 24.5, отключаем вентилятор { digitalWrite(3, LOW); delay(500); } }
По отдельности они отлично функционируют. Однако как их соединить, я не могу сообразить. 2 вечера поисков в интернете ничего не дали.
2 вечера поисков в интернете ничего не дали.
Тут тоже интернет. Будет такая же фигня.
2 вечера поисков в интернете ничего не дали.
Тут тоже интернет. Будет такая же фигня.
+1
Ну тут все просто. Надо определить каких строк не хватает в первом или во втором скетче.
Если за основу брать первый скетч, то не хватает строк включения вентилятора и инициализации пина для реле.
А если брать за основу второй скетч, то не хватат строк вывода на экран, библиотек для работы с экраном и инициализации экрана.
копираст судя по всему уже досконально изучен и проблем быть не должно.
Осталось включить Мозги - это, как правило, сложнее всего. :-)