Hallo zusammen,
ich hatte schon einen Beitrag hier im Forum, aber meine Anforderungen an
meine Wunschlösung haben sich, wie es so oft der Fall ist im Laufe der
Zeit doch noch weiter verändert.
Entschuldigt den Schaltplan. Mit Eagle bin ich noch relativ neu und ich
habe keine Elektroniker Ausbildung. Also auch das Zeichnen eines
Schaltplans ist nicht meine tägliche Arbeit. Ich hoffe man kann das
halbwegs verstehen.
Kurz der Hintergrund.
Ich möchte ein kleines Nachtlicht bauen, das ich für verschiedene Zwecke
verwenden kann, aber die Basis ist immer die gleiche.
- Bewegungsmelder PIR Modul mit AM312 Sensor und 3 Anschlüssen (Vin,
Out, GND)
- Mikrocontroller (hier Atmega328P)
- Helligkeitssensor / Fotowiderstand (Dunkel??? LED an?, sonst bleibt
LED aus)
- Drucktaster (Für den Farbwechsel)
- 3xAA Batterien
Zum Aufbau:
Die Batterien (3xAA -> V_Supply: 4.8V...2.7V) versorgen:
- PIR Sensor
- Mikrocontroller
- MT3608 Boost Wandler auf 8.5V
Die LEDs sind mit Vorwiderständen an den 8.5V Ausgangsspannung des
MT3608 verbunden.
Es handelt sich um High Power LEDs. Diese werden aber nur mit ca.10mA
betrieben, aber liefern damit schon deutlich mehr Licht als Standard
LEDs.
Der Fotowiderstand (im Layout noch 3 Stück, da ich mich nicht
entscheiden kann) wird mittels einem Pin des uC beim Aufwachen mit
Spannung versorgt und so über ADC die Helligkeit gemessen.
Zu meinen Messdaten:
Stromverbrauch bei 4V Eingangsspannung:
Nur der PIR / Bewegungsmelder: 0.025mA
Nur der MT3608 mit ENABLE auf LOW: 0.07mA
LED Durchlassspannung bei I = ca. 10mA:
3x Rot: 5.49 V
3x Grün: 7.00 V
3x Blau: 7.63 V
3x Weiss: 7.93 V
Anbei mal noch der Code.
Was darin bis jetzt passiert:
- PIR Sensor erkennt Bewegung und weckt den uC mittels PinInterrupt auf
- Wert des Fotowiderstand wird ausgelesen
- Entscheidung ob LED an oder aus
- Zeit Zählen bis ausschalten, wenn neue Bewegung dann wieder bei 0
anfangen mit Zählen.
- Beim Drücken des Tasters wird die Farbe gewechselt.
- Dann legt sich der uC wieder schlafen.
Was ich noch machen muss.
A) Beim Tastendruck, muss ich die Zeit bis zum Ausschalten wieder auf 0
setzten bzw. das passiert vermutlich eh, da der Sensor eine Bewegung
erkennt
B) Wenn es bei erkannter Bewegung Hell war und dann Dunkel wird, sollte
die LED sich einschalten, das habe ich bis jetzt nicht hinbekommen. Ich
bekomme es nur beim Aufwachen hin das ich es dort einmal überprüfe.
C) Bin ich mir nicht sicher ob es Sinn macht den MT3608 dauerhaft mit
Spannung zu versorgen. Könnte ich diesen nicht auch mit einem Transistor
erst mit Spannung versorgen, so wie ich es beim Fotowiderstand mache?
Wenn ja, was für ein Transistor und wo müsste dieser hin?
Und jetzt bin ich gespannt, was die Experten hier sagen.
Bin ich komplett auf dem falschen weg mit meiner Lösung oder kann man
damit arbeiten?
Ich danke euch schonmal im voraus für euren Input.
Gruss
1
/*
2
* Am Ende muss Serial kommentiert werden, um den Stromverbrauch zu senken
Du möchtest sicher keine Spannungteiler mit Faktor 2 an den MOSFet Gates
haben. Der Pulldown kann ja bei 10k bleiben, aber der Gatewiderstand ist
mit 10k viel zu hoch. Mach da 100 Ohm oder kleiner rein, dann werden die
MOSFet auch durchgesteuert.
Ändere mal den Wert der Speicherdrossel von 22µF auf 22µH. Das passt für
Spulen einfach besser :-P
Für Programme in 'Arduino' bin ich zu blöd, dazu kann ich nichts sagen.
Und ich vermisse die 100nF an jedem VCC des Atmega328, sowie einen 10k
Widerstand am Reset-Pin gegen VCC.
Was ist mit einem Quarz, oder kommt da der interne Taktgeber zum tragen
?
Michael schrieb:> C) Bin ich mir nicht sicher ob es Sinn macht den MT3608 dauerhaft mit> Spannung zu versorgen. Könnte ich diesen nicht auch mit einem Transistor> erst mit Spannung versorgen, so wie ich es beim Fotowiderstand mache?> Wenn ja, was für ein Transistor und wo müsste dieser hin?
Sein Enable hängt doch schon an AIN1/PD7. Ergo verbraucht er nur den
kleinen Iq Ruhestrom.
Wenn dir das Sorgen bereitet, könntest du es komplett mit einem
davorgeschalteten P-ch MOSFET abhängen. Und über den GPIO dann das Gate
statt den Enable steuern.
Schau mal hier, ob das in Frage kommt:
[https://github.com/RalphBacon/Arduino-Auto-Switch-Off]
> B) Wenn es bei erkannter Bewegung Hell war und dann Dunkel wird, sollte> die LED sich einschalten, das habe ich bis jetzt nicht hinbekommen. Ich> bekomme es nur beim Aufwachen hin das ich es dort einmal überprüfe.
Wenn das ganze nur als Nachtlicht arbeiten soll, könnte man den
Interrupt zum Aufwachen noch ein wenig verbessern.
z.B. nur nach einem positivem PIR-signal und entsprechendem LDR Wert.
Den LDR dann nach vorne ziehen. Je nach Signal beides mit einem
einfachen AND Gatter oder eben Komparator/OPV zum INT0/PD2 führen. Die
Variante würde zugleich das Problem B) lösen. Es sein denn in der
Software fährst du die Abfrage nicht ab (noch nicht angeschaut).
Im Tiefschlaf begibt sich der uC eh schon, nur der Reset-Pin braucht
einen definierten Pegel, Pullup. Und die Gate-Widerstände wurden schon
erwähnt.
Für den PIR glaube ich gab es auch noch ein paar Mods. Seinen internen
LDO eliminieren. Das würde sich positiv auf die Batterielaufzeit
auswirken.
Michael schrieb:> Anbei mal noch der Code.
Ist schon ziemlich frech, den Hauptteil des Codes zu verschweigen und
Header zu entfernen. Auch keine Erwähnung dass die Projektidee von
https://github.com/RalphBacon/PIR-ATMega328P-Deep-Sleep stammt. Ebenso
wurden weitere fertige Teile zusammenkopiert. Aber hier nach Hilfe, Rat
und Lösung fragen.
Ich habe den Code überarbeitet und ergänzt. Auch neu strukturiert, in
Funktionen verpackt und gesäubert. Nur sehe ich aus o.g. Gründen unter
diesen Umständen, es nicht ein ihn einfach so fertig zu präsentieren.
Sorry, zum ersten Mal muss ich Nein sagen.
Ich möchte mich schonmal bedanken für eure Hinweise.
Das ich den Code aus verschiedenen Stellen zusammengesucht und angepasst
habe ist richtig. Ich wollte nicht verheimlichen, dass ich den Deep
Sleep Teil von Ralph Bacon habe. Ich hatte versucht mir das in der
Arduino IDE etwas übersichtlicher zu gestalten. Ich gebe es gerne zu.
Der Code stammt zum grössten Teil von dort. Auch richtig. Ich hätte die
Quelle angeben sollen bzw. in meinem langen Text oben darauf hinweisen
sollen. Ich bitte hiermit um Entschuldigung.
Ich habe mir das Video von Ralph Bacon, welches hier verlinkt wurde mit
dem N- und P- Mosfet angeschaut und versucht das in meinen Schaltplan zu
integrieren, aber ob das nun so funktioniert weiss ich natürlich nicht.
Die Dunkelschaltung habe ich von hier:
https://elektro.turanis.de/html/prj131/index.html
Vom Prinzip hoffe ich jetzt, dass folgendes passiert.
- Nur der PIR Sensor zieht dauerhaft Strom.
- Wenn das Signal des PIR auf High schaltet, wird das AND-GATE und der
Komparator dadurch mit Spannung versorgt.
Ist es dunkel genug, sollten jetzt der MT3608 und der Atmega mit
Spannung versorgt werden.
Um die Spannung aufrecht zu erhalten wird Pin PD2 am Atmega auf HIGH
gesetzt und hält die Spannung somit aufrecht.
Könnte das so funktionieren oder habe ich da jetzt einen Fehler
eingebaut?
Und nochmals Entschuldigung. Quellen werde ich in Zukunft angeben.
Michael schrieb:> Könnte das so funktionieren oder habe ich da jetzt einen Fehler> eingebaut?
Nur auf die Schnelle:
Dein Q2 wird niemals sperren, da fehlt der Pullupwiderstand zwischen
Gate und Source.
Dein UND Gatter wird niemals einen Highpegel sehen, da fehlt der Pullup
vom LM393 Komparator.
Fuer die 4 MOSFETS auf der rechten Seite ist der Gatewiderstand mit 10K
viel zu gross.
Helmut L. schrieb:> Dein Q2 wird niemals sperren, da fehlt der Pullupwiderstand zwischen> Gate und Source.
Danke. Habe ich übersehen. War ja in dem Video von Ralph Bacon, welches
"mister A." verlinkt hatte so eingezeichnet.
Helmut L. schrieb:> Dein UND Gatter wird niemals einen Highpegel sehen, da fehlt der Pullup> vom LM393 Komparator.
Danke. Habe ich mit 4k7 eingebaut.
Helmut L. schrieb:> Fuer die 4 MOSFETS auf der rechten Seite ist der Gatewiderstand mit 10K> viel zu gross.
Danke. Das wurde in einem vorherigen Post auch schon angesprochen. Ich
habe es jetzt mit 100 Ohm Widerständen ersetzt.
Irgendwie scheint alles unnötig zu kompliziert zu sein.
Normalerweise sind PIR-Nachtlichter ziemlich einfache Konstruktionen.
Auf dem Foto ist das PCB von diesem PIR-Nachtlicht:
https://s7g10.scene7.com/is/image/aldi/202009160147
Georg M. schrieb:> Irgendwie scheint alles unnötig zu kompliziert zu sein.> Normalerweise sind PIR-Nachtlichter ziemlich einfache Konstruktionen.>> Auf dem Foto ist das PCB von diesem PIR-Nachtlicht:> https://s7g10.scene7.com/is/image/aldi/202009160147
Da hast du wahrscheinlich recht.
Leider komme ich auf keine andere Lösung.
Ich denke hier wäre genau die Schaltung darin die ich benötige
https://de.aliexpress.com/item/32789207449.html
Das leuchtet scheinbar 2 Minuten nach und man kann auch die Farbe
wechseln.
Vielleicht bestelle ich mal so eins ;-)
Der Reset ist nun falsch umgesetzt.
Ein /RST als low-active sollte so sein:
Vcc -> 10k -> RST
RST <- Taster <- GND
OT: spinnt die Forumsoftware wieder oder ist nur bei mir die Darstellung
(fehlender Zeilenumbruch) kaputt?
Zum Problem B solltest du den code umschreiben.
Du hast nur eine einmalige (Ab)Schaltung als Verzögerung drinnen. Einen
einfachen Countdown ohne retrigger.
Damit wurden die Bedingungen nicht weiter geprüft und das Licht ging
aus.