Hi, ich bin relativ neu in der Mikrocontroller Welt, kenne mich aber etwas mir raspberrys aus, C++, Python und Bash kann ich auch, also sollte eine neue Programiersprache nicht allzu schwierig sein. Idee ist folgende. Möchte einem Freund zum Geburstag eine Lampe bauen, die wenn er sie anmacht, entweder eine zufällige Sounddatei abspielt, oder je nach Tageszeit (in etwa "Guten Morgen/Abend Master") Natürlich wäre es einfacher da ein Arduino Chip dranzuhängen, aber mein Budget für die Elektronik ist begrentzt, daher dachte ich an einen Mikrokontroller. Ist das machbar? wenn ja was bräuchte ich dazu?
:
Verschoben durch User
Das klingt doch ganz nach den Grußkarten, die man mit selbst aufgezeichneten Grüßen versehen kann, die dann abgespielt werden, wenn man die Karte öffnet. Sowas könnte man bestimmt umbauen oder vielleicht auch als Bausatz kaufen.
> Möchte einem Freund zum Geburstag eine Lampe bauen, > die wenn er sie anmacht, entweder eine zufällige Sounddatei abspielt, > oder je nach Tageszeit (in etwa "Guten Morgen/Abend Master") Warum so freundlich? Menschen brauchen morgens einen kräftigen Tritt in den Hintern. Sonst kommen sie einfach nicht aus den Federn. Also: "Steh endlich auf, du fauler Sack!" ;-)
Budget sollte doch bei China-Arduinos wirklich keine Hürde sein. Teilweise gibts da ein solches Board billiger als einen einzelnen Controller den man in Deutschland bestellt. Also nimm ein solches Board und gleich ein passendes Shield für SD und MP3 dazu. Kostet unter 10€ und es gibt genug Beispiele im Netz um zu einem Programm zu kommen.
michox schrieb: > Natürlich wäre es einfacher da ein Arduino Chip dranzuhängen, aber mein > Budget für die Elektronik ist begrentzt, daher dachte ich an einen > Mikrokontroller. > > Ist das machbar? > > wenn ja was bräuchte ich dazu? Ein Arduino ist ein Mikrocontroller, nur mit ein bisschen drumrum. Nimm doch sowas: https://eckstein-shop.de/Eckstein-Pro-micro-5V-16MHz-Arduino-mini-Leonardo-compatible-board?curr=EUR&gclid=EAIaIQobChMIxZjHjYat2QIVExIbCh1mRwn7EAQYASABEgJDh_D_BwE Ziemlich klein, Arduino kompatibel, über USB programmierbar. Für Musikausgabe gibt es sicher zig Module, hab zB gleich dieses gefunden: WTV020 http://www.mikrocontroller-elektronik.de/wtv020-sound-oder-sprache-ausgeben/ Das wird nicht so wahnsinnig laut sein, solche Module gibts aber bestimmt mit Verstärker. Oder Du suchst Dir noch ein Verstärkermodul extra.
Chris R. schrieb: > Hi, > > vielleicht ist das hier als Basis brauchbar: > > http://elm-chan.org/works/sd20p/report.html Das ist perfekt! Hat jemand noch eine Idee wie ich die Zeitsteuerung hinbekomme?
RTC Modul https://eckstein-shop.de/Adafruit-PCF8523-Real-Time-Clock-Assembled-Breakout-Board-RTC-Module?curr=EUR&gclid=EAIaIQobChMI5unZ8Iet2QIVTzwbCh1djwA1EAQYAiABEgJP-fD_BwE Denen kann man tlw auch die Aufgabe geben einen uC aufzuwecken zu bestimmter Zeit. Weiß nicht ob das verlinkte das kann, aber die gibts zu hauf.
Conny G. schrieb: > RTC Modul > https://eckstein-shop.de/Adafruit-PCF8523-Real-Tim... > > Denen kann man tlw auch die Aufgabe geben einen uC aufzuwecken zu > bestimmter Zeit. > Weiß nicht ob das verlinkte das kann, aber die gibts zu hauf. The PCF8523 is simple and inexpensive but not a high precision device. It may lose or gain up to 2 seconds a day. Also DAS bekommt man nun wahrlich auch rein in Software hin mit einem 32,768kHz Quarz. Budget ist ja begrenzt.
Schau mal im ws2812 Word clock Projekt hier auf der Seite nach. Die neue Version der Uhr verwendet ein China Modul für das abspielen von mp3 Dateien. Den esp8266 kann man als uC verwenden und gleichzeitig übers WLAN sich die Uhrzeit aus dem Internet holen.
An das Modul hier kann man einen LDR zum Triggern anbauen, dann bist Du schon direkt fertig ohne weitere Elektronik https://www.aliexpress.com/item/Button-Control-Programmable-MP3-Music-Voice-Player-Module-w-8M-Memory-Speaker-for-DIY-Musical-Gift/32804836029.html Etwas teuerer, aber komplett fertig (entsprechende Version (Color) kaufen) https://www.aliexpress.com/item/DIY-Music-Module-USB-Download-Card-Machine-Light-Induction-Key-MP3-Cassette-Gift-Box-Card/32847444704.html
:
Bearbeitet durch User
Das ist sicher eine nette Bastelei, aber mir würde diese Lampe schnell auf die Nerven gehen.
Schau mal nach DFPlayer mini. Die sind sehr einfach anzusteuern (Per UART) und man kann damit MP3 Dateien von SD-Karte abspielen. Kosten auch nur 3 Euro oder so und haben einen Audio-Verstärker eingebaut. Kann man einfach an einen Lautsprecher anschließen.
Stefan U. schrieb: > Das ist sicher eine nette Bastelei, aber mir würde diese Lampe > schnell > auf die Nerven gehen. Deswegen plane ich einen Schalter einzubauen, mit dem die Stromversorgung zum uC unterbrochen und die Funktion deaktiviert werden kann. Chris K. schrieb: > Schau mal im ws2812 Word clock Projekt hier auf der Seite nach. > Die neue > Version der Uhr verwendet ein China Modul für das abspielen von mp3 > Dateien. Den esp8266 kann man als uC verwenden und gleichzeitig übers > WLAN sich die Uhrzeit aus dem Internet holen. Im prinzip ist die genaue Zeit ja egal. Ich möchte nur zwischen morgen, Tag und Abend unterscheiden. Wie krieg ich sowas hin? und habt ihr Tipps wo man Bauteile relativ günstig und schnell bekommt? Konrad ist halt wucher, aber aus China wird schwierig, weil das ganze in 3 Wochen fertig sein sollte
also dass ich das richtig verstanden hab. kann ich mit dem ESP8266 mittels z.B. Atmel-Studio ein C++-Script schreiben, dass aus dem Internet die Uhrzeit ausliest und je nach tageszeit dann eine 1 2 3 an den DFPlayer oder http://elm-chan.org/works/sd20p/report.html dem Teil sendet, sodass der die entsprechende sounddatei ausgibt?
Mit diesen 3 Funktionen kannst du das Modul ansprechen. Du musst natürlich die Funktion UARTSendArray(data,10); selber implementieren (je nach Platform)
1 | void playSound(uint16_t sound) |
2 | { |
3 | char data[10]; |
4 | uint16_t checksum; |
5 | |
6 | data[0] = 0X7E; |
7 | data[1] = 0xFF; |
8 | data[2] = 0x06; |
9 | data[3] = 0X12;//0X03 is wrong command! |
10 | data[4] = 0X00; |
11 | data[5] = sound >> 8; // High Byte |
12 | data[6] = sound & 0x00FF; // Low Byte |
13 | checksum = 0 - (data[6] + data[5] + data[4] + data[3] + data[2] + data[1]); |
14 | data[7] = checksum >> 8; // High Byte |
15 | data[8] = checksum & 0x00FF; // Low Byte |
16 | data[9] = 0XEF; |
17 | UARTSendArray(data,10); |
18 | } |
19 | |
20 | void SetVolume(uint8_t volume) |
21 | { |
22 | char data[10]; |
23 | uint16_t checksum; |
24 | |
25 | if (volume > 30) |
26 | { |
27 | volume = 30; |
28 | } |
29 | data[0] = 0X7E; |
30 | data[1] = 0xFF; |
31 | data[2] = 0x06; |
32 | data[3] = 0X06; |
33 | data[4] = 0X00; |
34 | data[5] = 0x00; |
35 | data[6] = volume & 0x00FF; // Low Byte |
36 | checksum = 0 - (data[6] + data[5] + data[4] + data[3] + data[2] + data[1]); |
37 | data[7] = checksum >> 8; // High Byte |
38 | data[8] = checksum & 0x00FF; // Low Byte |
39 | data[9] = 0XEF; |
40 | UARTSendArray(data,10); |
41 | } |
42 | |
43 | void ResetModule() |
44 | { |
45 | char data[10]; |
46 | uint16_t checksum; |
47 | |
48 | data[0] = 0X7E; |
49 | data[1] = 0xFF; |
50 | data[2] = 0x06; |
51 | data[3] = 0X0C; |
52 | data[4] = 0X00; |
53 | data[5] = 0X00; |
54 | data[6] = 0X00; |
55 | checksum = 0 - (data[6] + data[5] + data[4] + data[3] + data[2] + data[1]); |
56 | data[7] = checksum >> 8; // High Byte |
57 | data[8] = checksum & 0x00FF; // Low Byte |
58 | data[9] = 0XEF; |
59 | UARTSendArray(data,10); |
60 | } |
Stefan U. schrieb: > Das ist sicher eine nette Bastelei, aber mir würde diese Lampe schnell > auf die Nerven gehen. Es ist ein Geschenk, also interessiert den TO das nicht :-)
michox schrieb: > also dass ich das richtig verstanden hab. kann ich mit dem ESP8266 > mittels z.B. Atmel-Studio ein C++-Script schreiben, dass aus dem > Internet die Uhrzeit ausliest und je nach tageszeit dann eine 1 2 3 an > den DFPlayer oder http://elm-chan.org/works/sd20p/report.html dem Teil > sendet, sodass der die entsprechende sounddatei ausgibt? Das ESP programmierst Du nicht mit dem Atmel Studio. Entweder mit der Arduino IDE (Anleitungen im Web) oder mit einer Tool Chain separat (Anleitungen im Web). Vermute Arduino IDE ist einfacher. Und dann ist das ESP gleich Dein Controller, der sich die Zeit holt und per USART das DFPlayer-Modul ansteuert.
michox schrieb: > weil das ganze in > 3 Wochen fertig sein sollte michox schrieb: > Ist das machbar? nein, dazu ist die Zeit zu kurz (für Dich)
Walter schrieb: > nein, dazu ist die Zeit zu kurz (für Dich) ich glaub meine Programmierfähigkeiten kann ich am besten einschätzen. ich bestell dann jetzt diese Platine https://www.ebay.de/itm/NodeMCU-V3-Arduino-ESP8266-ESP-12-E-Lua-CH340-WiFI-WLan-IoT-Lolin-Mini-Micro/252718027546?hash=item3ad72b131a:g:nRoAAOSwYwJaD2tX hat jemand noch eine Netzteilempfehlung für mich?
michox schrieb: > Walter schrieb: >> nein, dazu ist die Zeit zu kurz (für Dich) > ich glaub meine Programmierfähigkeiten kann ich am besten einschätzen. > > ich bestell dann jetzt diese Platine > Ebay-Artikel Nr. 252718027546 > > hat jemand noch eine Netzteilempfehlung für mich? bzw kann ich als Netzteil einfach ein Handy Ladegerät nehmen?
michox schrieb: > michox schrieb: >> Walter schrieb: >>> nein, dazu ist die Zeit zu kurz (für Dich) >> ich glaub meine Programmierfähigkeiten kann ich am besten einschätzen. >> >> ich bestell dann jetzt diese Platine >> Ebay-Artikel Nr. 252718027546 >> >> hat jemand noch eine Netzteilempfehlung für mich? > > bzw kann ich als Netzteil einfach ein Handy Ladegerät nehmen? Das Board hat einen Micro-USB Anschluss, für das würde ein USB Ladegerät und ein Micro-USB-Kabel reichen. Die Frage ist, welche Spannung u welchen Strom das Player-Board braucht. Idealerweise könntest Du den Player an das ESP-Board hängen, dann muss der Spannungsregler ESP + Player aushalten, wenn 3.3V, oder es müsste einen 5V Ausgang vom USB haben.
Das DFPlayer Board läuft wohl von 3.2 bis 5V https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299 Man könnte ihn also an die Spannungsregelung des NodeMCU hängen, von der Spannung her. Es braucht 20mA Standby-Current (ohne Wiedergabe ist wohl gemeint) http://www.picaxe.com/docs/spe033.pdf Mit Lautsprecher sollte man aber eher mindestens 100mA rechnen...? Hier https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF kann man nachsehen, dass ein On Semiconductors NCP1117 Spannungsregler auf dem NodeMCU Board sein sollte, Datenblatt: https://www.onsemi.com/pub/Collateral/NCP1117-D.PDF Der kann grundsätzlich 1A und mehr, aber man muss nochmal die Erwärmung nachrechnen. Das NodeMCU braucht bis 170mA (laut http://www.mikrocontroller-elektronik.de/nodemcu-esp8266-tutorial-wlan-board-arduino-ide/) Das Dann wandelt der Regler 5V-3.3V = 1.7V in Wärme um. Das bei sagen wir mal bis zu 300mA, dann haben wir eine Verlustleistung von 0,5 Watt. Auf dem NodeMCU ist der SOT-223 verbaut, der hat 160 K/W Erwärmung, das ergibt bei 0,5 Watt 80 Watt Erwärmung. Bei einer maximal Umgebungstemperatur in einem Gehäuse von 50 Grad sind wir bei 50+80 = 130 Grad Chip-Temperatur. Das wäre schon noch akzeptabel, aber Obergrenze. Heisst, man sollte den lieber nicht mit 300mA belasten. Wobei das ja nicht Dauerbetrieb ist: - der Ton wird ja nur ein paar Sekunden abgespielt. - das Wifi sendet nicht ständig, nur dann werden die 170mA benötigt Wäre also ok! Ah, ansonsten gäbe es aber auch die 5V vom USB an PIN 15 des Board, siehe Seite "IO CONN". https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF VDD5 finden wir nach einer Verpolschutzdiode an VDDUSB auf der Seite POWER. Damit gäbe es dann gar kein Problem mit dem Strom. Allerdings läuft das Playermodul dann mit 5V und der UART kommt mit 3.3V vom ESP. Der Player müsste mit dem 3.3V Pegel zurechtkommt, könnte aber auch schief gehen. Den Eingang am ESP vom UART des Player muss man aber über einen Spannungsteiler laufen lassen, damit der ESP keine 5V sieht.
Conny G. schrieb: > Den Eingang am ESP vom UART des Player muss man aber über einen > Spannungsteiler laufen lassen, damit der ESP keine 5V sieht. wow hammer Rechnung vielen Dank! aber ich dachte dass der ESP dem Player Informationen schickt, nicht andersrum?
michox schrieb: > Conny G. schrieb: >> Den Eingang am ESP vom UART des Player muss man aber über einen >> Spannungsteiler laufen lassen, damit der ESP keine 5V sieht. > > wow hammer Rechnung vielen Dank! > > aber ich dachte dass der ESP dem Player Informationen schickt, nicht > andersrum? Wenn das so wäre und der Rückkanal nicht gebraucht wird müsste man gar nichts tun. Aber ein Spannungsteiler für Player > ESP ist auch trivial.
Im Prinzip musst du nur dem Player Informationen schicken. Eine Rückleitung ist nicht notwendig.
helfer schrieb: > Im Prinzip musst du nur dem Player Informationen schicken. Eine > Rückleitung ist nicht notwendig. Dann kann der an die 5V und der Strom kommt direkt vom USB, wunderbar.
Also ich hab mal einen Schaltplan eingebaut. Ich möchte noch eine WPS Taste einbauen, da ich ja das Wlan von meinem Freund nicht kenne. Da hätte ich mich einfach hier https://www.arduinoclub.de/2016/04/30/arduino-ide-esp8266-wps-push-button/ dran gehalten. Passt der Schaltplan so? und hat jemand eine Idee wie ich da noch einen Potentiometer dranhängen kann, um die Lautsärke anpassbar zu machen? könnte man da direkt einen analogen vor den Lautsprecher schalten oder sollte man einen Digitalen nehmen und den mit dem Board anpassen?
michox schrieb: > Also ich hab mal einen Schaltplan eingebaut. Ich möchte noch eine > WPS > Taste einbauen, da ich ja das Wlan von meinem Freund nicht kenne. Da > hätte ich mich einfach hier > https://www.arduinoclub.de/2016/04/30/arduino-ide-... > dran gehalten. Passt der Schaltplan so? > und hat jemand eine Idee wie ich da noch einen Potentiometer dranhängen > kann, um die Lautsärke anpassbar zu machen? könnte man da direkt einen > analogen vor den Lautsprecher schalten oder sollte man einen Digitalen > nehmen und den mit dem Board anpassen? Die Lautstärke des DFPlayer mini lässt sich digital per kommando einstellen.
> Also ich hab mal einen Schaltplan eingebaut.
Das ist ein Schaltplan? Macht man das heute so?
Ich glaube langsam echt, dass ich zu alt für euch bin.
Nichts destro trotz hast du Dir mit dem Plan sicher Mühe gegeben und er
ist in der Tat deutlich aussagekräftiger als die langen Texte die manch
anderer hier schreibt weil er nicht zeichnen möchte.
helfer schrieb: > Die Lautstärke des DFPlayer mini lässt sich digital per kommando > einstellen. Das weiß ich. Soll aber Hardwaretechnisch möglich sein, da später kein Zugriff mehr darauf sein wird
> hat jemand eine Idee wie ich da noch einen Potentiometer dranhängen > kann, um die Lautsärke anpassbar zu machen? Dazu nimmst du ein logarithmisches Poti, 10k Ohm sind sicher ok. Anschluss 1 (der am linken Anschlag) kommt an GND. Anschluss 2 geht zum Eingang des Verstärkers. Anschluss 3 gehört an den Ausgang des MP3 Players. Solche Potis gibt es auch in doppelter Ausführung, für Stereo. Aber du hattest gar nicht vor, einen separaten Verstärker zu verwenden. Dann musst du wohl die digitale Lautstärke-Einstellung benutzen.
michox schrieb: > helfer schrieb: >> Die Lautstärke des DFPlayer mini lässt sich digital per kommando >> einstellen. > > Das weiß ich. Soll aber Hardwaretechnisch möglich sein, da später kein > Zugriff mehr darauf sein wird +/- Taster, die der ESP abfragt und dann die Lautstärke hoch und runter runter stellt, per Variable, die den aktuellen Status speichert und seriellem Kommando an den Player bei jedem Tastendruck.
Stefan U. schrieb: >> Also ich hab mal einen Schaltplan eingebaut. > > Das ist ein Schaltplan? Macht man das heute so? > Ich glaube langsam echt, dass ich zu alt für euch bin. > > Nichts destro trotz hast du Dir mit dem Plan sicher Mühe gegeben und er > ist in der Tat deutlich aussagekräftiger als die langen Texte die manch > anderer hier schreibt weil er nicht zeichnen möchte. Ja, es gibt so Zeug wie Fritzing, das einen eine Kombi aus Schaltplan und Layout auf dem Breadboard machen lässt.
michox schrieb: > Passt der Schaltplan so? Habe jetzt nicht jede Verbindung angeschaut. Auf jeden Fall sind die Versorgungsrails vertauscht. Normalerweise nimmt man Blau = Masse und Rot = V+.
Stefan U. schrieb: > Aber du hattest gar nicht vor, einen separaten Verstärker zu verwenden. > Dann musst du wohl die digitale Lautstärke-Einstellung benutzen. meine Idee wäre, über den NodeMCU den Widerstand des Potis zu lesen, und wenn sich der Wert ändert entsprechend ein Signal an den IO1/2 des DFPlayers zu senden. Brauch ich da auch ein Logarithmisches Poti?
michox schrieb: > Stefan U. schrieb: >> Aber du hattest gar nicht vor, einen separaten Verstärker zu verwenden. >> Dann musst du wohl die digitale Lautstärke-Einstellung benutzen. > > meine Idee wäre, über den NodeMCU den Widerstand des Potis zu lesen, und > wenn sich der Wert ändert entsprechend ein Signal an den IO1/2 des > DFPlayers zu senden. Brauch ich da auch ein Logarithmisches Poti? mit Poti sähe das ganze dann so aus
> Brauch ich da auch ein Logarithmisches Poti?
Nö, dann ist ein lineares Poti vermutlich sogar besser. Ich würde einen
Drehgeber verwenden, ist irgendwie moderner. Sogar unsere neue
Waschmaschine hat einen. Die nächste hat sicher einen Touch Screen,
uiiii.
1 | poti_volume = analogRead(Poti) * 30 / 1024; |
2 | if (Serial.println(myDFPlayer.readVolume()) != poti_volume){ |
3 | myDFPlayer.volume(poti_volume); |
das ist jetzt mal mein Code für den DFPlayer jetzt wäre nur noch die Frage wie ich auslese, ob die Lampe an ist. Hab mir überlegt einen Lichtsensor zu besorgen. Alternative wäre, Die LED Streifen die ich einbauen will laufen auf 12V. Kann man das auf 3.3V runtersetzen und dann ein Trigger Signal draus machen, der das NodeMCU aufweckt? Wenn ja welche Widerstände brauch ich dafür?
Hab kurz gegoogelt, NodeMCU mit Esp8266 kann nicht mit GPIO aufgeweckt werden, nur mit Reset oder Timer. Jetzt gäbe es verschiedene Möglichkeiten: - den NodeMCU an die 12V der Lampe hängen, Step-Down-Modul 12V nach 5V und die 5V verwenden - eine Schaltung machen, die beim Einschalten der 12V einen Reset aufs NodeMCU gibt - mit den 12V die 5V des USB Netzteils ein/ausschalten. Das ist jetzt aber tricky, denn Du wolltest das bestimmt direkt ans Modul stecken. Also entweder das NodeMCU modifizieren und eine Schaltung zum Schalten irgendwo dazwischenklemmen (das ist aber tricky und unschön, wenn es überhaupt gescheit geht) oder eine Platine machen oder finden, die USB ein/Ausgang hat (nur Strom) und die Schaltfunktion realisiert (hab ich noch nie fertig gesehen) Also mein Favorit ist: Modul an den 12v betreiben.
Conny G. schrieb: > Also mein Favorit ist: Modul an den 12v betreiben. Das ist in der Tat eine gute Idee, dann spar ich mir auch das Netzteil. In dem Fall sollte ich dann wahrscheinlich alles in die Setup Funktion schreiben oder? Kann die loop Funktion leer bleiben? Allerdings wirft sich mir da die Frage auf, wie schnell die Verbindung dann zum WLan aufgebaut werden kann, um die aktuelle Zeit abzulesen? Wäre unschön, wenn die Lampe angeht und 5 Sekunden später kommt erst die Begrüßung...
michox schrieb: > Allerdings wirft sich mir da die Frage auf, wie schnell die Verbindung > dann zum WLan aufgebaut werden kann, um die aktuelle Zeit abzulesen? Mit 2-5 Sekunden musst Du schon rechnen.
Conny G. schrieb: > NodeMCU mit Esp8266 kann nicht mit GPIO aufgeweckt wozu ist dann hier der Wake Eingang beim D0 ? http://www.mikrocontroller-elektronik.de/wp-content/uploads/2017/01/NodeMCU-pinbelegung.png könnte man dann alternativ die Phase der Lampe runtersetzen, auf einen Eingang des Moduls und Prüfen ob sich seit dem letzen mal was geändert hat?
michox schrieb: > Conny G. schrieb: >> NodeMCU mit Esp8266 kann nicht mit GPIO aufgeweckt > > wozu ist dann hier der Wake Eingang beim D0 ? > http://www.mikrocontroller-elektronik.de/wp-content/uploads/2017/01/NodeMCU-pinbelegung.png Ich hab nur 2min recherchiert, es muss nicht 100%ig richtig sein. Aber von dem was ich gelesen habe, habe ich mitgenommen: Für Wake-Up mit Timer verbindet man GPIO16 mit RESET, dann kann die Realtime-Clock den ESP nach Zeit X aufwecken.
ok Ja das hab ich auch gefunden. Hier nochmal zusammengefasst was ich jetzt brauche. Das Modul soll sobald das Licht eingeschaltet wird aus dem deepsleep aufwachen, und wenn es aus gemacht wieder in den Deepsleep gehen. dazu hätte ich mir überlegt einen elektronischen zwei wege Schalter zu nehmen, der in der Ausgangsposition 3,3V an einen Eingang legt, und sobald die 12V der Lampe anliegen, den Reset mit dem Ground verbindet, um das Modul wieder aufzuwecken. Hat jemand eine Idee mit welchen Bauteilen sich das realisieren lässt? Bzw lohnt es sich hier in den deepsleep zu gehen oder kann man das modul auch einfach dauerhaft laufen lassen? Übrigens Vielen Dank für die Hilfe bisher, schon viel gelernt und eigentlich sind wir ja fast fertig :)
michox schrieb: > Bzw lohnt es sich hier in den deepsleep zu gehen oder kann man das modul > auch einfach dauerhaft laufen lassen? Es würde sich lohnen, weil das Modul die meiste Zeit eigentlich nichts tut. Aber zum Einen hast Du die "Gefahr", dass die Wifi-Initialisierung zu lange dauert - gerade bei mässig guter Verbindung kann das lange sein. Und zum anderen wird da jetzt technisch komplizierter. Demgegenüber (immer an) hast Du einen dauerhaften Stromverbrauch von 5V / max 100mA = 0,5W - mal Netzteil-Ineffenizienzen nicht gerechnet. Auf 365x24 Stunden sind 4 kWh / Jahr, oder 4 x 30 Cent = 1,20 Euro pro Jahr. Also ich würde es für Version 1 einfach dauerhaft an lassen.
Dieser Wakeup Kram scheint ein Workaround zu sein. Der Timer wecken den µC auf, aber direkt danach hängt er sich auf. Deswegen wird zusätzlich der Timer-Ausgang (GPIO16) mit dem Reset Eingang verbunden. Mit dem DeepSleep würde ich mich nur bei Batteriebetrieb beschäftigen. Du kannst die WLAN Funktion auch ohne Deep Sleep abschalten um (weniger) Strom zu sparen.
Stefan U. schrieb: > Dieser Wakeup Kram scheint ein Workaround zu sein. > > Der Timer wecken den µC auf, aber direkt danach hängt er sich auf. > Deswegen wird zusätzlich der Timer-Ausgang (GPIO16) mit dem Reset > Eingang verbunden. > > Mit dem DeepSleep würde ich mich nur bei Batteriebetrieb beschäftigen. > Du kannst die WLAN Funktion auch ohne Deep Sleep abschalten um (weniger) > Strom zu sparen. eigentlich reicht es mir sogar, nur beim Setup eine Internetverbindung herzustellen, dort die Zeit auszulesen, und dann kann ich mithilfe von millis die Tageszeit berechnen... jetzt trotzdem noch die frage, wie ich dem Modul mitteile dass die Lampe brennt...
Wenn du magst kannst du von folgenden Code abgucken. Da frage ich die Zeit per HTTP Protokoll ab und zeige sie auf einem Display an:
1 | #include <ESP8266WiFi.h> |
2 | #include "oled.h" |
3 | |
4 | #define SSID "Muschikatze"
|
5 | #define PASSWORD "Geheim"
|
6 | #define SERVER "ptb.de"
|
7 | |
8 | OLED display=OLED(4,5,16); |
9 | |
10 | WiFiClient client; |
11 | char buffer[200]; |
12 | |
13 | void setup() |
14 | {
|
15 | display.init(); |
16 | display.set_contrast(16); |
17 | display.draw_string_P(0,0,PSTR("Connecting to the AP")); |
18 | display.display(); |
19 | |
20 | // Configure WIFI
|
21 | WiFi.mode(WIFI_STA); |
22 | WiFi.begin(SSID, PASSWORD); |
23 | |
24 | // Wait for connection to the AP
|
25 | while (WiFi.status() != WL_CONNECTED) |
26 | {
|
27 | delay(1); |
28 | }
|
29 | |
30 | // Show the own IP address
|
31 | display.draw_string(0,8,"IP="); |
32 | display.draw_string(18,8,WiFi.localIP().toString().c_str()); |
33 | display.display(); |
34 | }
|
35 | |
36 | |
37 | void loop() |
38 | {
|
39 | delay(1000); |
40 | display.scroll_up(8,20); |
41 | display.draw_string_P(0,24,PSTR("Connecting to")); |
42 | display.display(); |
43 | display.scroll_up(8,20); |
44 | display.draw_string(12,24,SERVER); |
45 | display.display(); |
46 | |
47 | // Connect to the server
|
48 | if (client.connect(SERVER, 80)) |
49 | {
|
50 | display.scroll_up(8,20); |
51 | display.draw_string_P(0,24,PSTR("Connected")); |
52 | display.display(); |
53 | |
54 | // Sent HTTP request
|
55 | client.print(F("GET / HTTP/1.1\r\nHost: ")); |
56 | client.print(SERVER); |
57 | client.print(F("\r\nConnection: close\r\n\r\n")); |
58 | |
59 | // receive the HTTP response
|
60 | bool foundDate=false; |
61 | while (client.connected()) |
62 | {
|
63 | buffer[0]=0; |
64 | append_until(client,buffer,sizeof(buffer),'\n'); |
65 | |
66 | // Find the Date header and display its value
|
67 | if (strstr(buffer, "Date: ")) |
68 | {
|
69 | foundDate=true; |
70 | |
71 | // Skip the header name (Date:)
|
72 | char* date=buffer+6; |
73 | |
74 | // Split the string into date and time parts at the 4th space
|
75 | char* time=date; |
76 | int count=0; |
77 | while (*time) |
78 | {
|
79 | if (*time==' ') |
80 | {
|
81 | count++; |
82 | if (count==4) |
83 | {
|
84 | *time=0; |
85 | time++; |
86 | break; |
87 | }
|
88 | }
|
89 | time++; |
90 | }
|
91 | |
92 | // Display date and time
|
93 | display.scroll_up(8,20); |
94 | display.draw_string(0,24,date); |
95 | display.scroll_up(8,20); |
96 | display.draw_string(0,24,time); |
97 | display.display(); |
98 | break; |
99 | }
|
100 | }
|
101 | |
102 | if (!foundDate) |
103 | {
|
104 | display.scroll_up(8,20); |
105 | display.draw_string_P(0,24,PSTR("No date received")); |
106 | display.display(); |
107 | }
|
108 | }
|
109 | else
|
110 | {
|
111 | display.scroll_up(8,20); |
112 | display.draw_string_P(0,24,PSTR("Failed")); |
113 | display.display(); |
114 | }
|
115 | |
116 | // Disconnect
|
117 | client.stop(); |
118 | }
|
119 | |
120 | |
121 | /**
|
122 | * Hänge Zeichen von einem Stream an einen Puffer an, bis das terminierende Zeichen
|
123 | * erreicht wurde. Wenn der Puffer überläuft, lies trotzdem weiter aber verwerfe
|
124 | * die überschüssigen Zeichen.
|
125 | *
|
126 | * @param source Der Quell-Stream.
|
127 | * @param buffer Der Ziel-Puffer, muss mit '\0' zerminiert sein.
|
128 | * @param bufSize Größe des Ziel-Puffers
|
129 | * @param terminator Das letzte Zeichen, das gelesen werden soll, zum Beispiel '\n'.
|
130 | * @return True wennn das terminierende Zeichen erreicht wurde.
|
131 | */
|
132 | bool append_until(Stream& source, char* buffer, int bufSize, char terminator) |
133 | {
|
134 | int data=source.read(); |
135 | if (data>=0) |
136 | {
|
137 | int len=strlen(buffer); |
138 | do
|
139 | {
|
140 | if (len<bufSize-1) |
141 | {
|
142 | buffer[len++]=data; |
143 | }
|
144 | if (data==terminator) |
145 | {
|
146 | buffer[len]=0; |
147 | return true; |
148 | }
|
149 | data=source.read(); |
150 | }
|
151 | while (data>=0); |
152 | buffer[len]=0; |
153 | }
|
154 | return false; |
155 | }
|
Alles klar das Programm steht jetzt glaub ich. Die Info der Lämpe hätte ich jetzt über einen Spannungsteiler realisiert. Vielleicht kann sich jemand nochmal meine Skizze anschauen, und die Widerstände nachrechnen, das wäre sehr hilfreich.
hab gelesen, dass falls der 3,3kOhm durchbrennt, dann der Mikrokontroller durchbrennt und dann zu viel spannung auf dem eingang sein kann. Ist aber auch egal, Ich hab das Konzept nochmal etwas umgebaut, da mir das Projekt richtig Spaß macht. Plan jetzt, ist die Lampe über einen kapazitiven Sensor (Alufolie) an und auszuschalten. Über einen Transistor (MOSFET NPN N-Kanal) will ich dann den Strom zu den LEDs durchschalten, und wenn man den Transistor schon dran hat, lässt sich über Pulsweitenmodellierung noch die Helligkeit einstellen. Mir ist nur leider noch nicht so klar, wie ich den maximalen Strom meiner LEDs berechne, um die Transistorschaltung richtig auszulegen. Im Anhang mein Schaltplan nach meiner Recherche. Bin mir vor allem nicht sicher ob ich den MOSFET richtig angeschlossen hab. Hab für eine ähnliche Anwendung diesen gefunden https://www.conrad.de/de/mosfet-infineon-technologies-irf540npbf-1-n-kanal-130-w-to-220-162412.html
>falls der 3,3kOhm durchbrennt
Dann denke mal scharf nach, unter welcher Bedingung er durchbrennen
würde und wie wahrscheinlich das ist.
Stefan U. schrieb: >>falls der 3,3kOhm durchbrennt > > Dann denke mal scharf nach, unter welcher Bedingung er durchbrennen > würde und wie wahrscheinlich das ist. muss ja nicht durchbrennen, kann ja auch einfach defekt sein, dachte wird schon nicht schaden. Aber brauch ich ja jetzt eh nicht mehr
michox schrieb: > Mir ist nur leider noch nicht so klar, wie ich den maximalen Strom > meiner LEDs berechne, um die Transistorschaltung richtig auszulegen. > Im Anhang mein Schaltplan nach meiner Recherche. Bin mir vor allem nicht > sicher ob ich den MOSFET richtig angeschlossen hab. > Hab für eine ähnliche Anwendung diesen gefunden > https://www.conrad.de/de/mosfet-infineon-technologies-irf540npbf-1-n-kanal-130-w-to-220-162412.html Du hast allerdings einen bipolaren Transistor eingezeichnet und die Verschaltung wäre falsch. Bei einem npn den Emitter an Gnd und Kollektor an +. Wolltest Du jetzt einen Bipo oder einen MOSFET? Der verlinkte MOSFET ist kein Logic Level MOSFET, d.h. er schaltet bei 5V möglicherweise nicht ganz durch und generiert Wärme, die ihn je nach Strom auch zerstören kann. Um welchen Strom ginge es denn? Ein 08/15 MOSFET, der hier geeignet sein dürfte ist ein IRLZ34N: https://www.infineon.com/cms/de/product/power/mosfet/20v-300v-n-channel-power-mosfet/40v-75v-n-channel-power-mosfet/irlz34n/ Schau mal die Anwendung von MOSFETs hier in der Artikelsammlung nach.
Conny G. schrieb: > Wolltest Du jetzt einen Bipo oder einen MOSFET? Hab gelesen das MOSFET wohl weniger warm werden, bzw. für größere Ströme besser geeignet sind. Conny G. schrieb: > Um welchen Strom ginge es denn? also der LED Streifen würde wenn ich die ganzen 5M verbaue 2A fressen.
michox schrieb: > Conny G. schrieb: >> Wolltest Du jetzt einen Bipo oder einen MOSFET? > > Hab gelesen das MOSFET wohl weniger warm werden, bzw. für größere Ströme > besser geeignet sind. Ja, für Schaltvorgänge sind MOSFETs effizienter. > Conny G. schrieb: >> Um welchen Strom ginge es denn? > > also der LED Streifen würde wenn ich die ganzen 5M verbaue 2A fressen. 5W pro Meter? Da gäbe es bessere, wo Du nicht gleich so viele Meter verbauen musst, 15W pro Meter sind eigentlich recht erschwinglich, da brauchst nur ein Drittel der Länge, also kaum 2m. Ansonsten sind 2A überhaupt kein Problem für den IRLZ34N. Der hat bei 5V Gatespannung einen On-Widerstand von 0,05 Ohm, das ergibt bei 2A eine Verlustleistung von 0,2 Watt. Bei seinen 62 C/W an Wärmewiderstand zur Umgebung erwärmt er sich dann nur um 15 Grad. Auch die Schaltverluste - die bei PWM manchmal der Treiber für die Erwärmung sind - sind hier sicher kein Problem, wenn Du nur mit wenigen 100Hz schaltest.
Conny G. schrieb: > Hast eigentlich hiervon schon mal was auf dem Breadboard getestet? das NodeMCU kam erst gestern an, ich werde heute Abend mal was zusammenstecken
michox schrieb: > Conny G. schrieb: >> Hast eigentlich hiervon schon mal was auf dem Breadboard getestet? > > das NodeMCU kam erst gestern an, ich werde heute Abend mal was > zusammenstecken Hoffe Du hast von allen Bauteilen mindestens 2 gekauft :-))
Also ich hab die Funktionalität des Node mit einem Blink script bestätigt, jedoch bekomme ich leider keinen Ton aus dem DFPlayer. Ich habe das Beispielscript der DFRobotDFPLayerMini library genommen, und dort die Pins angepasst, bekomme jedoch nur das hier als output...
1 | DFRobot DFPlayer Mini Demo |
2 | Initializing DFPlayer ... (May take 3~5 seconds) |
3 | Unable to begin: |
4 | 1.Please recheck the connection! |
5 | 2.Please insert the SD card! |
6 | Time Out! |
und davor noch einige kryptische Zeichen, die ich nicht einmal kopieren kann. Ich hab schon mehrere Bibliotheken ausprobiert, und einiges an der Schaltung rumprobiert, aber dieser Output war der einzige der bisschen was ausgesagt hat. Zum Vergleich, hier das Script https://github.com/DFRobot/DFRobotDFPlayerMini/blob/master/examples/GetStarted/getStarted.ino Habe da noch printDetail(myDFPlayer.readType(), myDFPlayer.read()); hinzugefügt, um den Fehler auslesen zu können. Ich habe bereits 3 SD Karten ausprobiert, andere Pins benutzt, mit und ohne den Widerstand vor RX, mehr fällt mir ehrlich gesagt auch nicht mehr ein.
klemm doch den DFPlayer mini erstmal an einen ganz ordinären USB nach UART TTL Wandler und sende die Kommandos per PC und Terminal Programm. Dann kannst du erstmal testen ob der Player geht und ob du die SD-Karte richtig formatierts hast usw... Erst wenn das geht, machst du darauf basierend weiter...
> Ich habe bereits 3 SD Karten ausprobiert
Sehr gut, denn gerade an Mikrocontrollern will die ein- oder andere mal
nicht funktionieren. Hast du eine mit maximal 2GB Größe probiert? Klingt
vielleicht blöd, aber ich habe schon einige Geräte gesehen, die da eine
Grenze haben.
edit, wenn ich einen Kurzschluss zwischen IO_1 und Ground verursache, fängt es an zu spielen, Lautsprecher und sd Karte sind also in Ordnung
ok hat sich erledigt... Im Beispielcode stand
1 | SoftwareSerial mp3Serial(D1, D2); // RX, TX |
also ging ich davon aus dass RX an D1 muss und TX an D2. War aber gerade andersrum.......
michox schrieb: > Ist der Transistor dann so richtig? Ja, passt. Pulldown ist üblicherweise etwas größer, 50-100k. Und der Gatewiderstand kleiner, maximal 1k, weniger macht wohl aber auch keinen Sinn, weil der MCU nicht mehr Strom liefern wird.
noch eine frage entweder ich bin zu dumm zum suchen, oder zu dumm für mosfets... wie ist denn da physikalisch die Belegung der Pins? Im Datenblatt finde ich nichts... aus dem Schaubild und dem Diodentest hätte ich jetzt gesagt, wenn man auf die Seriennummer schaut ist links das Gate in der Mitte der Source und rechts der Drain. Stimmt das?
Welchen MOSFET hast Du? n-Kanal FETs haben von vorne gesehen GDS und die Fahne ist D. Hier irgendeiner: http://www.el-component.com/mosfets/irfp260n
Also hab die LED mal wie oben angeschlossen, mal mit 50kOhm mal mit 10 zwischen Gate und Source und zwischen Pin und Gate mit 1kOhm und 330 Ohm getestet. Bei beiden malen, leutet die LED ganz schwach egal welchen wert ich mit analogWrite übergebe... Wenn ich Gate und Drain kurzschließe leuchtet die LED voll. Kann es sein, das der MOSFET bei der geingen Pin Spannung nicht durchschaltet? oder woran kann das sonst liegen?
michox schrieb: > Also hab die LED mal wie oben angeschlossen, mal mit 50kOhm mal mit 10 > zwischen Gate und Source und zwischen Pin und Gate mit 1kOhm und 330 Ohm > getestet. Bei beiden malen, leutet die LED ganz schwach egal welchen > wert ich mit analogWrite übergebe... Wenn ich Gate und Drain > kurzschließe leuchtet die LED voll. Kann es sein, das der MOSFET bei der > geingen Pin Spannung nicht durchschaltet? oder woran kann das sonst > liegen? Das wäre sehr gut möglich, dass er bei 5V noch nicht schaltet, welcher isses?
michox schrieb: > Der den du mir empfohlen hast IRLZ34N Der ist ein Logic-Level-MosFet und sollte es tun, siehe https://www.mikrocontroller.net/articles/MOSFET-%C3%9Cbersicht Wie hoch ist denn Dein Gate-Widerstand zum µC? 1K wäre auf jeden Fall zu viel. 82 Ohm wäre okay. Oder setze einfach eine Brücke rein, geht auch.
:
Bearbeitet durch Moderator
hab einmal 330 ohm gesetzt, und komplett ohne. Ging beides nicht... braucht mein MCU vielleicht die selbe Stromversorgung wie die LED? hab momentan noch LED über Netzteil und MCU über PC laufen.
michox schrieb: > hab einmal 330 ohm gesetzt, und komplett ohne. Ging beides nicht... > braucht mein MCU vielleicht die selbe Stromversorgung wie die LED? hab > momentan noch LED über Netzteil und MCU über PC laufen. Wenn die GND der Schaltungen verbunden sind, sollte das ok sein.
Da fällt mir gerade was auf.... Was kommt aus dem NodeMCU raus aus dem GPIO, 3.3V oder 5V? Wenn das 3.3V sind, dann ist der IRLZ34N möglicherweise doch nicht geeignet. Hab grad kurz zurückgescrollt und da war immer von 5V die Rede, aber ESP sind doch 3.3V. Also kommen bei einem Ausgang aus dem NodeMCU auch 3.3V, richtig?
michox schrieb: > ja habs grade auch nochmal nachgemessen Dann ist es knapp. Wenn Du manuell 5V ans Gate machst, geht es dann? Du könntest dann einen kleinen bipolaren vorschalten, der die 3.3v + Vorwiderstand an die Basis bekommt und die 5V oder die 12V ans Gate legt. Also Ausgang-Vorwiderstand-Basis. Emitter and GND Und Kollektor-X-1k-VCC vCC ist dann 5V oder 12v Bei X schließt Du das Gate des MOSFET an. Das Ganze invertiert, also High am Transistor macht Low am Gate.
michox schrieb: > also so? Ist da egal was für ein biploarer? So ein Standard BC337 oder BC547 tut es. Der Schaltplan ist da echt schwierig zu sehen. Emitter an GND - ok. Ausgang-Vorwiderstand an Basis - Verschaltung ok, der Vorwiderstand weiss ich nicht, lass mal rechnen. Der Transistor soll voll durchschalten (sagen wir das sei 1A), seine Verstärkung ist mindestens 100-200, das ergäbe einen Basisstrom von 1A / 200 = 5mA. Es kommt 3.3V aus dem NodeMCU, am Transistor fallen 0,7V ab, verbleiben 2,8V. Wir suchen einen Widerstand, der mit 2,8V 5mA Strom durchlässt, R=U:I sind 560 Ohm. Ja, dann sind 300 Ohm auch ok. Kollektor über 1k an 5V, ich glaube das ist so, das ist recht eng beeinander. Gate am Kollektor (vor den 1k), ich glaube das sehe ich auch, ist aber hier alles übereinander und schwer zu sehen. Ich glaube es ist ok, probier mal. Wenn es mit 5V nicht geht (müsste aber), dann mach die 12V an den Kollektor des Bipo.
mit dem 1k zwischen Kollektor und 5V hats nicht funktioniert, also hab ich das mal weggelassen. Dann hats kurz funktioniert, jedoch hab ich das Gefühl dass jetzt der MOSFET durchgebrannt ist... Wenn ich nichts am Gate anschließe brennen die LEDs trotzdem relativ hell. Nicht voll aber der MOSFET wird schnell heiß... scheint so dass ich eh nochmal zum Konrad muss, dann kann ich auch gleich einen geeigneten besorgen. Hast du da eine Empfehlung?
michox schrieb: > mit dem 1k zwischen Kollektor und 5V hats nicht funktioniert, also hab > ich das mal weggelassen. Dann hats kurz funktioniert, jedoch hab ich das > Gefühl dass jetzt der MOSFET durchgebrannt ist... Wenn ich nichts am > Gate anschließe brennen die LEDs trotzdem relativ hell. Nicht voll aber > der MOSFET wird schnell heiß... scheint so dass ich eh nochmal zum > Konrad muss, dann kann ich auch gleich einen geeigneten besorgen. Hast > du da eine Empfehlung? Mmmh. Den 1k hast Du weggelassen? Dann ist Dir der Bipo durchgebrannt, denn der kann nur 100mA oder ein paar 100mA. Mit 5V ohne Widerstand ist der gleich durch. Mit 1k Widerstand gehen 5mA durch, das ist kein Problem. Das Gate war dann ganz offen oder über den 47k Pulldown auf GND? Wenn letzteres, dann ist der MOSFET tatsächlich defekt. Der IRLZ34N wird bei 2A nicht heiss, wenn er voll durchgeschaltet ist. Aber er wird heiss, wenn er nicht ganz durchgeschaltet ist. Und in dieser Konstellation kann er auch nur dann durchbrennen, weil er 2A leitet, aber noch einen hohen Widerstand hat. Das wäre mir allerdings unklar, warum das so gewesen sein sollte. Fall 1) Du gibst dem Transistor 3.3V, er macht auf, dann geht der Kollektor (fast) auf GND. Weil das Gate daran hängt, macht der MOSFET zu. Fall 2) Der Transistor bekommt 0Vf, er macht zu. Der Transistor mit sehr hohem Widerstand (Megaohm?) und die 1k bilden einen Spannungsteiler, die Spannung zwischen dem Kollektor und dem 1k Widerstand ist nahezu die 5V, die liegen am MOSFET Gate an, der MOSFET schaltet durch. Wenn Du den 1k rausgenommen hast: 1) 3.3V auf den Transistor, er macht auf, die 5V "rauschen" ungebremst durch den Transistor, er glüht durch. 2) 0V auf den Transistor, er macht dicht, der Kollektor liegt auf 5V und damit das Gate des FET, der MOSFET schaltet durch. Jetzt ist die Frage, was im Fall 3) passiert - der Transistor ist durchgebrannt. Leitet er oder sperrt er? Oder irgendwas dazwischen?
michox schrieb: > scheint so dass ich eh nochmal zum > Konrad muss, dann kann ich auch gleich einen geeigneten besorgen. Hast > du da eine Empfehlung? Du brauchst dann einen Logic Level MOSFET für 3.3V. https://www.mikrocontroller.net/articles/MOSFET-%C3%9Cbersicht#N-Kanal_MOSFET Der sieht nicht schlecht aus: https://www.conrad.de/de/mosfet-infineon-technologies-irf3708pbf-1-n-kanal-87-w-to-220-162394.html http://www.produktinfo.conrad.com/datenblaetter/150000-174999/162394-da-01-en-TRANSISTOR_HEXFET_IRF3708PBF_TO_220__IR.pdf Der schaltet wohl bei 2,5V-2,8V durch.
also zwischen Source und Drain messe ich 30 Ohm Widerstand... ohne irgendwas angeschlossen Wenn ich die Funktionsweise von einem MOSFET richtig verstanden habe, müsste er doch auf jeden Fall sperren wenn ich source und gate kurzschließe oder? Tut er aber nicht. Ich hoffe mal der IRF3708 kommt rechtzeitig an... Das sollte eigentlich am Mittwoch fertig werden^^
Sandmann schrieb: > Miss nochmal aber vertausche diesmal die messkabel des multimeters immer noch 30 ohm ^^
Dann ist der wohl durch. :-( Einzige Erklärung: Die Ansteuerung durch den Bipo lies in „im Linearbereich“ (= teilweise durchgeschaltet) hängen und er ist abgeraucht. Hattest Du PWM draufgegeben oder konstant ein? Bei PWM gibt es noch einen Effekt: MOSFET haben hohe Schaltverluste, wenn sie langsam schalten. Die Ansteuerung durch einen Bipo auf diese Art ist sehr langsam. Bei PWM erhitzen die Schaltverluste den FET und er brennt durch. Deshalb muss man bei PWM mit FETs darauf achten, dass sie schnell genug schalten im Verhältnis zum Strom, den sie schalten.
:
Bearbeitet durch User
Conny G. schrieb: > Das Gate war dann ganz offen oder über den 47k Pulldown auf GND? > Wenn letzteres, dann ist der MOSFET tatsächlich defekt. also soll da jetzt ein 47k Widerstand sein?
michox schrieb: > Conny G. schrieb: >> Das Gate war dann ganz offen oder über den 47k Pulldown auf GND? >> Wenn letzteres, dann ist der MOSFET tatsächlich defekt. > > also soll da jetzt ein 47k Widerstand sein? 50k hast ja eingezeichnet, nach den E-Systematiken ist üblicherweise ein 47k. Aber ob 47 oder 50 ist egal.
so der neue Transistor ist da und alles tut Danke :) Jetzt habe ich aber das Problem dass glaube ich der Lautsprecher nicht genug Strom abkriegt. Ich hab einen 4 Ohm Lautpsrecher mit 3 Watt angeschloßen, hab ausgerechnet das der bei voller Lautstärke dann durchaus 1,5A brauchen kann. Jedoch liefert der Step Down den ich mir geholt hab nur Strom bis 1A... Kann man da noch irgendwie die 12V vom Netzteil relativ simpel nutzen, oder brauch ich eine extra Verstärkerplatine bzw einen besseren Step Down? Aktuell, wenn ich eine mp3 abspielen möchte funktionieren die ersten 2 Sekunden, und dann hört es auf und es fängt an durch den Lautsprecher zu rattern. Mit der selben Frequenz geht auch die Lampe am Step Down an und aus...
wobei es ja über den USB3.0 Port der maximal 0,9A liefert problemlos funktioniert hat... Liegt wahrscheinlich also schon am Konverster aber nicht am Strom
Die Spannung am Step Down wird zusammenbrechen. Da sollte etwas her was deutlich mehr Strom liefern kann und stabiler ist. Ev. hilft auch das Abstützen mit einer zusätzlichen Kapazität
gute Idee, Hast du eine Ahnung in welcher Größenordnung der Kondensator sein sollte?
Beitrag #5341218 wurde von einem Moderator gelöscht.
michox schrieb: > gute Idee, Hast du eine Ahnung in welcher Größenordnung der > Kondensator > sein sollte? ich würde direkt einen Step down nehmen, der den Strom (+ margin) liefern kann. Sonst wird es vermutlich nie gescheit funktionieren.
ok könnte man da ein KFZ Ladegerät zerlegen? Wie gesagt soll morgen fertig sein, jetzt einen neuen Spannungswandler zu bestellen wird knapp...
> könnte man da ein KFZ Ladegerät zerlegen?
Vielleicht, kommt sehr auf das Ladegerät an. Du kannst es wahrscheinlich
nicht. Kauf doch einfach ein fertiges Netzteil! So etwas bekommst
notfalls sicher auch im Baumarkt.
michox schrieb: > Aktuell, wenn ich eine mp3 abspielen möchte funktionieren die ersten 2 > Sekunden, und dann hört es auf und es fängt an durch den Lautsprecher zu > rattern. Mit der selben Frequenz geht auch die Lampe am Step Down an und > aus... Probier doch mal 10 Ohm vor den Lautsprecher einzubauen. Oder 2x 10 Ohm parallel (also 5 Ohm). Das ist zwar dann weniger laut, aber der Stepdown bricht vielleicht nicht zusammen. Dann würde es schon mal funktionieren und von da kannst Du weitersehen. Ansonsten, was hast Du an Bauteilen zuhause, hast verschiedene npn/pnp Transistoren und Lochrasterplatine da? Dann könntest Dir noch schnell einen primitiven Verstärker zusammenstellen. Entweder was mit nur einem Transistor oder eine kleine Gegentaktendstufe.
Stefan U. schrieb: >> könnte man da ein KFZ Ladegerät zerlegen? > > Vielleicht, kommt sehr auf das Ladegerät an. Du kannst es wahrscheinlich > nicht. Kauf doch einfach ein fertiges Netzteil! So etwas bekommst > notfalls sicher auch im Baumarkt. Ja, Universalnetzteil für mehrere Spannungen und 2-3A. Das gibt's überall.
Conny G. schrieb: > Dann könntest Dir noch schnell einen primitiven Verstärker > zusammenstellen. Konkreter: einen Verstärker der die 12V nutzt. Hat aber m.e. ein hohes "Fertigstellungsrisiko", wenn nur noch 1 Tag übrig ist. Ich würde lieber den Strom an den Lautsprecher drosseln oder ein anderes Netzteil dranhängen.
:
Bearbeitet durch User
Stefan U. schrieb: > Vielleicht, kommt sehr auf das Ladegerät an. Du kannst es wahrscheinlich > nicht. getan funktioniert... Sei doch nicht immer so negativ. 8€ Ladegerät vom Real parallel zum alten Step Down geschalten und alles tut wunderbar
> Sei doch nicht immer so negativ
Ich habe ja geschrieben, dass es vielleicht klappt.
Das Ladegerät von meinem Auto hätte jetzt mal eben 20V Leerlaufspannung
ausgegeben und mein kleineres Ladegerät vom Motorrad hätte "Akku defekt"
angezeigt und gar keinen Strom geliefert.
Da hast du halt Glück gehabt. Ich habe selten Glück, liegt in der
Familie. Ich könnte Murphys Sohn sein.
also das ganze funktioniert soweit, bis auf die Lautstärkeregelung. Die mache ich über interrupt und zwei Taster, jedoch kommt es manchmal vor, das das system beim drücken einer der Knöpfe abstürzt mit der Fehlermeldung
1 | Fatal exception 9(LoadStoreAlignmentCause): |
2 | epc1=0x40104e00, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000003, depc=0x00000000 |
3 | |
4 | Exception (9): |
5 | epc1=0x40104e00 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000003 depc=0x00000000 |
6 | |
7 | ctx: sys |
8 | sp: 3ffffc70 end: 3fffffb0 offset: 01a0 |
9 | |
10 | >>>stack>>> |
11 | 3ffffe10: 00000000 400042db 3fff0eec 3ffeb2f2 |
12 | 3ffffe20: 4010502c 012b6676 3ffef170 00000000 |
13 | 3ffffe30: 3ffee9b0 3ffef170 7fffffff 00000000 |
14 | 3ffffe40: 00000000 012b653e 402013b4 00000001 |
15 | 3ffffe50: 3ffef170 ffffffff 00000020 40203bd0 |
16 | 3ffffe60: 0000007f 3ffef0f4 00000000 40202455 |
17 | 3ffffe70: ffffffff 00000000 00000000 40106a4c |
18 | 3ffffe80: e0030024 00000000 00000000 4000050c |
19 | 3ffffe90: 00000000 00000000 0000001f 00000022 |
20 | 3ffffea0: 3fffc200 401069b8 3fffc258 4000050c |
21 | 3ffffeb0: 40000f68 00000030 00000010 ffffffff |
22 | 3ffffec0: 40000f58 00000000 00000020 00000000 |
23 | 3ffffed0: 00000006 4020132c 3ffee988 00000001 |
24 | 3ffffee0: ffffffff 3ffe9544 3ffee988 3fffdab0 |
25 | 3ffffef0: 00000000 3fffdcb0 3ffee9d8 00000030 |
26 | 3fffff00: 3ffef354 0000000a 3ffe91a8 4020b2bc |
27 | 3fffff10: 4020bec4 3fff04dc 3fff09d4 40104610 |
28 | 3fffff20: 3ffee9b0 3ffe9544 3ffe91b0 3fff04d8 |
29 | 3fffff30: 4020bec4 3fff04dc 3ffe91a8 4020bee0 |
30 | 3fffff40: 3ffee9b0 03bdf965 3ffee988 4020bf5d |
31 | 3fffff50: 00000000 00000000 00000001 402047f1 |
32 | 3fffff60: 40104d9e 012b6864 3ffee9b0 60000600 |
33 | 3fffff70: 40231b50 3ffef170 3ffee9b0 03becf98 |
34 | 3fffff80: 40231b76 3fffdab0 00000000 3fffdcb0 |
35 | 3fffff90: 3ffee9d8 3fffdad0 3ffef438 4020478b |
36 | 3fffffa0: 40000f49 40000f49 3fffdab0 40000f49 |
37 | <<<stack<<< |
das soll wohl damit zu tun haben, wenn interrupt funktionen sehr lang sind... Meine sieht aber folgendermaßen aus
1 | void volup() { |
2 | EEPROM.begin(254); |
3 | delay(1); |
4 | volume += 5; |
5 | if (volume > 30) { |
6 | volume = 30; |
7 | }
|
8 | myDFPlayer.volume(volume); |
9 | myDFPlayer.play(4); //play testsound |
10 | EEPROM.write(254, volume); |
11 | EEPROM.commit(); |
12 | }
|
13 | |
14 | void voldown() { |
15 | EEPROM.begin(254); |
16 | delay(1); |
17 | volume -= 5; |
18 | if (volume < 0) { |
19 | volume = 0; |
20 | }
|
21 | myDFPlayer.volume(volume); |
22 | myDFPlayer.play(4); |
23 | EEPROM.write(254, volume); |
24 | EEPROM.commit(); |
25 | }
|
was ich jetzt nicht unbedingt als lang interpretieren würde... Jemand eine Idee?
Interrupt-Routinen immer so kurz wie möglich, niemals Delay dort. Datenübertragung ist tendenziell auch zu langsam dafür. Deshalb Flags setzen und in einer Hauptschleife abarbeiten.
1 | void int_volup() |
2 | { |
3 | vol_change = 1 |
4 | } |
5 | |
6 | void int_voldown() |
7 | { |
8 | vol_change = -1 |
9 | } |
10 | |
11 | void main() |
12 | { |
13 | While(1) |
14 | { |
15 | if (vol_change > 1) |
16 | { |
17 | // Lautstärke ändern |
18 | vol_change = 0 |
19 | } |
20 | // dito für andere Tasten |
21 | } |
22 | } |
Dann hast Du zur Ausführung alle Zeit der Welt und der Inerrupt ist wenige Taktzyklen.
:
Bearbeitet durch User
Dann solltest Du aber den Hinweis, die globale Variable vol_change auch volatile zu definieren, nicht vergessen ;-)
Ansonsten: Sind die Tasten entprellt? https://www.mikrocontroller.net/articles/Entprellung Das kann auch sehr giftig sein, wenn prellende Tasten auf Ints laufen. Gemeinhin wird empfohlen Tasten nicht an Interrupts zu hängen sondern sie timerbasiert zu pollen.
Frank M. schrieb: > Dann solltest Du aber den Hinweis, die globale Variable vol_change auch > volatile zu definieren, nicht vergessen ;-) Ja, globale Variablen als volatile deklarieren! :-)
Und zum Thema „lang“: 1ms ist für einen uC eine Ewigkeit. Bei 10 MHz sind das 10.000 Taktzyklen... Bei einer prellenden Taste mit 1ms Delay könnte der Int sogar schon mehrfach aufgerufen werden, wenn Interrupts nicht in der Int-Routine gesperrt werden. Und dann wird es ganz fies.
:
Bearbeitet durch User
Conny G. schrieb: > Ja, globale Variablen als volatile deklarieren! :-) Das gilt nicht generell, sondern nur diejenigen, die sowohl in Interrupts als auch im Hauptprogramm verwendet werden.
michox schrieb: > Walter schrieb: >> nein, dazu ist die Zeit zu kurz (für Dich) > ich glaub meine Programmierfähigkeiten kann ich am besten einschätzen. na dann lag ich doch gar nicht so schlecht mit meiner Einschätzung, es sind schon mehr als 3 Wochen ;-)
sorry für die späte Meldung, hatte jetzt Prüfungsphase^^ Das Geschenk ist natürlich rechtzeitig fertig geworden. Hier ein paar Bilder und mein Code, falls sich jemand daran inspierieren möchte :) Ein Riesieges Dankeschön an Conny für die vielen und schnellen Hilfestellungen, Ich weiß nicht ob ich es ohne dich geschafft hätte. Auch den anderen Helfern sei natürlich gedankt :)
Freut mich sehr, dass ich helfen konnte! Und schön, wenn man erfährt wie es weitergeht / weiterging.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.