Hallo zusammen,
heute wollen wir Ihnen den ersten Beitrag von einem unserer neuen Autoren vorstellen - Matthias Kammerer.
Matthias Kammerer wird uns von nun an mit interessanten Projekten begleiten!
#SeienSieLieb und viel Spaß beim Lesen!
Vor einiger Zeit baute ich in meiner Mietwohnung eine Funkklingel ein, da der kurze Ton der vorhandenen Klingel kaum hörbar war.
An der gekauften Lösung haben mich einige Dinge gestört:
- Batteriebetrieben,
- begrenzte Anzahl an Klingeltönen,
- nicht Smarthome fähig
- und vor allem konnte die Klingel nicht mit dem vorhandenen Taster an der Haustür verwendet werden.
Bereits damals habe ich die gekaufte Klingel „gehackt“ und das Signal der alten Klingel als Schaltsignal für die Funkklingel verwendet.
In dieser Blogreihe möchten wir einen SmartGong realisieren, welcher sich auch für Mietwohnungen eignet, wo kein zusätzlicher Taster möglich oder gewünscht wird.
Im ersten Teil kümmern wir uns um den Abgriff des Signals und die Realisierung eines Gongs mit eigenem Sound, den sich jeder nach seinen Wünschen erstellen kann.
Benötigte Hardware
Für die Umsetzung wird benötigt:
Anzahl | Bauteil | Anmerkung |
---|---|---|
1 | AZ-Delivery D1 Mini | |
1 | Mini MP3 Player | |
1 | 4GB MicroSD-Speicherkarte | |
1 | Reedkontakt Schließer (N/O) | |
1 | 3W Lautsprecher z.B CQRobot-Lautsprecher 3W |
Der Aufbau
Auf der Seite dfrobot.com wird das AZ-Delivery Mini MP3 Player Modul und die verwendete Library ausführlich erklärt. Das Modul arbeitet mit 3,2-5,0 V und kann seriell angesteuert werden. Hier verlangt es 9600 Baud und einen Pegel von 3,3 V. Da der Az-D1-mini ebenfalls mit einer 3,3 V Logik an seinen Ausgängen arbeitet, spart man sich den zusätzlichen Widerstand, welcher bei der Ansteuerung über Arduinos (5V) notwendig ist.
Des Weiteren können wir mit dem Az-D1-mini später einfach den Internetzugang für unseren SmartGong einrichten.
Der Reedkontakt (N/O) ist ein magnetischer Schalter, welcher bei einem anliegenden Magnetfeld den Kontakt schließt. Durch diesen wird das Schaltsignal der bestehenden Klingelanlage abgriffen.
Bevor wir mit der Software beginnen, muss die Speicherkarte noch vorbereitet werden, damit das Modul auf die gewünschte Datei zugreifen kann.
Formatieren Sie die Speicherkarte in das Format FAT32 und erstellen Sie einen einzigen Ordner mit dem Namen MP3. In diesen können wir jetzt jede beliebige MP3-Datei ablegen, welche später der gewünschte Klingelton sein soll. Damit auch die richtige Datei abgespielt wird, müssen Sie dem Dateinamen eine vierstellige Nummerierung als Präfix voranstellen.
Ordnerstruktur & Dateistruktur der SD Karte
Anschließend können Sie die Speicherkarte einlegen und den Az-D1-Mini per USB mit dem PC verbinden.
Die Software
Sollten Sie das erste Mal einen ESP8266 (der AZ-D1-Mini ist baugleich zum WEMOS D1 Mini) über die Arduino-IDE programmieren, müssen Sie noch unter Datei -> Voreinstellungen -> zusätzliche Boardverwalter URLs: den URL einfügen und bestätigen.
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Danach geben Sie unter Werkzeuge -> Board: -> Boardverwalter "ESP8266" in die Suche ein und installieren den angezeigten Treffer.
Eine ausführliche Anleitung auch für macOs und Ubuntu gibt es bei heise.de.
Beim nächsten Start der Arduino IDE sollte der WEMOS D1 Mini unter Werkzeuge -> Board ausgewählt werden können.
Für die Verwendung des MP3 Moduls werden noch die beiden Bibliotheken SoftwareSerial.h und DFRobotDFPlayerMini.h benötigt, welche unter folgenden Links runtergeladen und über
Sketch -> Bibliothek einbinden ->.ZIP-Bibliothek hinzufügen…
eingebunden werden können.
Nach einem Neustart der IDE können Sie den kurzen Code schreiben und auf das Modul hochladen.
//Benötigte Bibliotheken #include <SoftwareSerial.h>
//Software Serial für ESP8266 https://circuits4you.com/2016/12/14/software-serial-esp8266/ Link zur Library //https://circuits4you.com/wp-content/uploads/2016/11/SoftwareSerial.zip #include <ESP8266WiFi.h> #include <DFRobotDFPlayerMini.h>
//https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299 Link zur Library
//https://github.com/DFRobot/DFRobotDFPlayerMini/archive/1.0.3.zip
//Benötigte Deklarationen
SoftwareSerial SofSer(D3, D4, false, 128);
//Wir deklarieren ein Objekt vom Typ "SoftwareSerial" mit dem Namen "SofSer"
//und setzen D3 auf RX und D4 auf TX als Ausgang
//für die serielle Kommunikation SoftwareSerial(rxPin, txPin, inverse_logic, buffer size);
DFRobotDFPlayerMini AzMp3Player;
//Wir deklarieren ein Objekt vom Typ "DFRobotDFPlayerMini" mit dem Namen "AzMp3Player"
void setup() {
SofSer.begin(9600); // Einstellen der Baudrate auf 9600,
//welche vom MP3-Module erwartet wird.
AzMp3Player.begin(SofSer);
// Starten der seriellen Kommunikation zwischen dem D1 Mini und dem MP3 Modul.
AzMp3Player.volume(25);
//Sendet Nachricht an das MP3 Modul: stelle Lautstärke auf 25 (0-30)
AzMp3Player.playMp3Folder(0);
//Sendet Nachricht an das MP3 Modul: Spiele die Dateinummer 0000.mp3
}
void loop() {
ESP.deepSleep(0); // versetzt den D1 in Tiefschlaf
}
Erster Prototyp und Bedienung
Hat alles geklappt, sollte jetzt Ihre Melodie abgespielt werden.
Durch Annähern eines Magneten an den Reedkontakt, wie im Video, wird der AZ-D1-Mini resettet und die Melodie ertönt erneut.
Damit ist unser erster Prototyp bereits fertig.
Zum Abgriff des Signals haben wir zwei Möglichkeiten. Entweder in der vorhandenen Klingelanlage ist der verwendete Elektromagnet frei zugänglich und nicht abgeschirmt, wie im folgenden Bild:
Beispiel einer offenen Magnetspule
Dann können Sie den Reedkontakt direkt in unmittelbarer Nähe der Spule z.B. mit Klebeband befestigen.
Ist dies, wie bei mir, nicht möglich (Magnet ist nach außen abgeschirmt) greifen wir die Spannung der Klingel ab und wickeln den Draht mehrmals um den Reedkontakt.
Durch die selbst gewickelte Spule entsteht beim Klingeln ein ausreichendes Magnetfeld, um den Kontakt zu schließen, und unsere Melodie kündigt uns einen Besucher an.
Links geöffnetes Gehäuse. Rechts Prototyp mit gewickelter Spule um Reedkontakt
Bei meinen ersten Tests verbrauchte die Schaltung ca. 20 mA bei 5 V im Standby. Die Stromkosten dafür betragen ca. 0,25 € jährlich. Trotzdem werden wir in den nächsten Teilen die Schaltung noch verbessern. Außerdem wollen wir noch weitere Funktionen für unsere SmartGong realisieren.
Viel Spaß beim Nachbauen!
30 Reacties
Werner
Hallo Andreas
Der andere Sketch läuft aber mit dem Arduino Uno und ich hätte es gern schon etwas kleiner gehabt.Mit dem Code ,ob ich das hinbekomme. Ich werde es bei Gelegenheit mal versuchen
MfG Werner
Andreas Wolter
@Werner: Wenn der Sketch aus dem anderen Projekt funktioniert, könnten Sie jetzt aus beiden Projekten eins machen. Ich würde den anderen Sketch übernehmen. Dann dafür sorgen, dass bei Programmstart eine MP3 abgespielt wird. loop() ersetzen Sie durch den deepsleep Befehl. Die Funktion printDetail() wird nicht gebraucht.
Im Grunde unterscheiden sich die Sketches nur durch die Pinbezeichnung und den Inhalt der loop().
In der loop() wird der MC in den Tiefschlaf geschickt. In dem anderen Projekt werden dort Informatonen angezeigt und andere MP3s abgespielt.
Ich würde zuerst die Pinnummern aus dem anderen Projekt übernehmen. Dann sehe ich, dass dort nur zwei Parameter für die Pinnummern stehen. Hier sind es vier Parameter. Das würde ich auch so aus dem anderen Projekt verwenden.
Theoretisch sollte dann zumindest einmal die MP3 abgespielt werden.
Der Reedkontakt resettet den Mikrocontroller und die MP3 wird wieder bei Programmstart abgespielt.
Das können Sie durch einen Taster erledigen.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Werner
Hallo Andreas. Ich habe jetzt mal aus euren Blogbeispielen den Beitrag ,,Musikdateien mit dem MP3 Player abspielen ,, genommen. Das funktioniert einwandfrei. Ratlose Grüße Werner
Andreas Wolter
@Werner: die Baudrate, die im Sketch eingetragen wird, ist unabhängig von der Uploadrate in den Boardeinstellungen.
In diesem Sketch wird die serielle Hardware-Schnittstelle nicht initialisiert. Das wird der Grund sein, warum Sie im seriellen Monitor nichts, oder nur Seltsames sehen. Die Initialisierung der SoftSerial Schnittstelle ist nur für den MP3-Player da.
Ich würde alle Board-Einstellungen auf Default belassen.
Den Reed durch einen Taster zu ersetzen, sollte theoretisch keinen Unterschied machen.
Wir haben noch andere Projekte, die den MP3-Player verwenden, im Blogbereich. Vielleicht sollten Sie dort nochmal reinschauen. Eventuell klärt sich dann, warum es nicht funktioniert.
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/die-sprechende-uhr
Leider wird in den meisten Fällen ein anderer Mikrocontroller verwendet. Vielleicht sollten Sie das vorerst auch in Erwägung ziehen, um das MP3 Modul überhaupt zum Laufen zu bekommen. Später könnten Sie dann wieder wechseln.
Ich vermute immernoch, dass es an den Versionen der verschiedenen Bibliotheken liegt. Eventuell ist aber auch an der Verkabelung etwas nicht korrekt.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Werner
Hallo Andreas
Ich habe jetzt verschiedene Varianten durchprobiert und kann jetzt den D1 Mini mit dem Programm flashen. Woran es jetzt gelegen hat kann ich allerdings nicht sagen. Trotzdem kann ich dem Gerät keinen Ton entlocken. Im seriellen Monitor sind nur Hieroglyphen zu sehen. Unter Werkzeuge-Upload Speed kann ich die Baudrate nur bis 57600 setzen. Im seriellen Monitor geht es bis 9600 runter. Ich habe alles durchprobiert aber nichts. Ich habe anstelle des Reedkontaktes einen Taster angeschlossen,aber das sollte ja egal sein. Ich weiß jetzt auch nicht mehr weiter woran es liegen könnte
Andreas Wolter
@Werner: es könnte auch an der Version des ESP Cores liegen. Die Probleme gab es z.B. beim Internetradio. Allerdings dort mit dem ESP32 glaub ich.
Eventuell ist es dann auch die Kombination aus allem (Arduino IDE Version, Bibliotheksversion, ESP Core Version).
Die Baudrate von 9600 wird eigentlich sehr oft verwendet. Sollte auch funktionieren.
Wenn der D1 beim Hochladen nicht erkannt wird, scheint es ein anderes Problem zu sein.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Werner
Ich nochmal. Vielleicht hat es ja auch mit der Baudrate zu tun. Sie soll auf 9600 eingestellt werden. Aber so weit runter geht es nicht.
Werner
Oh,das ging aber schnell.Danke Andreas für die Antwort. Hab die Bibliothek SoftwareSerial eine Version niedriger genommen. Das kompilieren läuft jetzt fehlerfrei durch ,nur das hochladen funktioniert nicht. Es kommt immer die Meldung daß das Board nicht angeschlossen ist oder der serielle Port nicht vorhanden ist. Ich probiere weiter
MfG Werner
Andreas Wolter
@Werner: die Fehlermeldung besagt, dass der Funktionsaufruf mit diesen Parametern nicht bekannt ist. Das passiert u.a., wenn sich beim Update entweder der Arduino, oder den Bibliotheken etwas verändert.
Sie könnten im Bibliotheksverwalter die Version er Bibliothek downgraden, oder eine ältere Arduino IDE installieren.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Werner
Hallo miteinander
In der Hoffnung das dass noch jemand liest da der Beitrag etwas älter ist, aber vielleicht kann mir ja trotzdem jemand helfen. Beim Flashen erhalte ich immer die Meldung: no matching function for call to SoftwareSerial (const uint8_t&, const uint8_t&, bool,int) . Die Arduino IDE meckert bei der Zeile 10 des Codes. Weiss jemand was ich falsch mache?
MfG werner
Achim
Eine mechanische Frage: Ich habe die gleiche Klingel. Wie bekomme ich die Platten zum Reinigen heraus?
Sind an der Außenseite der beiden Platten nur jeweils zwei Stopfen? Wie bekomme ich die Platten raus?
Danke
Patrick Neumann
Hallo,
sehr interessant. Ich habe die Schaltung nachgebaut und überlege nun, wie ich sie bei mir integriert bekomme. Ich habe eine alte Klingel mit neuem Trafo. Dieser Liefert 8 oder 12V AC.
Wie wäre es nun sinnvoll, diese Schaltung zu integrieren?
Wäre dieser Weg sinnvoll?
→ Klingel Knopf aktiviert Trafo → dieser liefert Strom an einen Wandler, welcher mir aus den 8V 5V macht → an einen Kondensator um für X Sekunden den Strom zu Puffern und dann an die Schaltung. Sagen wir, damit die Schaltung 40 Sekunden läuft etwa… Würde das gehen? Macht das so sinn? Oder würde das zu ofte Strom Ein/Aus den Modulen schaden?
Steffen
Hallo,
ich möchte einen MP3-Mini an einem ESP8266 D1 Mini laufen lassen. Der Sketch läuft soweit, ich bekomme allerdings die Meldung “Get Wrong Stack”. Leider habe ich dazu nirgendwo etwas gefunden. Hat jemand eine Idee, was das bedeutet und wie man das behebt?
VG Steffen
Burki
@Pit
Das umschalten zwischen den einzelnen MP3s geht noch viel einfacher. Es ist nicht nötig eine Variable hochzählen zulassen. Ihr müsst nur den Befehl “AzMp3Player.playMp3Folder(0)” durch “AzMp3Player.next()” ersetzen. Der Player spielt dann immer das nächste Lied und fängt wenn alle Lieder abgespielt wurden, wieder von vorn an. Hierbei spielen Ordner übrigens keine Rolle. Die MP3s können in verschiedenen Ordnern liegen.
Matthias Kammerer
@john bowness
Sorry for keeping you waiting John,
my solution for a doorbell by knocking would go by using the KY-038 module of Az Delivery instead of a reed switch analogous to blog post 3 about a BC547 transistor to turn the board on. The KY-038 has a digital output that turns to HIGH from an adjustable threshold value via a potentiometer and can thus, together with the transistor, pull the circuit to Low. The microphone can then be glued to the door and adjusted so that it only comes on when knocking, but not when closing or opening the door (a vibration sensor would trigger here, too). The bodysound through the door is transmitted quite well, which allows the threshold value to be set very high. A disadvantage is that the sensor must permanently be supplied with power.
@Pit
Hallo Pit, das ist durchaus machbar.Du kannst pro Ordner, in unserem Fall MP3, bis zu 255 mp3 Datein hinterlegen. Diese musst du nur entsprechend nummerieren. Im Code bei:
AzMp3Player.playMp3Folder(0);
übergeben wir der Funktion die Nummer, die das Modul auf der Speicherkarte im MP3 Ordner abspielen soll. Du kannst die 0 durch eine Variable vom Typ int bzw unsigned int ersetzen, diese dann dauerhaft im Flash Speicher ablegen und nach jedem Aufruf um eins erhöht abspeichern. Zur Verwendung des SPIFFS-Filesystems gibt es z.B. folgenden Beitrag: https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/entwurf-daten-in-den-flash-speicher-des-esp-ablegen. Beachte dabei, dass du die Variable selbst im Code auf 0 zurücksetzen musst sobald dein letzter Titel abgespielt wurde.
@Horst
Hallo Horst, ich hatte anfangs dasselbe Problem mit den regulären TX und RX PINs des Wemos D1. Mit der SoftwareSerial Bibliothek und den PINs D3 und D4 sollte es aber funktionieren.
Viele Grüße
Matthias
Horst
Hallo !
Sollte eigentlich simpel sein – aber das tut es bei mir nicht.
WMos funktioniert (Blink !), der player funktioniert mit einem Uno ; nur WMos und der der player zusammen – da kommt nix raus.
Hat einer eine Idee ?
Grüsse
Pit
Wollte meine alte Klingel (Eigenbau vor ca.40 Jahren) damit ersetzen, Stromverbrauch ist gegen diese recht hoch. Leider spielt die hier vorgestellte Klingel nur das im Programm vorgegebene Lied. Meine alte Klingel hat 50 Lieder, so dass bei jeder Betätigung der Klingel ein neues Lied gespielt wird. Ist soetwas hier auch machbar?
john bowness
hi im in the uk. i have had an idea for a while now but dont know how to do it . i would want to have a door bell that is set off buy someone knocking on the door.it would need to be fastened to the door and be powered from a battery. is there something that can detect the knock vibration or the sound from inside the house.what do you think.
thanks john
Tomtje
@Lahmann: Da gibt es was von ct:
https://www.heise.de/newsticker/meldung/AVM-Fritzbox-Tuerklingel-Integration-mit-Akku-4134842.html
LG
Matthias Kammerer
Hallo zusammen,
es freut mich, dass das Projekt so gut ankommt.
@ Holger
Es gibt natürlich mehrere Wege auch zB über einen Optokoppler, der ist auch kleiner als ein Relais. Allerdings hat mir einfach der Reed am besten gefallen, er reagiert schnell und man muss nicht zwangsweise in die Stromversorgung der Klingel eingreifen. Galvanisch getrennt ist der Reed auch :)
@ M. Lahmann
Danke für den Beitrag eine coole Erweiterung. Ich werde auf jeden Fall versuchen es noch mit umzusetzen. Prinzipiell kannst du dafür jeden ESP nehmen.
Viele Grüße
Matthias
M.Lahmann
Hallo
Ich bin neu auf dieser Seite habe schon bei Amazon und beim Kundenservice von AZ-Delivery meine Frage eingestellt aber keine Antwort erhalten . Ich suche eine Lösung wie man die Hausklingel mit Hilfe eines Modduls über die Fritz-Box auf alle Telefone übertragen kann . Habe im Netz gelesen das das mit einem Module ESP8266 möglich wäre ? Welches ihrer Module ist dafür am besten geeignet?
MfG
Rainer
Tolle Idee, vielen Dank. Habe mich heute an die Realisierung gewagt.
Allerdings hat mein D1 mini eine andere Pinbelegung. Scheinbar gibt es hier Abwandlungen, obwohl sie ziemlich gleich aussehen. Ich hatte für ein anderes Projekt mal bei Amazon einen 5er Pack bestellt, da war noch einer übrig. Leider stimmt hier das Pinlayout nicht, ich musste erst mal mit dem Beispiel “Blink” zusammensuchen wo nun was wirklich raus kommt.
Holger
Warum nicht gleich ein passendes Relais nehmen? Bei einer Wechselspannungsklingel nicht vergessen noch eine Einweggleichrichtung und einen passenden Ladekondensator (damit das Relais nicht flattert) einzubauen und schon gibt es eine galvanische Trennung zwischen Klingelanlage und dem Gong.
Matthias Kammerer
@Alfredo Milone
Diese alten Klingelanlagen haben meist (bei mir auch) ca.8V Wechselspannung. Sollte also funktionieren👌🏻.
Viele Grüße
Matthias
RalfK
Coole Idee mit dem Reedkontakt, darauf bin ich nicht gekommen. Das werde ich über Ostern definitiv nachbauen, mal sehen was Dir noch einfällt im Teil 2 :)
Alfredo Milone
Danke für diesen Beitrag. Ich besitze einen Wechselstrom Summer. Es ist eine Spule zu erkennen. Meine Fragen. Funktioniert der Reed Kontakt auch bei meinem Setup? Wie und womit könnte man sein benötigtes Signal vom Summer noch abgreifen? Z.B für einen normalen Türgong.
Matthias Kammerer
@ Tobias
Du hast vollkommen recht, die vorherige Klingel ist dann aus. Ist aber auch so gewollt. 😄
Zumindest bei mir hatte die originale Spule auch nur einen Widerstand von 6,5 Ohm. Wenn du also auf Nummer sicher gehen willst, dann vorher nachmessen und gegebenenfalls einen passenden Vorwiderstand mit einbauen.
Viele Grüße
Matthias
R. Zirngibl
Tolle Beiträge, sehr kreativ und hilfreich! Dankeschön!
Tobias
Wenn ich “die Spannung der Klingel abgreife” und den Draht um den Reedkontakt wickele, ergibt das nicht einen Kurzschluss und setzt die eigentliche Klingel ausser Kraft?
Ausser der Draht wäre entsprechend lang oder hochohmig?
viele Grüße
Flo
Coole Idee und einfache Realisierung mit dem Reedkontakt. Freue mich auf Teil 2.
VG Flo