Mittwoch, 19. Januar 2022

Dementia III ESP32 Internetradio mit Simulation

Meine ersten Modifikationen des "Dementia friendly music player"  sind schon 2,5 Jahre her. Die Herkunft des Entwurfes, seine traurige Geschichte und mein Umbau zu einem iRadio mit Raspberry Pi kann hier nachgelesen werden:

Dementia friendly radio

2 Monate später baute ich den Gehäuseentwurf um zu einem UKW-Radio:

Dementia friendly radio II (Bauanleitung)

Nun bin ich bei der 3. Variante angekommen. Diesmal ist es wieder ein Internetradio, aber mit ESP32 und einem 2,8" SPI-Display.

Die Software hat Norbert geschrieben. Entgegen der allgemein vorherrschenden Meinung, ein Internetradio mit ESP32 könne keine Skala simulieren, beweist Norbert hier dass es doch möglich ist! Er benutzt Bibliotheken von Wolle-Schreibfaul1 und Bodmer. Die MP3-Decodierung erledigt die Software. Die Ausgabe erfolgt über I2S auf ein MAX98357A-Modul mit eingebauter 3W-Endstufe. WLAN-Verbindungsdaten und Radiosender sind hardcodiert. Bedient wird per touch oder per einfachem webinterface.

Die erste Version benutzte das Bild eines japanischen 70er Jahre solid-state-Radio mit waagerecht geführtem Zeiger.


 

bei Berührung des Display blenden sich die Bedienfelder für Sender und Lautstärke für eine definierte Zeit ein:

Für das Dementia-Radio schickte Norbert mir dann eine Version mit einer Seibt 23 Skala bei der der Zeiger eine Kreisbewegung ausführt.


 

Der Zusammenbau:

In der Frontplatte sind Vertiefungen für Einpressmuttern vorgesehen. Es gibt ausser den Rückwandschrauben keine nach außen sichtbaren Schraubenköpfe. Das Display wird mit passenden Abstandshaltern direkt hinter die Front montiert. Die Unsymmetrie des Display wird auch bei einer 180 Grad-Drehung berücksichtigt. Die Randbereiche ohne Information sind verdeckt und das Display sitzt immer genau mittig.

Der Lautsprecher mit diagonalem Lochabstand von 84,5mm wird auf einer extra Schallwand ebenfalls wieder per Einpressmuttern montiert. 


 

Die Schallwand kann mit Stoff überzogen werden und wird dann mit der Frontplatte verschraubt.
 

Die Front wird mit dem Korpus verleimt, das Innenleben bleibt trotzdem wieder demontierbar.


 

Auf den Geräteboden wird eine Leiste mit 2 Einpressmuttern angeklebt. Diese beiden Schauben halten die Platine. Die gleiche Leiste ist auch innen mit der Platine verschraubt, dient dort aber nur als Auflage und ist wegen der besseren Entnehmbarkeit der Platine nicht verleimt.

Abschlußbilder

eine Gesamtansicht mit der ersten Skala:


 

und mit der zweiten Skala:

Innenansichten:

ein kleines Video zeigt beide Simulationen 


 

Ich will noch das webinterface zeigen. Einfach aber funktionell:

Bemerkung von Norbert:

es gab mal ein Zauberwort, nämlich Sprite (nicht das Kaltgetränk!).
Bodmer stellt u. a. diese Technik mit einer seiner vielen Libs zur Verfügung, und ich wende sie an.

Der Ablauf findet folgendermassen statt:
- Hintergrundbild / Grafik laden und aufs TFT-Display zeichnen
- Puffer 1 (Sprite) für den Skalenzeiger anlegen
- Puffer 2 (Sprite) gleicher Größe wie Puffer 1 zum "Retten" des Hintergrundbildes anlegen

-> Position des Skalenzeigers berechnen
|  - Ausschnitt des Hintergrundbildes von der errechneten Position des Skalenzeigers in den Puffer 2 (zur Rettung des Hintergrundbildes) kopieren
|  - Puffer 1 des Skalenzeiger an der errechneten Position ins Hintergrundbild schreiben
< - nächste Zeigerposition errechnen

Nicht nur die Zeit für den Daten Transfer ist kritisch. Da die Sprites RAM belegen, muss auch der Speicherplatz muss im Auge behalten werden.
Üblicherweise sind die Skalenzeiger nicht all zu groß (max. 12 X 80px * 2) * 2, plus Puffer 3 (300x40px) * 2 für Touch-Bedienung, aber es summiert sich auf.
Plus die meisten Arduino Libs sind auch nicht allzu Speicher effizient programmiert... 

hier sind sie alle vereint:


 






 





 




Keine Kommentare:

Kommentar veröffentlichen