Das Wavy OLED

Ein Beitrag zum Oster-Contest 25 von Günther Zöppel     

                                Elektronik-Labor  Literatur  Projekte  Lernpakete  UKW               






Wavy mit Frequenz- und Batteriespannungsanzeige sowie eingebauter Digitaluhr

Beim Beschäftigen mit dem FM-Modul WAVY anlässlich des Osterwettbewerbes 2025 ist mir die Idee gekommen, den Besitzern dieses Bausatzes von Franzis eine etwas komfortablere Frequenzanzeige  anstelle der starren aufgedruckten Skala des Pappkartons zu ermöglichen.



In meinem ersten Projekt dazu hatte ich bereits ein 20x4 LCD-Display dazu genutzt. Dies wäre aber zu groß und zu stromintensiv für den Einbau in den Pappkarton des Bausatzes, deshalb habe ich das Konzept des obengenannten Wettbewerbsbeitrages auf einen ESP8266 und ein gelb-blaues 0.96“-OLED-Display SSD1306 umgestrickt, welche beide von der Größe her in den Pappkarton passen würden, entsprechende Durchbrüche bzw. Befestigungen müssten dazu noch geschaffen werden. Um die leidige Batterieproblematik etwas zu entschärfen, habe ich auch hier eine zweite Anzeigeebene im Display eingebaut, die die Batteriespannung misst und darstellt, wobei mittels eines Tasters die Anzeigeebenen von Frequenz/Skala auf Batteriespannungsanzeige umgeschaltet werden können. Als Batterien könnten problemlos Li-Ionen-Akkus von ausgedienten Geräten (2 Stück je 4,2V in Serie) in das Pappgehäuse eingebaut werden, siehe dazu auch die Anregungen im Elektronik-Labor bezüglich der Nutzung von Akkus weggeworfener E-Zigaretten.



Die zusätzlichen Bauteile (ESP8266 D1 mini und das OLED-Display) sind heutzutage sehr preiswert im Elektronikhandel zu erwerben. Um die zweite Anzeigeebene etwas aufzuwerten, habe ich dort noch eine Uhrzeitanzeige eingefügt, da der ESP8266 die Möglichkeit bietet , sich in das heimische WLAN einwählen zu können und dort die aktuelle Uhrzeit vom NTP- Server  abzuholen. Dazu muss man nur seine WLAN-Zugangsdaten im Sketch eingeben. Etwas Anpassung ist auch noch beim Messen der Analogspannung des WAVY- Bausatz– Frequenzpotenziometers nötig, da die Eingangsspannung des ESP-Analogeinganges A0  1V nicht wesentlich überschreiten sollte. Damit ergab sich folgender Sketch, den ich (entsprechend angepasst vom vorherigen Oster-Projekt) umschrieb und mittels der Arduino IDE 1.8.19 per USB auf den ESP8266 geflasht habe :


//Wavy Sketch ESP8266 und OLED
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
 
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -1  // Reset-Pin nicht benötigt
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 
#define A0_PIN A0  // Analoger Eingang für die Steuerspannung
#define A2_PIN A0  // Batteriespannungseingang (ESP8266 nutzt A0 für alle analogen Messungen)
#define SWITCH_PIN D6 // Digitaler Pin zur Umschaltung
 
#define V_MIN 0.0   // Minimale Spannung (0V -> 87,5 MHz)
#define V_MAX 1.0   // Maximale Spannung (1.0V -> 108 MHz, ESP8266 Analogspannung max 1V)
#define F_MIN 87.5  // Minimaler Frequenzwert
#define F_MAX 108.0 // Maximaler Frequenzwert
#define BATTERY_MAX 8.4 // Maximale Batteriespannung
 
// WLAN-Zugangsdaten
const char* ssid = "MY-WLAN";
const char* password = "MY-WLAN-PASSWORD";
 
// NTP Client setup
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 7200, 60000); // Offset: 7200 bei  MESZ, oder 3600 bei MEZ
 
void setup() {
    pinMode(SWITCH_PIN, INPUT_PULLUP); // Schalter-Pin mit internem Pullup-Widerstand
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C-Adresse 0x3C evtl. anpassen
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(10, 5);
    display.print("FM Tuner WAVY 2025");
    display.display();
 
    // Mit WLAN verbinden
    WiFi.begin(ssid, password);
    display.setCursor(10, 20);
    display.print("Connecting to WiFi");
    display.display();
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        display.print(".");
        display.display();
    }
 
    // NTP Client starten
    timeClient.begin();
}
 
void loop() {
    timeClient.update();
 
    display.clearDisplay();
    display.setCursor(10, 5);
    display.print("FM Tuner WAVY 2025");
 
    if (digitalRead(SWITCH_PIN) == LOW) {
        // Externer Eingang aktiv
        display.setCursor(10, 20);
        display.print("Alternativanzeige");
       
        // Batteriespannung messen
        float batteryVoltage = analogRead(A2_PIN) * (1.0 / 1023.0) * (BATTERY_MAX / 1.0);
        display.setCursor(10, 35);
        display.print("Battery: ");
        display.print(batteryVoltage, 2);
        display.print(" V");
 
        // Zeit anzeigen
        display.setCursor(10, 50);
        display.print("Time: ");
        display.print(timeClient.getFormattedTime());
    } else {
        // Normale Anzeige
        float voltage = analogRead(A0_PIN) * (1.0 / 1023.0);
        voltage = constrain(voltage, V_MIN, V_MAX);
        float frequency = mapFloat(voltage, V_MIN, V_MAX, F_MIN, F_MAX);
 
        display.setCursor(10, 20);
        display.print("FREQ: ");
        display.print(frequency, 1);
        display.print(" MHz");
 
        // Skala
        display.setCursor(10, 40);
        display.print("-|---|---|---|--|-");
 
        // Zeigerposition berechnen
        int position = map(voltage * 100, V_MIN * 100, V_MAX * 100, 10, 110);
        display.fillTriangle(position - 1, 55, position + 1, 55, position, 50, SSD1306_WHITE);
 
        // Pfeilspitze
        display.drawLine(position, 49, position - 2, 52, SSD1306_WHITE);
        display.drawLine(position, 49, position + 2, 52, SSD1306_WHITE);
    }
 
    display.display();
    delay(200);
}
 
// Hilfsfunktion für Gleitkommazahlen
float mapFloat(float x, float in_min, float in_max, float out_min, float out_max) {
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
//ENDE
 
Auf ein Stereomöglichkeit wurde hier wegen der Kleinheit des Pappgehäuses verzichtet. Damit ergibt sich folgendes Schaltbild :
 

   
Günther Zöppel
Ostern 2025


Elektronik-Labor  Literatur  Projekte  Lernpakete  Kurzwelle