Stránka 1 z 1

Spínání relé pomoci RTC

Napsal: 14 bře 2018, 12:01
od peterson566
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

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

Napsal: 14 bře 2018, 14:10
od K380
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é !

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

Napsal: 15 bře 2018, 01:43
od gilhad
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 ); };
       
    
    

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

Napsal: 17 bře 2018, 15:42
od pavel1tu
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

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

Napsal: 05 zář 2020, 15:12
od Kony
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

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

Napsal: 06 zář 2020, 19:50
od pavel1tu
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)