michal09
Vytvořené odpovědi
-
AutorPříspěvky
-
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.
michal09ÚčastníkDíky, to je více méně. Zkusím pokud se mi podaří stáhnout ty knihovny, jelikož DS knihovnu používám jinou.
michal09ÚčastníkVý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:26Trochu 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);
} -
AutorPříspěvky