INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie Stromvergrauch reduzieren?
04.03.2016, 19:51
Beitrag #1
Wie Stromvergrauch reduzieren?
Hallo Leute,

mein erstes Projekt steht eigentlich :-) Allerdings möchte ich den Stromverbrauch noch weiter reduzieren.

Ich habe einen Bewegungsmelder (Pyroelectrische Infrarot PIR Bewegung Sensor Detektor Modul) und einen 433 MHz Sender für die Funksteckdosen. Nun möchte ich die Steckdosen bei Anwesenheit schalten. Dies funktioniert auch super allerdings ist mir aufgefallen das der Code ständig Signale sendet bedingt durch das loop auch der Stromverbrauch lässt zu wünschen übrig.

Code:
int bewegung = 7;
int bewegungsstatus = 0;

#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

void setup()
{
    mySwitch.enableTransmit(10);
    pinMode(bewegung, INPUT);
}

void loop()
{
    bewegungsstatus = digitalRead(bewegung);
    if (bewegungsstatus == HIGH)
    {
                for (int i = 0; i<4; i++) {      //Code soll zur Sicherheit 4x gesendet werden
            mySwitch.send(4433, 24);
            delay(500);
        }
        delay(120000);
    }

    else
    {
        for (int i = 0; i<4; i++) {                 //Code soll zur Sicherheit 4x gesendet werden
            mySwitch.send(4436, 24);
            delay(500);
        }
        delay(120000);
    }

}

Hat jemand eine Idee wie sich der Stromverbrauch reduzieren lässt?
Wie kann ich das ständige (im Moment alle 12 Sekunden) senden der Signale verhindern?

Ich möchte das ganze mit einen Attiny85 und 4x AA Eneloop Akkus (also 4,8 Volt 1.900 mAh) betreiben.

Danke und Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 20:50 (Dieser Beitrag wurde zuletzt bearbeitet: 04.03.2016 22:41 von hotsystems.)
Beitrag #2
RE: Wie Stromvergrauch reduzieren?
Das ewige Schalten kannst du dadurch verhindern, indem du eine Variable auf High setzt, sobald eine Bewegung auftritt.
Solange die Variable High ist, wird kein erneutes Signal gesendet.
Wenn keine Bewegung mehr vorhanden ist geht die Variable auf Low. Solange die auf Low ist, wird kein erneutes Signal gesendet.
Und nimm die langen delays raus, die stören nur den Ablauf. Während des delay macht der Atmega nix ausser warten.

Im übrigen bekommst du hier schnell Ärger, wenn du so oft hintereinander sendest. Damit belegst unnötig du das ISM-Band.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 11:39
Beitrag #3
RE: Wie Stromvergrauch reduzieren?
Vielen Dank für die Info und den Tipp mit der Variable so wird nur einmal der Code gesendet.

Jetzt habe ich allerdings das Problem wo ich den kompletten Samstag dran gesessen habe und keine Lösung gefunden habe. Auf dem Uno funktioniert es super wenn ich das Sketch allerdings auf den Attiny85 spiele tut sich nichts. Ich habe dann zum testen ein einfaches Beispiel genommen ohne Schleifen und so weiter.... auch dies funktioniert leider nicht. Beim Hochladen auf den Attiny85 bekomme ich auch keine Fehler. Hier mal den Code (nur zum testen)

Code:
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  
  mySwitch.enableTransmit(3);
  
}

void loop() {

  /* See Example: TypeA_WithDIPSwitches */
  mySwitch.switchOn("10101", "10000");
  delay(1000);
  mySwitch.switchOn("10101", "10000");
  delay(1000);

  delay(5000);
}

und die Schaltung ist im Anhang.    



Den Bootloader habe ich mit 8 MHz auf dem Attiny85 gebrannt.

Das Blink Sketch funktioniert ohne Probleme

Was mache ich falsch?

Viele Grüße
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 11:50
Beitrag #4
RE: Wie Stromvergrauch reduzieren?
Wie stellst du fest, das es nicht funktioniert?

Du solltest noch die Pulslänge (im Setup) mit angeben, das war bei mir auch notwendig.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 12:01 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2016 12:13 von toto1975.)
Beitrag #5
RE: Wie Stromvergrauch reduzieren?
Ich habe hier noch den Mega verkabelt der die Daten von der Fernbedienung und vom Uno (selber Sketch) einfängt und über den Serieller Monitor ausgibt.

Wie gebe ich die Pulslänge im Setup an? Auf https://github.com/sui77/rc-switch/tree/...s/SendDemo finde ich dazu leider nichts.

Habe doch was gefunden: mySwitch.setPulseLength(320) ist das korrekt?

Sorry für die vielen Fragen aber ich bin noch ziemlich am Anfang meiner Arduino Erfahrungen ;-)

SUPER
Vielen Dank es funktioniert :-)
Kannst du mir bitte noch kurz erklären warum bei dem Uno es ohne aber bei dem Attiny85 es nur mit mySwitch.setPulseLength(320) geht?

Das wäre super

Viele Grüße
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 12:53
Beitrag #6
RE: Wie Stromvergrauch reduzieren?
(06.03.2016 12:01)toto1975 schrieb:  SUPER
Vielen Dank es funktioniert :-)
Kannst du mir bitte noch kurz erklären warum bei dem Uno es ohne aber bei dem Attiny85 es nur mit mySwitch.setPulseLength(320) geht?

Das wäre super

Toll, das es jetzt funktioniert.
Eine 100%-tige Erklärung dafür habe ich leider auch nicht.
Ich habe mit dem Thema schon eine ganze Weile rumexperimentiert und auch gegoogelt, aber nix gefunden.

Ich vermute, es liegt an der Frequenz (ATtiny=8MHz, Atmega=16MHz).
Bei meinen versuchen habe ich dann immer eine Pulslänge angegeben.
Bei manchen Steckdosen, die ich schalten wollte auch beim Atmega.
Da ich nichts auf die Schnelle gefunden habe, gebe ich es jetzt immer mit an.

Aber evtl. gibt es jemanden, der dafür eine plausible Erklärung hat/kennt.
Dafür bin ich natürlich auch dankbar. Macht mich ja nich dümmer. Wink

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 17:49
Beitrag #7
RE: Wie Stromvergrauch reduzieren?
Hallo noch mal,

ich habe jetzt versucht den Attiny85 in den Sleep Moodus zu setzen, das hat auch funktioniert (laut Messgerät) nur leider bekomme ich ihn nicht wieder wach. Hier mein Code:
Code:
// the setup function runs once when you press reset or power the board

int bewegung = 2;
int bewegungsstatus = 0;
int status = 0;

#include <avr/sleep.h>
#include <avr/power.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

void setup()
{
  mySwitch.enableTransmit(3);
  mySwitch.setPulseLength(320);
  pinMode(bewegung, INPUT);
  attachInterrupt(0, interrupt, RISING);
}

void loop()
{
  bewegungsstatus = digitalRead(bewegung);
  
  if (status != bewegungsstatus)
  {

    if (bewegungsstatus == HIGH)
    {
        mySwitch.send(4433, 24);
        delay(500);
        status = bewegungsstatus;
        enterSleep();
    }

    else
    {
        mySwitch.send(4436, 24);
        delay(500);
        status = bewegungsstatus;
        enterSleep();
    }
  }
}

void interrupt() {
  //leere Interruptfunktion
}  

void enterSleep(){
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  //festlegen des Schlafmoduses
  sleep_enable();  //ermoeglichen der angegebenen Schlaffunktion
  sleep_mode();  //starten der Schlaffunktion
  //hier geht es nach dem Interrupt weiter
  sleep_disable();  //deaktivieren der Schlaffunktion
  power_all_enable();  //reaktivieren aller Chips/Funktionen
}
[/code]

Der Bewegungssensor gibt einen HIGH Pegel ab sobald er eine Bewegung feststellt. Dieser sollte doch eigentlich den Attiny85 wieder aus dem schlaf holen.

Der Data Pin des Bewegungs- Sensor liegt am Pin2 des Attinys. Hier noch mal meine Schaltung als Bild


Hat jemand noch mal einen Tipp oder eine Idee?

Viele Grüße
Torsten


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.03.2016, 18:05
Beitrag #8
RE: Wie Stromvergrauch reduzieren?
Hast du das mal mit einem Taster versucht, ich weiß, dass diese PID nie das machen was sie sollen.
Was die Interruproutine betrifft, kann ich nichts sagen, da fehlt mir die Erfahrung.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Haltestrom Schrittmotor reduzieren TimF 3 348 24.10.2016 12:33
Letzter Beitrag: Binatone

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste