Dit project beschrijft de creatie van een AM-zender op basis van de ESP32-S3 die internetradio-streams omzet in een amplitudegemoduleerd signaal. Het systeem kan twee onafhankelijke zenders beheren en maakt gebruik van duty-cycle modulatie om audio uit te zenden via een GPIO-pin naar een inductieve lusantenne.
Technische details:
- Hardware: Gebruik van een Waveshare ESP32-S3-Zero, een 220 ohm weerstand en een 3D-geprinte behuizing waarvan het deksel als antenne dient.
- Functionaliteiten: Inclusief een 6e-orde laagdoorlaatfilter, loudness-AGC, en een webinterface voor configuratie van stations en frequenties.
- Waarschuwingen: De auteur benadrukt dat uitzenden op deze frequenties vaak een licentie vereist en dat het ontbreken van een uitgangsfilter kan leiden tot harmonischen.
- Software: De firmware is GPL-3.0 gelicenseerd en kan worden geflasht via
esptool.
De repository bevat naast de broncode ook CAD-bestanden voor de behuizing en uitgebreide handleidingen voor zowel snelle installatie als volledige zelfbouw.
ESP32-S3 AM-Zender
Er is een projectpagina beschikbaar met een demonstratievideo.
Belangrijke waarschuwingen voor constructie
Voordat u begint met de bouw, dient u rekening te houden met de volgende twee niet-onderhandelbare feiten:
- Licenties voor uitzendbanden: Het apparaat zendt uit in een gelicentieerde uitzendband. De standaard draaggolf is 200 kHz, wat binnen de langgolfband valt (slechts 2 kHz verwijderd van BBC Radio 4 op 198 kHz). Opzettelijke uitstraling op deze frequenties is in het Verenigd Koninkrijk en de meeste andere landen vergund, en dit project beschikt niet over zo'n licentie. Het is ontworpen om te worden opgevangen door een ontvanger op dezelfde tafel (een inductieve lus naast de radio, niet een externe antenne). U dient zelf de lokale regels en voorschriften met betrekking tot uitstraling te controleren.
- Harmonischen: Er is in deze bouw geen uitgangsfilter aanwezig. De draaggolf is een blokgolf, waardoor er oneven harmonischen worden uitgestraald op 600 kHz, 1 MHz en hoger, over de gehele middengolfband. Bij het huidige vermogen, met de lus direct naast de ontvanger, werd dit op basis van gehoor als acceptabel beschouwd. Dit is nooit gemeten met een spectrumanalyser. Het verhogen van de aansturing, het verlengen van de antenne of het weglaten van de serieweerstand zal de harmonischen versterken. De technische handleiding beschrijft een laagdoorlaatnetwerk dat kan worden toegevoegd indien gewenst.
Bedrading
Per zender is de bedrading als volgt:
- Eén GPIO-pin.
- Een weerstand van 220 ohm.
- Een lus van vijf windingen gewonden rond de pilaren van het deksel, terug naar de massa (ground).
De twee ketens delen de massa, maar verder geen enkel onderdeel.
Functionaliteiten
Zenders en Modulatie
- Twee zenders: Ondersteuning voor separate stations, draaggolffrequenties, modulatiediepte, audio laagdoorlaatfilter, gain, draaggolfniveau en een startstation bij inschakeling. Ze delen één wifi-verbinding en één stationlijst.
- Echte AM: Duty-cycle modulatie, gelineariseerd via een arcsinus-tabel, omdat een eenvoudiger schema nauwelijks moduleert.
- Audioverwerking: Een 6e-orde laagdoorlaatfilter, een fractionele resampler met een fill-controller, een peak-limiter en een loudness-AGC die verschillende stations binnen ongeveer 2 dB van elkaar brengt.
- Effecten: Mogelijkheid tot aanpassing van het draaggolfniveau en 'fading', om het effect van een verafgelegen station na te bootsen.
Bediening en Behuizing
- Webinterface: Voor alle instellingen, waaronder stations, directory-zoekopdrachten, instellingen voor beide zenders, een testtoon, wifi en diagnostiek.
- Seriële console: Kan alles uitvoeren wat de webpagina ook kan, zodat het board via USB bereikbaar blijft als de netwerkverbinding is verbroken.
- Behuizing: Een geprinte behuizing waarbij het deksel beide luswindingen op vier pilaren draagt.
Snelstart: een board flashen
Benodigdheden
- Een Waveshare ESP32-S3-Zero (of een andere ESP32-S3).
- Een USB-C datakabel.
- Python.
Instructies
Installeer eerst esptool:
pip install esptool
Flash de firmware (vervang COM5 door uw eigen poort, zoals /dev/ttyACM0 op andere systemen):
python -m esptool --chip esp32s3 -p COM5 write_flash 0x0 binaries/amtx-v1.0-merged.bin
Gebruik de eigen USB-C poort van het board in plaats van een aparte seriële adapter.
Sluit het board vervolgens aan op de stroom, maak verbinding met het wifi-netwerk AMTX-Setup dat door het board wordt aangemaakt, en volg de instructies op de pagina die opent.
Voor een gedetailleerdere handleiding zie docs/manuals/quick_start.pdf. Hierin worden alle stappen uitgelegd, inclusief de installatie van Python, het gebruik van de juiste USB-poort, het gebruik van de flashing-tool in tools/esp-flasher, het controleren van de firmware via de amtx> console (door help te typen) en de methoden om het board op uw netwerk te plaatsen. Er is geen compiler nodig.
Zelf bouwen
Voor een complete handleiding van begin tot eind, inclusief onderdelen, printen, heat-set inserts, het wikkelen van de antenne, bedrading, assemblage, flashen, eerste opstart en probleemoplossing, raadpleeg docs/manuals/build_manual.pdf.
Documentatie-overzicht
| Handleiding | Doel |
| Quick Start | Een zender in de lucht krijgen via een release-zip, zonder toolchain. |
| Build | Het bouwen van het apparaat vanuit losse onderdelen. |
| Installation | Toolchain, het compileren van firmware vanuit broncode en flashen. |
| User | Bediening van het apparaat zodra het werkt. |
| Technical | Technische uitleg over de werking van de firmware voor aanpassingen. |
Projectstructuur
firmware/: ESP-IDF v5.3 project; de volledige zender.
tools/: Desktop-tools (Python + tkinter):
esp-serial-monitor: Seriële console met gesplitste systeem- en CLI-vensters.
esp-flasher: Tool om een board te vinden, analyseren, flashen en monitoren.
amtx-programmer: De flasher met een extra tabblad voor de configuratie van het board.
case/: De geprinte behuizing (STEP-bestanden voor bewerking, STL voor printen).
binaries/: Flashbare builds, zowel samengevoegd als als afzonderlijke images.
docs/: Handleidingen in PDF- en Markdown-formaat.
Teststatus (versie 1.0)
Dit project maakt een duidelijk onderscheid tussen "gebouwd" en "bewezen".
Getest op hardware:
- Het systeem draait op hardware. Twee stations kunnen gelijktijdig spelen en worden opgevangen door een AM-ontvanger. Beide decoders behouden de volledige snelheid zonder dat de modulator tekortschiet.
- De webinterface, de console, het wisselen van stations, wifi-verbindingen en de diagnostiek zijn allen getest op een echt board.
Geprint en geassembleerd:
- De behuizing is meerdere keren geprint en gebouwd. De huidige revisie corrigeert fouten uit de vorige print; deze specifieke revisie is echter zelf nog niet geprint (hoewel er geen support nodig is).
Niet gemeten:
- Er is geen meting gedaan met een spectrumanalyser of oscilloscoop. De harmonische inhoud, de uitgestraalde veldsterkte en de modulatiediepte zijn onbekend.
Niet getest op hardware:
- De factory-reset actie (de BOOT-knop vijf seconden ingedrukt houden). De code is gebouwd en de andere twee routes naar deze functie zijn duidelijk, maar de fysieke knop is nog niet ingedrukt.
Licentie
Dit project valt onder de GPL-3.0. Zie het bestand LICENSE.
- De MP3-decoder (
libhelix) wordt via de ESP-component registry opgehaald en heeft een eigen licentie.
- De afmetingen van het board zijn gebaseerd op de gepubliceerde tekeningen van Waveshare voor de ESP32-S3-Zero.
Over deze repository
Dit is een publieke spiegel van een werkende repository waarin het volledige engineering-verslag wordt bijgehouden: ontwerpdocumenten, registers van bekende problemen en lessen, de parametrische CAD-bron voor de behuizing en de argumentatie achter elke beslissing. Wat hier gepubliceerd is, is het eindproduct: broncode, tools, handleidingen, geometrie en een binary.
Issues en pull requests zijn welkom, hoewel de ontwikkeling elders plaatsvindt en via releases naar deze repository wordt gepusht.
ESP32-S3 AM-Zender
Er is een projectpagina beschikbaar met een demonstratievideo.
Belangrijke waarschuwingen voor constructie
Voordat u begint met de bouw, dient u rekening te houden met de volgende twee niet-onderhandelbare feiten:
- Licenties voor uitzendbanden: Het apparaat zendt uit in een gelicentieerde uitzendband. De standaard draaggolf is 200 kHz, wat binnen de langgolfband valt (slechts 2 kHz verwijderd van BBC Radio 4 op 198 kHz). Opzettelijke uitstraling op deze frequenties is in het Verenigd Koninkrijk en de meeste andere landen vergund, en dit project beschikt niet over zo'n licentie. Het is ontworpen om te worden opgevangen door een ontvanger op dezelfde tafel (een inductieve lus naast de radio, niet een externe antenne). U dient zelf de lokale regels en voorschriften met betrekking tot uitstraling te controleren.
- Harmonischen: Er is in deze bouw geen uitgangsfilter aanwezig. De draaggolf is een blokgolf, waardoor er oneven harmonischen worden uitgestraald op 600 kHz, 1 MHz en hoger, over de gehele middengolfband. Bij het huidige vermogen, met de lus direct naast de ontvanger, werd dit op basis van gehoor als acceptabel beschouwd. Dit is nooit gemeten met een spectrumanalyser. Het verhogen van de aansturing, het verlengen van de antenne of het weglaten van de serieweerstand zal de harmonischen versterken. De technische handleiding beschrijft een laagdoorlaatnetwerk dat kan worden toegevoegd indien gewenst.
Bedrading
Per zender is de bedrading als volgt:
- Eén GPIO-pin.
- Een weerstand van 220 ohm.
- Een lus van vijf windingen gewonden rond de pilaren van het deksel, terug naar de massa (ground).
De twee ketens delen de massa, maar verder geen enkel onderdeel.
Functionaliteiten
Zenders en Modulatie
- Twee zenders: Ondersteuning voor separate stations, draaggolffrequenties, modulatiediepte, audio laagdoorlaatfilter, gain, draaggolfniveau en een startstation bij inschakeling. Ze delen één wifi-verbinding en één stationlijst.
- Echte AM: Duty-cycle modulatie, gelineariseerd via een arcsinus-tabel, omdat een eenvoudiger schema nauwelijks moduleert.
- Audioverwerking: Een 6e-orde laagdoorlaatfilter, een fractionele resampler met een fill-controller, een peak-limiter en een loudness-AGC die verschillende stations binnen ongeveer 2 dB van elkaar brengt.
- Effecten: Mogelijkheid tot aanpassing van het draaggolfniveau en 'fading', om het effect van een verafgelegen station na te bootsen.
Bediening en Behuizing
- Webinterface: Voor alle instellingen, waaronder stations, directory-zoekopdrachten, instellingen voor beide zenders, een testtoon, wifi en diagnostiek.
- Seriële console: Kan alles uitvoeren wat de webpagina ook kan, zodat het board via USB bereikbaar blijft als de netwerkverbinding is verbroken.
- Behuizing: Een geprinte behuizing waarbij het deksel beide luswindingen op vier pilaren draagt.
Snelstart: een board flashen
Benodigdheden
- Een Waveshare ESP32-S3-Zero (of een andere ESP32-S3).
- Een USB-C datakabel.
- Python.
Instructies
Installeer eerst esptool:
pip install esptool
Flash de firmware (vervang COM5 door uw eigen poort, zoals /dev/ttyACM0 op andere systemen):
python -m esptool --chip esp32s3 -p COM5 write_flash 0x0 binaries/amtx-v1.0-merged.bin
Gebruik de eigen USB-C poort van het board in plaats van een aparte seriële adapter.
Sluit het board vervolgens aan op de stroom, maak verbinding met het wifi-netwerk AMTX-Setup dat door het board wordt aangemaakt, en volg de instructies op de pagina die opent.
Voor een gedetailleerdere handleiding zie docs/manuals/quick_start.pdf. Hierin worden alle stappen uitgelegd, inclusief de installatie van Python, het gebruik van de juiste USB-poort, het gebruik van de flashing-tool in tools/esp-flasher, het controleren van de firmware via de amtx> console (door help te typen) en de methoden om het board op uw netwerk te plaatsen. Er is geen compiler nodig.
Zelf bouwen
Voor een complete handleiding van begin tot eind, inclusief onderdelen, printen, heat-set inserts, het wikkelen van de antenne, bedrading, assemblage, flashen, eerste opstart en probleemoplossing, raadpleeg docs/manuals/build_manual.pdf.
Documentatie-overzicht
| Handleiding | Doel |
| Quick Start | Een zender in de lucht krijgen via een release-zip, zonder toolchain. |
| Build | Het bouwen van het apparaat vanuit losse onderdelen. |
| Installation | Toolchain, het compileren van firmware vanuit broncode en flashen. |
| User | Bediening van het apparaat zodra het werkt. |
| Technical | Technische uitleg over de werking van de firmware voor aanpassingen. |
Projectstructuur
firmware/: ESP-IDF v5.3 project; de volledige zender.
tools/: Desktop-tools (Python + tkinter):
esp-serial-monitor: Seriële console met gesplitste systeem- en CLI-vensters.
esp-flasher: Tool om een board te vinden, analyseren, flashen en monitoren.
amtx-programmer: De flasher met een extra tabblad voor de configuratie van het board.
case/: De geprinte behuizing (STEP-bestanden voor bewerking, STL voor printen).
binaries/: Flashbare builds, zowel samengevoegd als als afzonderlijke images.
docs/: Handleidingen in PDF- en Markdown-formaat.
Teststatus (versie 1.0)
Dit project maakt een duidelijk onderscheid tussen "gebouwd" en "bewezen".
Getest op hardware:
- Het systeem draait op hardware. Twee stations kunnen gelijktijdig spelen en worden opgevangen door een AM-ontvanger. Beide decoders behouden de volledige snelheid zonder dat de modulator tekortschiet.
- De webinterface, de console, het wisselen van stations, wifi-verbindingen en de diagnostiek zijn allen getest op een echt board.
Geprint en geassembleerd:
- De behuizing is meerdere keren geprint en gebouwd. De huidige revisie corrigeert fouten uit de vorige print; deze specifieke revisie is echter zelf nog niet geprint (hoewel er geen support nodig is).
Niet gemeten:
- Er is geen meting gedaan met een spectrumanalyser of oscilloscoop. De harmonische inhoud, de uitgestraalde veldsterkte en de modulatiediepte zijn onbekend.
Niet getest op hardware:
- De factory-reset actie (de BOOT-knop vijf seconden ingedrukt houden). De code is gebouwd en de andere twee routes naar deze functie zijn duidelijk, maar de fysieke knop is nog niet ingedrukt.
Licentie
Dit project valt onder de GPL-3.0. Zie het bestand LICENSE.
- De MP3-decoder (
libhelix) wordt via de ESP-component registry opgehaald en heeft een eigen licentie.
- De afmetingen van het board zijn gebaseerd op de gepubliceerde tekeningen van Waveshare voor de ESP32-S3-Zero.
Over deze repository
Dit is een publieke spiegel van een werkende repository waarin het volledige engineering-verslag wordt bijgehouden: ontwerpdocumenten, registers van bekende problemen en lessen, de parametrische CAD-bron voor de behuizing en de argumentatie achter elke beslissing. Wat hier gepubliceerd is, is het eindproduct: broncode, tools, handleidingen, geometrie en een binary.
Issues en pull requests zijn welkom, hoewel de ontwikkeling elders plaatsvindt en via releases naar deze repository wordt gepusht.