Spínání relé pomoci RTC

Odpovědět
peterson566
Příspěvky: 1
Registrován: 13 bře 2018, 22:13
Reputation: 0

Spínání relé pomoci RTC

Příspěvek od peterson566 » 14 bře 2018, 12:01

Zdravím,
potřebuji poradit jak zapsat, aby v daný čas seplo relé. To co mám teď nějak nejede.
Celý system má řídit osvětlení akvária, které má dvě oddělená světla + chlazení led čipů.
4 relé zatím slouží k zapnutí podsvícení LCD displeje na kterém běží čas a zobrazuje se teplota z akvária.

Nemůžu přijít na to jak se RTC zeptat kolik je hodin, no a pokud bude třeba 8:00 aby se zapnulo světlo.

Přikládám kód, je to hrozný bastl, protože jsem postupně přidával moduly a postupně to oživoval a kódy bral z různých zdrojů.

aktuálně to vyhazuje že "now." neexistuje když to mám uvedeno v if podmínce pro zjištění času.

Díky všem za nápady. Napadlo mě že je chyba v překladu čísel, protože je to překládáno z DEC o HEX a opačně, ..myslím.
Je to můj první projekt, ale už to zoufale potřebuji zprovoznit.

DÍKY

Moduly:
čas DS3231
teplotní sensor DS18b20
Arduino UNO
relé 4 kanály pin 4,5,6,7
LCD přes I2C
tlačítko pro zapnutí LCD
Přílohy
hodiny_teplota_rele.ino
bastl kod
(6.13 KiB) Staženo 354 x

K380
Příspěvky: 134
Registrován: 04 srp 2017, 12:43
Reputation: 0

Re: Spínání relé pomoci RTC

Příspěvek od K380 » 14 bře 2018, 14:10

Třeba podle tohoto programu-
http://www.instructables.com/id/Arduino ... S3231-RTC/
http://www.instructables.com/id/Aquariu ... oller/Nebo tohle jako ovládání akvaria.
Nebo upravit některý z programů "budík", místo buzeru použít relé !

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Spínání relé pomoci RTC

Příspěvek od gilhad » 15 bře 2018, 01:43

Par dotazu:
  • kde mas vubec deklarovane to "now" - ja to v kodu nenasel a se ctenim RTC to provazane nemas
  • delay(300); // every second ? to je 3x za sekundu a nastesti nevadi, ze se na pin opakovane posila stejna hodnota, ktera tam uz je, protoze se nemeni, ale obecne si tim muzes udelat docela problem
  • proc michas RLY_ON / RLY_OFF a LOW/HIGH, kdyz uz sis pro to ovladani zavedl ty konstanty (a navic rele je aktivni pri LOW, takze se snadno udela chyba)?
Navic
  • bcdToDec/decToBcd - spis bys to mel nazvat bcdToByte/byteToBcd, protoze vracis cislo v internim tvaru procesoru, nikoli retezec, ktery by mohl byt v desitkove soustave
  • to formatovani ... a ty if..else if na spoustu radku ... to delaji docela neprehledne. Vzhledem k tomu, ze se to Arduino vylozene flaka (par testu za sekundu pri 16MHz) bys mel spis nez setrit par cyklu, tak setrit programatora. Porovnej:

    Kód: Vybrat vše

        //--------------------------------------------------------------------------------------
        // RELE 3 ON vetrak
        
            if (now.hour() == 8 & now.minute() == 0 & now.second() == 5)
            {
        digitalWrite(RV_3, LOW);
            }
        
        // RELE 3 OFF vetrak
        else if (now.hour() == 20 & now.minute() == 2 & now.second() == 0)
        
            {
            digitalWrite(RV_3, HIGH);
            }
        
    
    
    s timto (ktere navic nejspis i funguje spravne a mnohem snaz se upravuje i kontroluje)

    Kód: Vybrat vše

        //--------------------------------------------------------------------------------------
        // RELE 3 vetrak
        
        if ( (hour ==  8) && (minute == 0) && (second == 5) ) { digitalWrite(RV_3, RLY_ON  ); };
        if ( (hour == 20) && (minute == 2) && (second == 0) ) { digitalWrite(RV_3, RLY_OFF ); };
       
    
    

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Spínání relé pomoci RTC

Příspěvek od pavel1tu » 17 bře 2018, 15:42

Já napoprvé použil kod z hotového projektu a také mi to nefungovalo .... nejsem dobrý programátor a ten tvuj kod - stratil jsem se tam.

Jdi na to postupně, já to dělal takto(na pořadí moc nekoukej, to bylo spíše dle toho co zrovna přišlo poštou):
1) jsem rozchodil měrění teploty, zobrazování na displeji (maličký OLED), topení zatím nemám, ale rele na něj mám
2) jsem rozchodil vše s časovým modulem (dodnes mi nechodí nastavování času z displeje+tlačítka - on ten modul mírně ujíždí ale málo jednotky sekund týdně ?, tak to neřeším) - používám s DS3231
3) jsem rozchodil plynulé řízení ozvětlení, regulaci "barvy" světla - používám 9x 3W bílé LED + 6x 1W "full spektrum" + čočky 60st.- zatím ladím co vyhovuje rostlinkám a nedělá řasy - reguluji zvlášť ty bílé a ty full spektrum - chladím pasivně 100% svitu mám nastaveno tak, aby mi hliníková lišta na které je mám topila tak na 45st.C (asi 2W/0,75W) - PWM regulace
4) osvětlení reguluji také podle snímače GY-2561 - také zatím ladím
5) podle času od/do kdy svítit uvolńuji podprogram, která svítí pomocí PWM + podle natvrddo nastavené barvy světla + podle světla v místnosti
6) podle času pouštím vzduchování + filtraci - to běží když nejsme doma

PS: v hlavní smyčce mám jen displej, 15s "task" mám na řízení světel , 1 min "task" na měření teploty+topení viz toto, někdo na to používá nějaké knihovny, ale to jsem zatím nezkoumal
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Spínání relé pomoci RTC

Příspěvek od Kony » 05 zář 2020, 15:12

Ahoj, mohl bych se připojit ???

Mám toto :

Kód: Vybrat vše

// Example sketch for interfacing with the DS1302 timekeeping chip.
//
// Copyright (c) 2009, Matt Sparks
// All rights reserved.
//
// http://quadpoint.org/projects/arduino-ds1302
#include <stdio.h>
#include <DS1302.h>

namespace {

// Set the appropriate digital I/O pin connections. These are the pin
// assignments for the Arduino as well for as the DS1302 chip. See the DS1302
// datasheet:
//
//   http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin   = 5;  // Chip Enable
const int kIoPin   = 6;  // Input/Output
const int kSclkPin = 7;  // Serial Clock

// Create a DS1302 object.
DS1302 rtc(kCePin, kIoPin, kSclkPin);

String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Neděle";
    case Time::kMonday: return "Pondělí";
    case Time::kTuesday: return "Úterý";
    case Time::kWednesday: return "Středa";
    case Time::kThursday: return "Čtvrtek";
    case Time::kFriday: return "Pátek";
    case Time::kSaturday: return "Sobota";
  }
  return "(unknown day)";
}

void printTime() {
  // Get the current time and date from the chip.
  Time t = rtc.time();

  // Name the day of the week.
  const String day = dayAsString(t.day);

  // Format the time and date and insert into the temporary buffer.
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %02d-%02d-%04d %02d:%02d:%02d",
           day.c_str(),
           t.date, t.mon, t.yr,
           t.hr, t.min, t.sec);

  // Print the formatted string to serial so we can see the time.
  Serial.println(buf);
}

}  // namespace

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);

  // Initialize a new chip by turning off write protection and clearing the
  // clock halt flag. These methods needn't always be called. See the DS1302
  // datasheet for details.
  rtc.writeProtect(false);
  rtc.halt(false);

  // Make a new time object to set the date and time.
  // Sunday, September 22, 2013 at 01:38:50.
  Time t(2020, 9, 5, 14, 54, 50, Time::kSaturday);

  // Set the time and date on the chip.
  rtc.time(t);
}

// Loop and print the time every second.
void loop() {
  printTime();
  digitalWrite(3, LOW);
//  Sepnuti led
//    if ( (t.hr == 15) && (t.min == 8) && (t.sec == 0) ) { digitalWrite(3, HIGH ); };
//    if ( (t.hr == 15) && (t.min == 9) && (t.sec == 0) ) { digitalWrite(3, LOW ); };
  delay(1000);
}
a nemůžu ani za boha přijít na to jak ovládat rele dle času

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Spínání relé pomoci RTC

Příspěvek od pavel1tu » 06 zář 2020, 19:50

https://drive.google.com/drive/folders/ ... sp=sharing

Moje akva jen jednoduchá verze, ale lze z toho vycházet
druhá verze je už pro DUE ovládaná z mobilu a internetu - ale není dodělaná (není letos čas)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů