The Sugarhill Gang – Bilderrahmen!

Ich denke das Motiv kennt jeder. Ist zur Not auch selber schnell erstellt und ausgedruckt oder im Posterladen deines Vertrauens für ca. 10€ zu kaufen (z.B. Online bei JUNIQE #notsponsored). Nachdem das Bild an der Wand hing, keimte die Idee, mir die entsprechende Songzeile auf Knopfdruck auch vorspielen zu lassen.

Das ganze wollte ich allerdings ohne lästiges Stromkabel machen. Also muss ein LiPo-Akku her; inkl. Lademöglichkeit. Wichtig war mir auch, dass ich gefahrlos an dem Bild drücken kann, ohne dass es irgendwie verrutscht oder von der Wand fällt. So kam der TTP223 Touchsensor ins Spiel. Der wurde an die Scheibe gesetzt und funktioniert dort tadellos:

Was wird alles benötigt?

Alle Links zeigen auf Amazon. Bitte schaut euch die Anzahl und die Preise an und entscheidet selber, welche Komponenten für euch in Frage kommen. Natürlich können die Komponenten auch wesentlich günstiger aus China bezogen werden!

  • Arduino (z.B. Nano als Nachbau)
  • DFPlayer Mini
  • LiPo-Akku (ich hab einen 3,7V / 5000mAh genutzt, 1800 mAh geht natürlich auch 😉 )
  • 1A 5V Micro-USB TP4056 Lademodul
  • TTP223 Touchsensor
  • Micro-SD (so klein und günstig wie möglich, es kommt nur eine MP3 drauf, muss auch nicht die schnellste sein)
  • MT3608 DC-DC Step-Up-Modul
  • 3W, 4 Ohm Mini-Lautsprecher (so flach wie möglich aber keinen Piezo!)
  • Schiebeschalter / Switch (zum Ein- und Ausschalten)
  • Potentiometer (max. 10K Ohm) für die Lautstärkeregelung
  • 2 x 1K Ohm Widerstände (wenn der DFPlayer Mini mit 5V betrieben wird)
  • Poster/Print und einen entsprechenden (und möglichst von der Größe passenden) Rahmen (sollte aber etwas tiefer sein, damit der Aufbau hinten im Rahmen angebracht und bündig an der Wand befestigt werden kann. Hovsta von IKEA bietet sich an).

An Werkzeug braucht ihr natürlich Löt-Equipment (Lötkolben, -zinn, Entlötpumpe, Präzisionszange, Schrumpfschlauch, Draht/Litze, Lochrasterplantine usw.), Schraubenzieher – nichts besonderes, aber einen gewissen Grundstock. 

Hier noch das Fritzing-Schaubild:

Ohne Gewähr. Sollte euch ein Fehler auffallen, sagt mir bitte Bescheid. 

Ich habe einen kleinen Switch/Schalter eingebaut, um die Stromversorgung auch komplett abzuschalten. Ansonsten habe ich den DFPlayer Mini über RX/TX mit dem Arduino angeschlossen und dazwischen einen 1K Ohm-Widerstand gesetzt. Damit werden die Störgeräusche eliminiert, wenn der Schaltkreis mit 5V betrieben wird. Ihr könnt den Schaltkreis auch mit 3,7V betreiben (entsprechender Arduino vorausgesetzt) – dann werden keine Widerstände benötigt. Der Poti ist für die Lautstärkeregelung. Ihr müsst nicht so einen großen Touch-Sensor nutzen, der kleine TTP223 den ich oben verlinkt habe ist natürlich ausreichend.

Wie siehts von hinten aus?

Ein wenig wild. 😉Allerdings habe ich die einzelnen Komponenten nicht gut und vorausschauend platziert, da hatte ich dann längere Drahtwege zu überbrücken. Naja, Prototyping halt. 😬

Ich habe das Konstrukt mit doppelseitigen Klebeband fixiert und noch ein paar Streifen Isolierband benutzt. Noch ein Hinweis, packt nicht alles auf eine Seite, schließlich muss das Bild noch gerade an die Wand.

Jetzt noch die Programmierung!

Wichtiger Hinweis: Versteht diese Programmierung nur als grobe Idee! Es fehlen noch grundlegende Dinge wie z.B. den Arduino in den Schlafmodus zu bringen oder auch die Fehlerbehandlung, diese ist nur rudimentär ausgeprägt.

Es wird die DFMiniMP3 und SoftwareSerial-Bibliothek benutzt, ansonsten ist es keine besondere Programmierung und sollte selbsterklärend sein.

#include <SoftwareSerial.h>
#include <DFMiniMp3.h>

int volume = 0;
int volumeOld = 0;
int volumeMap = 0;

class Mp3Notify
{
public:
  static void OnError(uint16_t errorCode)
  {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }

  static void OnPlayFinished(uint16_t globalTrack)
  {
    Serial.println();
    Serial.print("Play finished for #");
    Serial.println(globalTrack);   
  }

  static void OnCardOnline(uint16_t code)
  {
    Serial.println();
    Serial.print("Card online ");
    Serial.println(code);     
  }

  static void OnCardInserted(uint16_t code)
  {
    Serial.println();
    Serial.print("Card inserted ");
    Serial.println(code); 
  }

  static void OnCardRemoved(uint16_t code)
  {
    Serial.println();
    Serial.print("Card removed ");
    Serial.println(code);  
  }
};


DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial);

void setup() {
  pinMode(5, INPUT_PULLUP);
  pinMode(2, INPUT);

  volume = analogRead(A1);
  volumeMap = map(volume,0,1023,0,30);
  mp3.setVolume(volumeMap);
  
  Serial.begin(115200);  
  mp3.begin();

  Serial.println("Start vol: " + volumeMap);
}

void loop() {
  volume = analogRead(A1);
  volumeMap = map(volume,0,1023,0,30);
  if (volumeMap != volumeOld) {
      mp3.setVolume(volumeMap);
      volumeOld = volumeMap;
      Serial.println("New vol: " + volumeMap);
  }


  if (digitalRead(2)==HIGH && digitalRead(5)==HIGH) {
    digitalWrite(13, HIGH);
    mp3.playMp3FolderTrack(1);  
    delay(1000); 
  }
    if (digitalRead(2)==HIGH && digitalRead(5)==LOW) {
    digitalWrite(13, LOW);
    mp3.pause();  
    delay(1000); 
  }
  
  digitalWrite(13, LOW);

}

Was ist das Fazit?

Versteht dieses Projekt bitte nur als Idee. Nutzt es für eure Anforderungen. Es gibt jemand dem Knight Rider gefällt? Baut 5 LED WS2812B rein und lasst es leuchten. Nutzt einen ESP8266 und lasst beim Tor des Lieblingsvereins die Fussballhymne ertönen. Seid kreativ… 👍