Close

michal09

Vytvořené odpovědi

Aktuálně jsou na stránce zobrazeny 3 příspěvky - 1. až 3. (celkem z 3)
  • Autor
    Příspěvky
  • odpověď na: uspání arduina nano #11088
    michal09
    Účastník

    Interní timer by dokázal arduino vzbudit, ale bohužel není přesný a je mopžné ho nastavit jen na max. 8s což je v mém případě hrozně málo. Z toho důvodu jsem chtěl použít DS3231 jako interrup impuls. Problém jsem nakonec dokázal odstranit díky foru na arduino.cc. Při napájení z baterie 3,7V se ve sleep modu dostanu na ca 4mA po odstranění indikační diody na RTC. Nyní ještě odstraním diodu na desce arduina nano a snad to snížím ještě dolů. Každopádně lze arduino uspat tak, že má odběr jen pár micro ampéry, když procesor pracuje na 8 nebo 16 Mhz.

    odpověď na: uspání arduina nano #11063
    michal09
    Účastník

    Díky, to je více méně. Zkusím pokud se mi podaří stáhnout ty knihovny, jelikož DS knihovnu používám jinou.

    odpověď na: uspání arduina nano #11061
    michal09
    Účastník

    Výsledkem by mělo být, že mi arduino změří venkovní teplotu ca každých 10 minut a odešle pře vysílač 433MHZ a půjde zase spát. Jelikož za oknem nemám zásuvku, tak bude arduino napájeno z baterie a proto nutnost uspání. Nicméně moje kroky jsou postupné, tzn, nejprve si chci odladit kód pro uspání a následně přidat odesílání přes vysíláč 433Mhz.
    V kódu jsem našel již také chybu a také jsem našel na youtubu dobrý zdroj na uspání arduina, ale ani to mi nefunguje:

    Na serial monitoru se mi objeví následující:
    07/04/2017 20:33:17
    Woke up
    Woke up
    07/04/2017 20:33:18
    Woke up
    Woke up
    07/04/2017 20:33:19
    Woke up
    alarm zpusten
    Woke up
    Woke up
    vstup do spanku
    Woke up
    07/04/2017 20:33:22
    07/04/2017 20:33:23
    07/04/2017 20:33:24
    07/04/2017 20:33:25
    07/04/2017 20:33:26
    07/04/2017 20:33:27
    07/04/2017 20:33:28
    07/04/2017 20:33:29
    07/04/2017 20:33:30
    07/04/2017 20:33:31
    07/04/2017 20:33:32
    07/04/2017 20:33:33
    07/04/2017 20:33:34
    07/04/2017 20:33:35
    07/04/2017 20:33:36
    07/04/2017 20:33:37
    07/04/2017 20:33:38
    07/04/2017 20:33:39
    07/04/2017 20:33:40
    07/04/2017 20:33:41
    07/04/2017 20:33:42
    07/04/2017 20:33:43
    07/04/2017 20:33:44
    07/04/2017 20:33:45
    07/04/2017 20:33:46
    07/04/2017 20:33:47
    07/04/2017 20:33:48
    07/04/2017 20:33:49
    07/04/2017 20:33:50
    07/04/2017 20:33:51
    07/04/2017 20:33:52
    07/04/2017 20:33:53
    07/04/2017 20:33:54
    07/04/2017 20:33:55
    07/04/2017 20:33:56
    07/04/2017 20:33:57
    07/04/2017 20:33:58
    07/04/2017 20:33:59
    07/04/2017 20:34:00
    07/04/2017 20:34:01
    07/04/2017 20:34:02
    07/04/2017 20:34:03
    07/04/2017 20:34:04
    07/04/2017 20:34:05
    07/04/2017 20:34:06
    07/04/2017 20:34:07
    07/04/2017 20:34:08
    07/04/2017 20:34:09
    07/04/2017 20:34:10
    07/04/2017 20:34:11
    07/04/2017 20:34:12
    07/04/2017 20:34:13
    07/04/2017 20:34:14
    07/04/2017 20:34:15
    07/04/2017 20:34:16
    07/04/2017 20:34:17
    07/04/2017 20:34:18
    07/04/2017 20:34:19
    07/04/2017 20:34:20
    alarm zpusten
    vstup do spanku
    Woke up
    Woke up
    07/04/2017 20:34:22
    07/04/2017 20:34:23
    07/04/2017 20:34:24
    07/04/2017 20:34:25
    07/04/2017 20:34:26

    Trochu mi to přijde, jako by mi na ten pin 2 co mi má probouzet arduino ze spánku pořád něco posílalo bez ohledu na nastavený alarm.
    Na pin 2 jsem přivedl přímo SQW z DS3231, tak jako je to v tom odkazu na youtubu, ale když změřím napětí mezi GND a SQW, tak zjistím, že z SQW mi vlastně lezou pulzy, což by mě mohlo neustále zapína arduino bez ohledu na nastavený alarm.
    Původně mi ještě napadl rezistor mezi pinem 2 a SQW, ale to nepomohlo. Více méně mi stačí poradit jak rozchodit program co je na youtubu a měl bych vystaráno.

    kód z youtubu:
    #include <DS3231.h>
    #include <avr/sleep.h>
    #include <Wire.h>

    int wakePin = 2;
    int led = 13;

    DS3231 clock;
    RTCDateTime t;

    void setup() {
    Serial.begin(9600);
    Serial.println(„initislizace“);
    clock.begin();
    pinMode(wakePin, INPUT_PULLUP);
    pinMode(led,OUTPUT);

    clock.armAlarm1(false);
    clock.clearAlarm1();
    clock.setAlarm1(0,0,0,20,DS3231_MATCH_S);
    attachInterrupt(0,wakeUpNow,CHANGE);
    CheckAlarms();
    }

    void CheckAlarms(){
    RTCAlarmTime a1;
    RTCAlarmTime a2;
    if(clock.isArmed1()){
    a1 = clock.getAlarm1();
    Serial.print(„Alarm1 je nastaven“);
    switch(clock.getAlarmType1()){
    case DS3231_MATCH_S:
    Serial.print(„when second match: „);
    Serial.println(clock.dateFormat(„_ _:_:s“,a1));
    delay(100);
    break;
    default:
    Serial.println(„nezname nastaveni RTC“);
    break;
    }

    }
    }

    void wakeUpNow(){
    Serial.println(„Woke up“);
    delay(300);
    }

    void sleepNow(){
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    attachInterrupt(0,wakeUpNow,CHANGE);
    sleep_mode();

    sleep_disable();
    detachInterrupt(0);
    }

    void loop() {
    t = clock.getDateTime();
    Serial.println(clock.dateFormat(„d/m/Y H:i:s“, t));
    delay(100);

    if (clock.isAlarm1()){
    Serial.println(„alarm zpusten“);
    digitalWrite(led,HIGH);
    delay(1000);
    digitalWrite(led,LOW);
    Serial.println(„vstup do spanku“);
    delay(100);
    sleepNow();
    }

    delay(900);
    }

Aktuálně jsou na stránce zobrazeny 3 příspěvky - 1. až 3. (celkem z 3)