Vorstellung TheoBert 1000

Ich heiße Michael und bin über die Zeitschrift Make auf dieses Projekt gestoßen.:+1: Ich selber habe im letzten Jahr ein ähnliches Projekt gestartet mit dem DFPlayer und habe ihn dann TheoBert 1000 genannt. Mittlerweile habe ich 5 Stück für Freunde und Verwandte gebaut die fleissig benutzt werden.


Hier ein paar Eckdaten:
-ARDUINO nano, RC522 cardreader, DF Player mini
-Statusanzeige über WS2812b RGB Led
-Stromversorgung über 5V Steckernetzteil
-SD-Card Zugriff über USB Anschluss
-15Tasten für Direktzugriff auf 15 Lieblingssongs oder Ordner.
-Lautstärkeregler der vom Arduino digital ausgewertet wird.
-Gehäuse aus Buchenholz gefräst und mit Laser graviert.
-Visaton Lautsprecher
-Adminfunktionen werden im EEprom gespeichert.
-Adminkarten: Sleeptimer, max Lautstärke, Tastensperre, Potisperre usw.

Aktuell habe ich die Tonuino Firmeware von @Stephan :+1: für mich erweitert und angepasst.


Mittlerweile bin ich schon bei ca. 91% Programmgröße.

Zum Tonuino habe ich noch einige Fragen, zur Hardware. Ich habe gesehen das dort der RC522 mit seinen Datenleitungen direkt an 5V Pegel vom Nano hängen. Laut Datenblatt von nxp scheint mir das zuviel. Bei mir laufen alle Datenleitungen über LevelShifter 5V/3,3V. Ebenso zum DFPlayer. Ebenfalls versorge ich den DFPlayer über eine 1N5400 Diode direkt aus dem 5V Steckernetzteil und nicht aus dem Arduino Spannungsregler. Bei vollen 5V gab es teilweise auch komische Brummgeräusche. Der Stromfluss beim DFPlayer bei hohen Lautstärken ist nicht zu unterschätzen. Erwartet ihr dort keine Langzeitprobleme?

Und habt ihr schon mal das Phänomen bei der Datenreihenfolge gehabt, wenn ihr über USB direkt die Daten aufspielt. Denn läuft es nach dem Motto: First in, first out. Also wenn ich zB. Titel 015 zuerst kopiere und danach 001 bis 014 wird Titel 015 immer zu erst abgespielt. Hier hilft nur dann das kleine Windows Freeware Programm “mp3DirSorter“. Das sortiert dann wieder nach Datenname.

Wozu habt ihr den Magic Cookie im Code? Nach meinen Erfahrungen erhöht das nur die Lesezeit die benötigt wird um die Karte zu erkennen. Meiner Meinung sollten drei Speicherplätze reichen. Ordner, Song, und Modus/Adminfunktionen.

Warum habt ihr im Github von Thorsten nur Audiodateien bis 250? Müssten doch eigentlich 255 sein? Bin zwar noch nicht an diese Grenze gekommen, aber wer weiß.

Ich hoffe das kommt nicht als gemeckere rüber, sondern als Positiv Kritik.

Ich werde mir wohl auch einen Tonuino bauen aber mit einigen Änderungen. Ich denke er bekommt 5 Tasten. Für einen 3jährigen kein Problem bei der Bedienung.

Schöne Grüße Michael

15 „Gefällt mir“

Einfach nur: …WOW!

Cooles Teil, wie hast du die Karten bedruckt bzw. was sind das für aufkleber?

Nein. Wir spielen ja explizit über die Nummer der Datei ab. Da du ja meinen Fork einsetzt, sollte das bei Dir ja auch so sein. In welcher Reihenfolge die Files auf der Karte sind ist uns egal.

Damit wir Karten Wiedererkennen können die von uns konfiguriert wurden, und andersherum andere Karten die NICHT von uns sind ignorieren können. So weiss ich wenn da Daten drin sind, das sie (höchst wahrscheinlich) auch den Zweck haben den ich erwarte.

Das ist ein Fehler. Es müssten eigentlich 255 sein.

Sind zwar nicht die gleichen, aber ich verwende die hier:

https://www.amazon.de/gp/product/B004UTZ0V6/

Sehr coole Umsetzung!

Für die Lautstärkeregelung wird ein “normales” lineares Poti verwendet?

Wenn Du Fräse und Laser hast, warum hast Du dann alles durch die Front verschraubt?

Was ist der Unterschied zwischen Stop und Pause Taste?

Hast Du eine Platine entworfen oder alles frei verdrahtet? Gibt es Fotos von der Innenansicht?

Viele Grüße
Papa

Respekt, sieht sehr professionell aus. Ich überlege meinen Tonuino auch aus Buche massiv oder Multiplex zu bauen, habe aber etwas Bedenken, dass er zu schwer wird. Er soll eigentlich portable bleiben. Was wiegt dein TheoBert 1000 ?
Wozu ist denn der Schlitz an der Front? Werden hier die Karten eingeworfen?
Sprich das Kind darf einmal hören und dann ist die Karte erst mal weg?

Da ist bestimmt eine Art mechanischer Stopp

Die Karten wurden mit Etiketten beklebt.
HERMA 4677
PREMIUM Adressetiketten A4, 63,5 x 38,1 mm, weiß, permanent haftend

Habe eine Word Vorlage und habe mühselig die Cover für die Geschichten erstellt. Habe z.B. allein 40 Karten mit Leo Lausemaus Geschichten. Das sind kurze (ca. 15min) Geschichten die für einen 3 Jährigen vollkommen reichen. Nun gibt es halt aber nicht für jede Geschichte ein eigenes Cover da auf jeder CD meistens 4 Geschichten gibt (10 CD´s gibt es) so das man hier kreativ sein muss. Die Arbeit lohnt sich aber. Wer dort Vorlagen haben möchte kann sich gerne melden. Aber die Dateien werde ich nicht Online stellen.

Bei Benjamin Blümchen, Bibi und Tina usw. habe ich nach Coverbildern von MC´s gesucht da sie das besser Seitenverhältnis haben für die Karten als die fast quadratischen CD-Cover.

Hallo papa,

das Poti ist ein linares 10kOhm Poti das die 5V auf einen Analogen Eingang vom Arduino Nano gibt. Dort wird in der Software die 1024 möglichen Werte auf 30 „gemappt“ und mit einer Hysterese von 2 umgesetzt und so an den DF-Player gesendet wenn sie sich ändern. Da dies Digital dann geschieht ist ein lineares Poti das richtige.

Die große Europlatine ist geätzt (Foto folgt noch). Sie ist mit Abstandhaltern an der Front verschraubt. Ebenso der Lautsprecher und die Kartenschlitzführung (aus einem 3D Drucker).

Die Pausetaste pausiert das Musikstück das man mit Play wieder weiter laufen lassen kann und mit STOP Stoppt die Wiedergabe komplett. Zusätzlich sind die Tasten teilweise doppelt belegt, so das man mit Tastenkombinationen Admin Funktionen auslösen oder Admin Karten erstellen kann.

Aber nur einen Taste für Play und Pause ist ebenfalls ok, ist halt auch ein Kostenfaktor. Würde ich wahrscheinlich beim nächsten mal auch so machen. Die Bauteilkosten und Arbeitsstunden für einen TheoBert 1000 sind schon enorm. Da kommt einiges zusammen.
Gruß Michael

@Gero
Der TheoBert 1000 ist als Standgerät mit Steckernetztteil gedacht und nicht wirklich für Kinder Portabel. Er wiegt ca. 1300g. Aber ohne die 15 zusätzlichen Tasten kann man einen TonUINO ja viel kleiner und leichter bauen.
In den Schlitz vorne kann man die Karte reinstecken die man abspielen möchte. Ich hatte damals bei den ersten Tests Probleme, das teilweise die Karten nicht richtig eingelesen wurden durch das Holz, deshalb habe ich die Schlitz-Variante gewählt. Würde aber beim nächsten auch die TonUINO Variante mit dem Auflegen verwenden. Muss aber noch die passende Holzstärke über dem RFID Modul ermitteln. Das Buchenholz ist 12mm stark ohne Bearbeitung.

@stephan

Habe ich auch gedacht… ich muss auch zugeben das ich es aktuell noch nicht getestet habe. Bevor ich deine Software umgeschrieben habe und verwende, hatte ich eine eigene mit der Library: https://github.com/DFRobot/DFRobotDFPlayerMini
Und dort habe ich das so festgestellt. Ich werde das die Tage mal testen.
Gruß Michael
PS: übrigens schön sauberer Programmcode… hat mit sehr gut gefallen!

2 „Gefällt mir“

Danke für die Blumen. :wink: Bist du aktuell oder ziehst du die Änderungen nicht nach? Ich hab in letzter Zeit immer wieder was dran gebastelt. Ist dein Code auf GitHub? Und ja die original Library von DFRobot ist mehr so mäh. Kann auch keine Queue, daher eh nicht so gut für unsere Zwecke.

Nicht ganz aktuell. Ich glaub ich stehe grob beim 21.11. Mittlerweile habe ich auch soviel geändert das ich wahrscheinlich noch einmal komplett von vorne die Sache angehe. Ich habe zwar meine TheoBert Variante über “if defined“ und “endif“ eingebaut aber es ist nun doch etliches von mir geändert. z.B. nutze ich die ersten 10 EEprom Plätze für Admin Funktionen und musste somit den Hörbuchmodus anpassen. So kommt eins zum anderen. Auf Github habe ich es derzeit nicht aktuell.

Hallo Sandblech,
vorab der Theobert 1000 ist wirklich eine saubere Umsetzung!
Ich möchte beim Tonuino ebenfalls einen Poti für die Lautstärke verbauen - bis auf die Hysterese schwebt mir die gleiche Lösung vor Augen. Da ich mittlerweile schon viel im Forum dazugelernt habe und nun auch mal was über Hysterese nachgelesen habe, meine Frage wie Du Sie programmiert hast. Falls Dein Code auf GitHub zu finden wäre, wäre ich für einen Link sehr dankbar. :slight_smile:
Viele Grüße und gute Nacht

@ximum
Den aktuellen Code habe ich nicht auf Github.
Hier mal die Ausschnitte für das Lautstärkepoti zum abtippen :wink:.


Das kommt ganz nach oben.

Und hier im loop.
mp3MaxVolumen wird bei mir noch durch Adminkarten beeinflusst. Kann man auch einfach durch 30 ersetzen.
PotiLock wird bei mir ebenfalls durch eine Adminkarte beeinflusst. Damit kann der Lautstärkeregler für die Kids gesperrt werden.
Grüße Michael

@stephan

Dann ist zu überlegen ob man den Cookie nicht an den Schluss setzt. Damit kann man sicher gehen das alles komplett eingelesen wurde. Solange man die Karte auf den Tonuino auflegt kein Problem, wischt man aber die Karte rüber wird teilweise nicht komplett eingelesen und es fehlt z.B. der Modus. Habe ich selber schon erlebt.
Gruß Michael

1 „Gefällt mir“

Kannst Du bitte den code mit dem code tag (6. Knopf von links) posten- anstatt Fotos? Das ist doch echt nicht nötig :wink: . Danke.

Hmmm das habe ich noch nicht beobachtet.

Wenn man aber annimmt dass die Box nur dann was spielt wenn alle Daten gelesen wurden wäre es egal welcher Teil nicht gelesen wird… oder?

Mja das stimmt. Ist aber im Moment nicht der Fall. Wenn sich Problemfälle häufen sollten, dann kann man sehen ob man in der Richtung was macht. Im Moment sehe ich das eher unter dem Motto „If it ain’t broke, don’t fix it“. :wink:

1 „Gefällt mir“

Ich wollte auch gerade schreiben: never change a running system :smile:

Heute Vormittag ging es nur per Foto… nun aber noch als Text:

byte mp3MaxVolume = 30;                       // maximal volume of DFPlayer Mini
byte potilock;                                // Potilock DATA (0-1)
int PotiPin = 7;                              // 10kOhm Poti at Pin A7
int PotiHysterese = 2;                        // Volumenpoti Hysterese (Standarteinstellung = 2)
int PotiValue;                                // Poti Value now, Volumen
int oldPotiValue;                             // old Poti Value, Volumen

//im Loop:

PotiValue = analogRead(PotiPin);
PotiValue = map(PotiValue,0,1024,0,mp3MaxVolume);

// Vergleiche aktueller Lautstärke-Potistellung mit der alten Stellung inkl. Hysterese 
if (PotiValue > oldPotiValue + PotiHysterese || PotiValue < oldPotiValue - PotiHysterese)  
   {if(potilock == 0)
       {Serial.print(F("mp3 | Volumen: "));Serial.println(PotiValue);
        mp3.setVolume(PotiValue);
        oldPotiValue = PotiValue;}}
2 „Gefällt mir“

So nun habe ich es soeben getestet. Mein Vorgehen:
-letzte Tonuino Firmeware von Stephan,
-USB Zugriff auf MicroSD-Karte (32GB) im DF-Player,
-dann eine Datei einzeln mit Name 015.mp3 zuerst vom PC in Ordner 51 rüber kopiert.
-dann Dateien 001.mp3 bis 014.mp3 ebenfalls rüber kopiert.
-neue Karte angelernt und mit Ordner 51 im Albummodus verknüpft
-Karte aufgelegt… und welches Lied startet nun zuerst??
-Lied 015 startet… nicht 001

Abhilfe schafft nur das Windows-Programm Mp3DirSorter.

Ich denke es liegt an der Hardware im DF-Player und kann nicht durch Anpassung der Software im Arduino gelöst werden.

Gruß
Michael