Вентилятор 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
Ну тут все просто. Надо определить каких строк не хватает в первом или во втором скетче.
Если за основу брать первый скетч, то не хватает строк включения вентилятора и инициализации пина для реле.
А если брать за основу второй скетч, то не хватат строк вывода на экран, библиотек для работы с экраном и инициализации экрана.
копираст судя по всему уже досконально изучен и проблем быть не должно.
Осталось включить Мозги - это, как правило, сложнее всего. :-)