Вентилятор 220В на ардуино

linkor
Offline
Зарегистрирован: 05.04.2018

Здравствуйте!
Хочу реализовать проект вентилятора на ардуино с термодатчиком и выводом температуры на экран.
В наличии есть:
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 вечера поисков в интернете ничего не дали.

sadman41
Offline
Зарегистрирован: 19.10.2016

linkor пишет:

2 вечера поисков в интернете ничего не дали.

Тут тоже интернет. Будет такая же фигня.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

sadman41 пишет:

linkor пишет:

2 вечера поисков в интернете ничего не дали.

Тут тоже интернет. Будет такая же фигня.

+1

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ven-til
Offline
Зарегистрирован: 13.02.2018

Ну тут все просто. Надо определить каких строк не хватает в первом или во втором скетче.

Если за основу брать первый скетч, то не хватает строк включения вентилятора и инициализации пина для реле.
А если брать за основу второй скетч, то не хватат строк вывода на экран, библиотек для работы с экраном и инициализации экрана.

копираст судя по всему уже досконально изучен и проблем быть не должно.

Genri5
Offline
Зарегистрирован: 31.05.2016

Осталось включить Мозги - это, как правило, сложнее всего. :-)