Первый шаг

steam_engineer
Offline
Зарегистрирован: 08.03.2019

Добрый день!

 

Решаил попробовать поардуинить.

 

Хочу сделать чтобы реле срабатывало при определенной температуре.

 

#include <OneWire.h>
#include <DallasTemperature.h>
 
int LED=13;
int REL=6;
int RS;
 
DeviceAddress Term01 = { 0x28, 0xFF, 0x4F, 0x81, 0xA6, 0x16, 0x3, 0x1B };
 
OneWire oneWire(10);
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
 
  pinMode (LED, OUTPUT);
  pinMode (REL, OUTPUT);
}
 
void loop(void)
{
 
 sensors.requestTemperatures();
 RS = sensors.getTempC(Term01);
 Serial.println("Temperature in room"); 
 //Serial.println(sensors.getTempC(Term01));
   
 Serial.println(RS);
 
  if (RS>=28) 
    {
      digitalWrite(LED, HIGH);
      digitalWrite(REL, LOW);
      delay(1000);
    } 
  else if (RS<28)
  {
      digitalWrite(REL, HIGH);
      delay(1000);
    }
    
}
 
Но почему-то реле постоянно в замкнутом состоянии, не зависимо от значения температуры.
Размыкается и замыкается при включении монитора порта.
Температура на монитор порта выводится правильно.
Светодиод своей жизнью моргает.
С языком Си не знаком, только начинаю.
 
Подскажите пожалуйста
sadman41
Offline
Зарегистрирован: 19.10.2016
steam_engineer
Offline
Зарегистрирован: 08.03.2019
#include <OneWire.h>
#include <DallasTemperature.h>

int LED=13;
int REL=6;
int RS;

DeviceAddress Term01 = { 0x28, 0xFF, 0x4F, 0x81, 0xA6, 0x16, 0x3, 0x1B };

OneWire oneWire(10);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();

  pinMode (LED, OUTPUT);
  pinMode (REL, OUTPUT);
}

void loop(void)
{

 sensors.requestTemperatures();
 RS = sensors.getTempC(Term01);
 Serial.println("Temperature in room"); 
 //Serial.println(sensors.getTempC(Term01));
   
 Serial.println(RS);

  if (RS>=28) 
    {
      digitalWrite(LED, HIGH);
      digitalWrite(REL, LOW);
      delay(1000);
    } 
  else if (RS<28)
  {
      digitalWrite(REL, HIGH);
      delay(1000);
    }
    
}

 

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

Строки #36 и #41 удаляете, из #38 убираете else и указываете вместо 28C чуть поменьше. Например 25C. Таким образом получаете переключатель с гистерезисом.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
#include <OneWire.h>
#include <DallasTemperature.h>

int LED = 13;
int REL = 6;
int RS;

DeviceAddress Term01 = { 0x28, 0xFF, 0x4F, 0x81, 0xA6, 0x16, 0x3, 0x1B };

OneWire oneWire(10);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();

  pinMode (LED, OUTPUT);
  pinMode (REL, OUTPUT);
}

void loop(void)
{
  sensors.requestTemperatures();
  RS = sensors.getTempC(Term01);
  Serial.print("Temperature in room: ");
  Serial.print(RS);
  Serial.println("c");

  if (RS >= 28)
  {
    digitalWrite(LED, HIGH);
    digitalWrite(REL, LOW);
    Serial.println("Rele off");
  }
  else
  {
    digitalWrite(LED, LOW);
    digitalWrite(REL, HIGH);
    Serial.println("Rele on");
  }
  delay(1000);
}

в монитор порта что выводит ?

steam_engineer
Offline
Зарегистрирован: 08.03.2019
Монитор порта:
Temperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:27CTemperature in room:27CTemperature in room:28CRele off
Temperature in room:28CRele off
Temperature in room:29CRele off
Temperature in room:29CRele off
Temperature in room:29CRele off
Temperature in room:29CRele off
Temperature in room:29CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:30CRele off
Temperature in room:29CRele off
Temperature in room:29CRele off
Temperature in room:29CRele off
Temperature in room:28CRele off
Temperature in room:28CRele off
Temperature in room:28CRele off
Temperature in room:27CTemperature in room:27CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:25CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26CTemperature in room:26C
steam_engineer
Offline
Зарегистрирован: 08.03.2019

Кстати, работает, только почему-то инвертируется сигнал. При >= 28 включается, а при <28 выключается.

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

Модуль реле такой, видать. По LOW включается, по HIGH выключается.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

да блин, все забываю, что эти модули 0 включаются !

#include <OneWire.h>
#include <DallasTemperature.h>

int LED = 13;
int REL = 6;
int RS;

DeviceAddress Term01 = { 0x28, 0xFF, 0x4F, 0x81, 0xA6, 0x16, 0x3, 0x1B };

OneWire oneWire(10);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();

  pinMode (LED, OUTPUT);
  pinMode (REL, OUTPUT);
}

void loop(void)
{
  sensors.requestTemperatures();
  RS = sensors.getTempC(Term01);
  Serial.print("Temperature in room: ");
  Serial.print(RS);
  Serial.println("c");

  if (RS < 28)
  {
    digitalWrite(LED, HIGH);
    digitalWrite(REL, LOW);
    Serial.println("Rele on");
  }
  else
  {
    digitalWrite(LED, LOW);
    digitalWrite(REL, HIGH);
    Serial.println("Rele off");
  }
  delay(1000);
}

 

steam_engineer
Offline
Зарегистрирован: 08.03.2019

Спасибо! Без Вашей помощи долго бы голову ломал!

SLKH
Offline
Зарегистрирован: 17.08.2015

xDriver пишет:

да блин, все забываю, что эти модули 0 включаются !

а не надо всё помнить.

// один раз объявляешь
#define relPin 6
#define relayON digitalWrite(relPin, LOW);  
#define relayOFF digitalWrite(relPin, HIGH);
// или как те надо


void setup() 
  {
  pinMode(relPin, OUTPUT);
  relayOFF
  
  }

void loop() 
  {
  /* здесь пишешь relayON или relayOFF 
  * и не вспоминаешь, чем там оно на самом деле включается.
  * А если светодиод приколхозишь на тот же пин, что и реле - 
  * программа ещё упростится.
   */
  

  }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SLKH пишет:

#define relayON digitalWrite(relPin, LOW);  

Если не возражаете, мелкое замечание: здесь лучше не ставить точку с запятой, а оставить её на внешнюю программу

SLKH
Offline
Зарегистрирован: 17.08.2015

ЕвгенийП пишет:

SLKH пишет:

#define relayON digitalWrite(relPin, LOW);  

Если не возражаете, мелкое замечание: здесь лучше не ставить точку с запятой, а оставить её на внешнюю программу

Спасибо. Как раз эта ";" у меня сомнение вызывала.