Forum: Mikrocontroller und Digitale Elektronik Sprechende Lampe


von michox (Gast)


Lesenswert?

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
von Richard (Gast)


Lesenswert?

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.

von Nachteule (Gast)


Lesenswert?

> 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!" ;-)

von Chris R. (hownottobeseen)


Lesenswert?

Hi,

vielleicht ist das hier als Basis brauchbar:

http://elm-chan.org/works/sd20p/report.html

von Frank L. (hermastersvoice)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von devzero (Gast)


Lesenswert?

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.

von Chris K. (Gast)


Lesenswert?

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.

von Harald A. (embedded)


Lesenswert?

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
von Stefan F. (Gast)


Lesenswert?

Das ist sicher eine nette Bastelei, aber mir würde diese Lampe schnell 
auf die Nerven gehen.

von helfer (Gast)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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

von michox (Gast)


Lesenswert?

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?

von helfer (Gast)


Lesenswert?

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
}

von Conny G. (conny_g)


Lesenswert?

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 :-)

von Conny G. (conny_g)


Lesenswert?

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.

von Walter (Gast)


Lesenswert?

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)

von michox (Gast)


Lesenswert?

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?

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von helfer (Gast)


Lesenswert?

Im Prinzip musst du nur dem Player Informationen schicken. Eine 
Rückleitung ist nicht notwendig.

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Angehängte Dateien:

Lesenswert?

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?

von helfer (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von michox (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> 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.

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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+.

von michox (Gast)


Lesenswert?

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?

von michox (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> 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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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 :)

von Conny G. (conny_g)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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...

von Stefan F. (Gast)


Lesenswert?

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
}

von michox (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

3.3/13.3 x 12 = 2.98
Passt.
Wozu die 150 Ohm?

von michox (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

>falls der 3,3kOhm durchbrennt

Dann denke mal scharf nach, unter welcher Bedingung er durchbrennen 
würde und wie wahrscheinlich das ist.

von michox (Gast)


Lesenswert?

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

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

Hast eigentlich hiervon schon mal was auf dem Breadboard getestet?

von michox (Gast)


Lesenswert?

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

von Conny G. (conny_g)


Lesenswert?

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 :-))

von michox (Gast)


Angehängte Dateien:

Lesenswert?

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.

von helfer (Gast)


Lesenswert?

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...

von Stefan F. (Gast)


Lesenswert?

> 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.

von michox (Gast)


Lesenswert?

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

von michox (Gast)


Lesenswert?

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.......

von Stefan F. (Gast)


Lesenswert?

Dann ist die Fehlermeldung bezüglich der SD Karte aber Quatsch.

von michox (Gast)


Angehängte Dateien:

Lesenswert?

Ist der Transistor dann so richtig?

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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?

von michox (Gast)


Lesenswert?

Der den du mir empfohlen hast IRLZ34N

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
von michox (Gast)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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?

von michox (Gast)


Lesenswert?

ja habs grade auch nochmal nachgemessen

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

also so? Ist da egal was für ein biploarer?

von michox (Gast)


Angehängte Dateien:

Lesenswert?

ups bild vergessen

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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^^

von Sandmann (Gast)


Lesenswert?

Miss nochmal aber vertausche diesmal die messkabel des multimeters

von michox (Gast)


Lesenswert?

Sandmann schrieb:
> Miss nochmal aber vertausche diesmal die messkabel des multimeters

immer noch 30 ohm ^^

von Conny G. (conny_g)


Lesenswert?

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
von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

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...

von michox (Gast)


Lesenswert?

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

von Helfer (Gast)


Lesenswert?

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

von michox (Gast)


Lesenswert?

gute Idee, Hast du eine Ahnung in welcher Größenordnung der Kondensator 
sein sollte?

Beitrag #5341218 wurde von einem Moderator gelöscht.
von Helfer (Gast)


Lesenswert?

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.

von michox (Gast)


Lesenswert?

ok könnte man da ein KFZ Ladegerät zerlegen? Wie gesagt soll morgen 
fertig sein, jetzt einen neuen Spannungswandler zu bestellen wird 
knapp...

von Stefan F. (Gast)


Lesenswert?

> 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.

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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
von michox (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> 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.

von michox (Gast)


Lesenswert?

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?

von Conny G. (conny_g)


Lesenswert?

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
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Dann solltest Du aber den Hinweis, die globale Variable vol_change auch 
volatile zu definieren, nicht vergessen ;-)

von Conny G. (conny_g)


Lesenswert?

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.

von Conny G. (conny_g)


Lesenswert?

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! :-)

von Conny G. (conny_g)


Lesenswert?

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
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Walter S. (avatar)


Lesenswert?

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 ;-)

von michox (Gast)


Angehängte Dateien:

Lesenswert?

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 :)

von Conny G. (conny_g)


Lesenswert?

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
Noch kein Account? Hier anmelden.