Dankeschild für höfliche Autofahrer – LED-Matrix im Heckfenster
Komponenten & Zubehör
| Bauteil | Menge |
|---|---|
| Arduino MKR1000 (oder MKR WiFi 1010) | 1 |
| Bluetooth-Modul (BlueSMiRF Silver) | 1 |
| Logic Level Converter 4-Kanal (BSS138) | 1 |
| Adafruit DotStar Matrix 8×32 (256 RGB LEDs) | 1 |
| JST SM 4-pol Kabelset | 1 |
| DC 2,1 mm Hohlstecker | 1 |
| Netzteil 5 V / 4 A | 1 |
| Pinheader 4-pol | 1 |
| Steckbrett | 1 |
| Projektgehäuse | 1 |
| Baltic Birch Sperrholz 6 mm × 114 mm × 380 mm | 1 |
| Doppelseitiges Klebeband 25 mm × 15 m | 1 |
Werkzeuge
- Lötkolben
- Heißklebepistole
- Forstner-Bohrer
- Bohrmaschine
- Schleifpapier (120er)
Software & Dienste
- Arduino IDE
- Virtual Shield for Arduino (Windows)
- Adafruit DotStar Bibliothek
Projektidee
Seit ich Auto fahre, wollte ich mich verständlicher mit anderen Verkehrsteilnehmern austauschen können – über Lichthupe, Handzeichen oder Hupen hinaus. Inspiriert von einem James-Bond-Film (Text im Heckfenster) entstand dieses Projekt: Eine LED-Matrix im Heckfenster zeigt per Smartphone-App wählbare Botschaften wie „Danke“, „Bitte“, „Links“, „Rechts“, „Abstand“, „Notruf“.
Hardware-Aufbau
- MKR1000 zum Laufen bringen: Da es sich um ein Pre-Release-Board handelte, war die Einrichtung aufwendig (Hourly-Build der IDE, Board-Manager, diverse Libraries). Heute ist der Prozess standardisiert.
- Spannungspegel: Der MKR1000 arbeitet mit 3,3 V. Die DotStar-Matrix und das Bluetooth-Modul benötigen 5 V Logik – daher der 4-Kanal-Level-Shifter.
- Komponenten testen: Zuerst Matrix (SPI: SDA/SCL → Pin 11/12), dann Bluetooth (TX/RX an Pin 14/13) mit Virtual Shield.
- Gehäuse bauen: Sperrholzplatte als Front, Box für Elektronik, Forstner-Bohrungen für Kabeldurchführungen, 24 h unter Druck kleben.
- Stromversorgung: 5 V / 4 A Netzteil für Matrix (Spitzen bis 7,5 A bei Vollausleuchtung, im Betrieb weit weniger), separates USB-Netzteil für MKR1000.
- Befestigung: Saugnäpfe & Spanngurte für Heckscheibe (Optimierungspotenzial).
Software-Architektur
Die Firmware nutzt:
Adafruit_DotStarMatrixfür Scrolltext auf der MatrixVirtualShield+Graphics+Recognitionfür Smartphone-App (Buttons, Spracherkennung)ArduinoJsonfür Datenaustausch
Wichtige Code-Abschnitte:
// Matrix initialisieren
Adafruit_DotStarMatrix matrix(32, 8, DATAPIN, CLOCKPIN,
DS_MATRIX_TOP + DS_MATRIX_LEFT + DS_MATRIX_COLUMNS + DS_MATRIX_ZIGZAG,
DOTSTAR_GBR);
// Farben
uint16_t colors[] = { matrix.Color(255,0,0), matrix.Color(0,255,0), matrix.Color(0,0,255),
matrix.Color(255,0,255), matrix.Color(255,0,106), matrix.Color(255,255,255) };
// Virtual Shield
VirtualShield shield;
Graphics screen = Graphics(shield);
Recognition speech = Recognition(shield);
// Buttons im refresh()-Callback anlegen
void refresh(ShieldEvent* e) {
screen.clear(ARGB(123,86,204));
thanksId = screen.addButton(10, 50, ". Thank you .");
welcomeId = screen.addButton(10, 100, ". Welcome .");
turnLeftId = screen.addButton(10, 150, ". Left .");
stoppingId = screen.addButton(175, 50, ". Stopping .");
startingId = screen.addButton(175, 100,". Starting .");
turnRightId = screen.addButton(175, 150,". Right .");
backoffId = screen.addButton(10, 225, ". Back Off .");
calling911Id= screen.addButton(10, 290, ". Calling 911 .");
}
// Button-Events verarbeiten
void screenEvent(ShieldEvent* e) {
if(screen.isPressed(thanksId)) DisplayText("Thank You", 5, 100);
if(screen.isPressed(welcomeId)) DisplayText("You're welcome", 2, 100);
if(screen.isPressed(backoffId)) DisplayText("Please back off", 4, 100);
if(screen.isPressed(stoppingId)) DisplayText("...stopping...", 0, 100);
if(screen.isPressed(startingId)) DisplayText("...starting...", 1, 100);
if(screen.isPressed(turnLeftId)) DisplayText("Turning LEFT", 3, 100);
if(screen.isPressed(turnRightId)) DisplayText("Turning RIGHT", 3, 100);
if(screen.isPressed(calling911Id))DisplayText("Calling 911", 0, 100);
}
// Scrolltext auf Matrix
void DisplayText(String msg, int colorIdx, int delayMs) {
int x = matrix.width();
int maxX = -(msg.length() * 6);
matrix.setTextColor(colors[colorIdx]);
while(x > maxX) {
matrix.fillScreen(0);
matrix.setCursor(x, 0);
matrix.print(msg);
x--;
matrix.show();
delay(delayMs);
}
}
Quellcode
Gesamtes Projekt auf GitHub: mkr1000_challenge
Schaltplan
Verkabelung: MKR1000 → Level-Shifter → Bluetooth (TX/RX) & DotStar (SPI). Netzteil 5 V an Matrix & Level-Shifter, MKR1000 per USB.
Herstellungsprozess
- UnifiedWater v1 – Komplettes Arduino Wasserqualitäts-Sensorkit
- Portables Abstimmungssystem mit GSM-Anbindung (Mobile Vote Box)
- Smart Matchmaking-Sonnenbrillen mit Arduino 101 und tinyTILE BLE
- DIY Whac-A-Mole Arcade-Spiel (Tasten-Edition) – Arduino Mega Projekt
- Modern Jukebox: Raspberry Pi & Arduino LED-Musikplayer im Retro-Look
- DIY Arduino Smartwatch: Eigene Apple-Watch-Alternative bauen
- DIY Allband-Arduino-Radio mit Si4730 (LW, MW, KW, FM) – Günstiger Nachbau
- Umfassender Leitfaden zu PCB-Oberflächenveredelungen: Typen, Anwendungen, Best Practices
- EDM-Funkenerosion erklärt: Technologie, Methoden und Anwendungen
- Umfassender Leitfaden zu Flanschlagern: Typen, Eigenschaften & Anwendungen