Sichere IoT-Puzzle-Box mit Arduino MKR Bundle bauen – Schritt-für-Schritt
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Arduino MKR IoT Bundle (enthält MKR1000, Sensoren, Aktoren, Breadboard, Kabel) | 1 |
| Karton (2 mm) oder 3D-Druck für Gehäuse | 1 |
Software & Dienste
- Arduino IDE (oder Web Editor)
- Blynk App (iOS/Android) – IoT-Dashboard für Kombinations-Einstellung
- Bibliotheken:
WiFi101.h,BlynkSimpleWiFiShield101.h,LiquidCrystal.h,Servo.h
Projektbeschreibung
Eine kleine „Puzzle-Box“, die sich nur öffnet, wenn drei Potentiometer auf eine per Blynk-App einstellbare Kombination (0–9) gedreht werden. Ein RGB-LED gibt Farb-Feedback (blau → aqua → gelb → rot = näher dran). Bei richtiger Kombination spielt ein Buzzer das Star-Wars-Thema und ein Servo öffnet den Deckel. Alles in einem Karton-Gehäuse.
Lernziele
- Einführung in Blynk (IoT-Dashboard, Virtual Pins)
- Ansteuerung eines LCD-Displays (16×2, paralleles Interface)
- Melodie mit Buzzer spielen (Star Wars)
- Servo als mechanischer Riegel
Blynk einrichten
- Blynk App installieren, Account erstellen, „New Project“ → Hardware: Arduino MKR1000, Connection: WiFi.
- Auth Token per E-Mail notieren.
- Drei Slider (V1, V2, V3) hinzufügen, Range 0–9 – das sind die drei Kombinations-Ziffern.
- In Arduino IDE: Blynk-Library installieren (Library Manager).
- WLAN-SSID & Passwort in
SECRET_SSID/SECRET_PSWDeintragen (oder im Sketch direkt).
Hardware-Verkabelung (aus MKR Bundle)
- LCD 16×2: RS=12, EN=11, D4=2, D5=3, D6=4, D7=5; Helligkeit über A3 (PWM, 0=max). 220 Ω an LED+.
- 3 Potentiometer: A0, A1, A2 (Mitte), Außen an 3,3 V & GND.
- RGB-LED (gemeinsame Anode): Rot=6, Grün=8, Blau=7 (PWM-Pins).
- Buzzer: Pin 1 (PWM).
- Servo: Pin 9 (Signal), 5 V & GND.
Code-Struktur (Schrittweise Aufbau)
Der Artikel baut den Sketch schrittweise auf: Blynk-Verbindung → LCD + Potis → RGB-Feedback → Buzzer-Melodie → Servo-Öffnung → Komplett-Sketch. Hier die finale Logik:
// Vollständiger Sketch (gekürzt – vollständiger Code auf GitHub/Original)
#include <LiquidCrystal.h>
#include <SPI.h>
#include <WiFi101.h>
#include <BlynkSimpleWiFiShield101.h>
#include <Servo.h>
const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
char auth[] = SECRET_TOKEN;
// Pins
int redPin = 6, greenPin = 8, bluePin = 7;
int buzzerPin = 1;
int servoPin = 9;
const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Servo myservo;
// Kombi aus Blynk (Default 1-1-1)
int SliderValueOne = 1, SliderValueTwo = 1, SliderValueThree = 1;
bool start = true; // Box noch zu?
BLYNK_WRITE(V1) { SliderValueOne = param.asInt(); }
BLYNK_WRITE(V2) { SliderValueTwo = param.asInt(); }
BLYNK_WRITE(V3) { SliderValueThree = param.asInt(); }
void setup() {
pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
myservo.attach(servoPin); myservo.write(0); // geschlossen
analogWrite(A3, 0); // LCD max Helligkeit
lcd.begin(16, 2);
Serial.begin(9600);
Blynk.begin(auth, ssid, password);
}
void loop() {
Blynk.run();
int p1 = map(analogRead(A0), 0, 1023, 0, 9);
int p2 = map(analogRead(A1), 0, 1023, 0, 9);
int p3 = map(analogRead(A2), 0, 1023, 0, 9);
lcd.setCursor(0,0); lcd.print(p1); lcd.setCursor(2,0); lcd.print(p2); lcd.setCursor(4,0); lcd.print(p3);
if (start) {
giveColorFeedback(p1, p2, p3);
if (p1 == SliderValueOne && p2 == SliderValueTwo && p3 == SliderValueThree) {
blinkGreenLed();
playStarWars();
openBox();
start = false;
}
} else {
// Box offen – zurücksetzen wenn alle Potis auf 0
if (p1 == 0 && p2 == 0 && p3 == 0) start = true;
}
}
void giveColorFeedback(int p1, int p2, int p3) {
int d1 = abs(p1 - SliderValueOne);
int d2 = abs(p2 - SliderValueTwo);
int d3 = abs(p3 - SliderValueThree);
if (d1 <= 1 && d2 <= 1 && d3 <= 1) setColor(255,0,0); // Rot
else if (d1 <= 3 && d2 <= 3 && d3 <= 3) setColor(255,255,0); // Gelb
else if (d1 <= 4 && d2 <= 4 && d3 <= 4) setColor(0,255,255); // Aqua
else setColor(0,0,255); // Blau
}
void blinkGreenLed() {
for(int a=0;a<2;a++) {
for(int b=0;b<=255;b+=5){ setColor(0,b,0); delay(5); }
for(int b=255;b>=0;b-=5){ setColor(0,b,0); delay(5); }
}
for(int b=0;b<=255;b+=5){ setColor(0,b,0); delay(5); }
}
void setColor(int r, int g, int b) {
analogWrite(redPin, r); analogWrite(greenPin, g); analogWrite(bluePin, b);
}
void playStarWars() {
// Frequenzen & Dauer wie im Originalartikel (beep-Funktion mit tone())
// Siehe Original für vollständige Notenfolge
}
void openBox() {
for(int pos=0; pos<=90; pos++) { myservo.write(pos); delay(15); }
}
void closeBox() {
for(int pos=90; pos>=0; pos--) { myservo.write(pos); delay(15); }
}
Gehäuse (CAD)
DXF-Datei für 2 mm Karton (Lasercutter): box_E5j7tnFdNC.dxf. Alternativ 3D-Druck.
Schaltplan
Hinweis
Das Tutorial könnte veraltet sein; aktuelle Version auf der Arduino-Projekt-Seite prüfen. Das MKR IoT Bundle enthält alle nötigen Bauteile. Nicht für echte Wertsachen geeignet – eher für Süßigkeiten & Spielspaß!
Herstellungsprozess
- SPICE Netlist-Syntax: Bauteilbenennung, passive & aktive Elemente, Quellen
- Integrierte Schaltkreise (ICs): Kompakte, leistungsstarke Chips, die moderne Elektronik antreiben
- TI SensorTag mit Blynk via Node-RED auf Raspberry Pi Zero integrieren
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Multi-Position Temperatursensor-System für Smart-Home-Integration
- DIY Arduino USB Gaming Controller – Bauen Sie Ihren eigenen High-Performance Gamepad
- MOSMusic: Musik-synchronisierte Lichtsteuerung mit CoolMOS MOSFET & Arduino
- Mikroelektronik: Die Wissenschaft winziger Elektronikbauteile
- Bohrmaschinen-Komponenten: Aufbau und Funktion im Detail
- Wesentliche Komponenten eines Verbrennungsmotors