Hallo,
mein erstes Projekt ist schon fertig ich komme aber leider mit dem Stromverbrauch nicht ganz hin -
Ich möchte eine Tür überwachen. Diese Überwachung soll mittels Magnetschalter geschehen. Wenn die Tür geschlossen wird, soll ein Programm ablaufen, welche zwei Relais schaltet. An diesen Relais ist ein Handy angeschlossen, welches mit Relai1 eingeschaltet wird und einen Anruf wird über Relai2 ausgelöst. Am Ende wird das Handy wieder abgeschaltet.
Das Passt auch alles. Leider Verbraucht meine Schaltung 0,9mA, die Batterie reicht so gerade mal zwei Tage.
const int Relai1 = 0;
const int Ausloeser = 1; // Magnetschalter
const int Relai2 = 2;
const int led1 = 4;
int buttonState = 0;
void setup() {
pinMode(Ausloeser, INPUT); // Magnetschalter
pinMode(Relai1, OUTPUT);
pinMode(Relai2, OUTPUT);
pinMode(led1, OUTPUT);
}
void loop() {
buttonState = digitalRead(Ausloeser);
if (buttonState == LOW){
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
delay(100);
}
else{
digitalWrite(led1, HIGH);
delay(10000);
digitalWrite(led1, LOW);
delay(1000);
digitalWrite(Relai1, HIGH);
delay(5000);
digitalWrite(Relai1, LOW);
delay(20000);
digitalWrite(Relai2, HIGH);
delay(5000);
digitalWrite(Relai2, LOW);
delay(10000);
digitalWrite(Relai1, HIGH);
delay(2000);
digitalWrite(Relai1, LOW);
delay(10000);
}
}
Was ich bin jetzt im Internet gefunden habe:
#include <avr/sleep.h>
#include <avr/interrupt.h>
int Relai1 = 0;
int Ausloeser = 1; // Magnetschalter
int Relai2 = 2;
int led1 = 4;
int buttonState = 0;
void setup() {
pinMode(Ausloeser, INPUT); // Magnetschalter
pinMode(Relai1, OUTPUT);
pinMode(Relai2, OUTPUT);
pinMode(led1, OUTPUT);
for (int k = 0; k < 10; k = k + 1) {
if (k % 2 == 0) buttonState = digitalRead(Ausloeser);
if (buttonState == 0){
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
delay(100);
}
else {
digitalWrite(led1, LOW);
}
}
}
void sleep() {
GIMSK |= _BV(PCIE); // Enable Pin Change Interrupts
PCMSK |= _BV(PCINT3); // Use PB3 as interrupt pin
ADCSRA &= ~_BV(ADEN); // ADC off
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // replaces above statement
sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
sei(); // Enable interrupts
sleep_cpu(); // sleep
cli(); // Disable interrupts
PCMSK &= ~_BV(PCINT1); // Turn off PB1 as interrupt pin
sleep_disable(); // Clear SE bit
ADCSRA |= _BV(ADEN); // ADC on
sei(); // Enable interrupts
}
ISR(PCINT0_vect) {
}
void loop() {
digitalWrite(led1, HIGH);
delay(10000);
digitalWrite(led1, LOW);
delay(1000);
digitalWrite(Relai1, HIGH);
delay(5000);
digitalWrite(Relai1, LOW);
delay(20000);
digitalWrite(Relai2, HIGH);
delay(5000);
digitalWrite(Relai2, LOW);
delay(10000);
digitalWrite(Relai1, HIGH);
delay(2000);
digitalWrite(Relai1, LOW);
delay(10000);
}
Meine Versuche hiermit haben zwar den ATtiny85 in den Standby-Modus gebracht, nur reagierte er nicht auf den Magnetkontakt.
Das Buch von John Boxall: Arduino Workshops hilft an dieser Stelle leider auch nicht weiter.
Gibt es eventuell einen besseren Weg oder eine gute „Anleitung“ die mir hier helfen kann? Der Strom kann hier leider nicht aus der Steckdose kommen, es muss eine Batterie sein...
Jetzt bin ich gespannt was passiert!
Gruss, Max