Intelligentes Bushaltestellen-Modell mit automatischem Sonnenschutz
Komponenten
| Arduino Nano R3 (klein, gut zu verstecken) | 1 |
| Servo MG995 (stark, für schweres Sonnendach) | 1 |
| Fotowiderstand (LDR) – einer nach Osten, einer nach Westen | 2 |
| Regensensor | 1 |
| Hochleistungs-LED weiß | 6 |
| Widerstand 220 Ω | 3 |
| Steckplatine | 1 |
| Jumper-Kabel (M/M) | 27 |
| Schraubklemmen | 2 |
| 9-V-Block-Batterieclip + 9-V-Block | 2 / 1 |
| 4×AA-Batteriehalter (für Servo-Strom) | 1 |
Projektbeschreibung
Upgrade der Version 1.0. Hauptänderungen:
- Modellgröße: 1,5 m × 1 m
- Schwereres Sonnendach → SG99 Mikroservo durch MG995 ersetzt
- Externe Stromversorgung für MG995 (4×AA)
- Zwei Mechaniken getestet: eine verworfen (Video 2), finale Version (Video 3)
- Code auf VarSpeedServo Library umgestellt (sanftere Bewegung)
- Kleiner Logikfehler in einem Sonnendach-Zustand behoben (Danke an Gurneet1928)
V1.0: Model Version 1.0
Code
#include <VarSpeedServo.h>
VarSpeedServo servo;
int easternLight = 0, westernLight = 0, rainSensed = 0, sunshadePosition = 0;
int rainThreshold = 512;
int sunshadeExpanded = 120; // Grad
int sunshadeContracted = 60; // Grad
int ambientLighting = 0;
int turnOnLightsOn = 150; // Schwelle für Beleuchtung
int ledIntensity = 0, ledPower = 0;
int servoSpeed = 20; // Geschwindigkeit (VarSpeedServo)
bool debugging = false; // true = Serial Debug
void setup() {
pinMode(A4, OUTPUT); // Innenbeleuchtung Bushaltestelle
pinMode(A5, OUTPUT); // Straßenlaterne
pinMode(A1, INPUT); // West-LDR
pinMode(A2, INPUT); // Ost-LDR
pinMode(A3, INPUT); // Regensensor analog
pinMode(2, INPUT); // Regensensor digital
servo.attach(A0);
servo.write(sunshadeContracted, servoSpeed, true); // Start: eingefahren
if (debugging) { Serial.begin(9600); Serial.println("*** DEBUGGING STARTED ***"); }
}
void oya_mydebug(String text, int value = -1) {
if (debugging) {
Serial.print(text);
if (value >= 0) { Serial.print(" = "); Serial.println(value); }
else Serial.println();
}
}
void expand_collapse(int easternLight, int westernLight) {
if (easternLight <= westernLight) { // Sonnenaufgang: Osten heller
oya_mydebug("Sunrise");
if (sunshadePosition != sunshadeExpanded) {
servo.write(sunshadeExpanded, servoSpeed, true);
oya_mydebug("Sunshade expanded");
}
}
if (easternLight > westernLight) { // Sonnenuntergang: Westen heller
oya_mydebug("Sunset");
if (sunshadePosition != sunshadeContracted) {
servo.write(sunshadeContracted, servoSpeed, true);
oya_mydebug("Sunshade contracted");
}
}
}
void loop() {
easternLight = analogRead(A2);
westernLight = analogRead(A1);
rainSensed = analogRead(A3);
sunshadePosition = servo.read();
ambientLighting = (easternLight + westernLight) / 2; // Mittelwert
oya_mydebug("easternLight", easternLight);
oya_mydebug("westernLight", westernLight);
oya_mydebug("rainSensed", rainSensed);
oya_mydebug("sunshadePosition", sunshadePosition);
oya_mydebug("ambientLighting", ambientLighting);
if (rainSensed < rainThreshold) { // Regnet es? (analog: niedriger = nass)
oya_mydebug("It's raining...");
if (sunshadePosition != sunshadeExpanded) {
servo.write(sunshadeExpanded, servoSpeed, true);
oya_mydebug("Sunshade expanded");
}
} else {
oya_mydebug("Not raining...");
if (ambientLighting <= turnOnLightsOn) { // Dämmerung/Nacht
oya_mydebug("Dark, lights ON");
ledPower = (turnOnLightsOn - ambientLighting) * 4;
oya_mydebug("ledPower", ledPower);
analogWrite(A5, ledPower); // Straßenlaterne
analogWrite(A4, ledPower); // Innenbeleuchtung
expand_collapse(easternLight, westernLight);
} else { // Tag, hell
oya_mydebug("Bright, lights OFF");
analogWrite(A5, 0); analogWrite(A4, 0);
expand_collapse(easternLight, westernLight);
}
}
if (debugging) { Serial.println("********************"); delay(5000); }
else delay(100);
}
Schaltplan

Herstellungsprozess
- Lionel Modelleisenbahnen: Geschichte, Fertigung und Zukunft
- Recycling-Sortierroboter mit Google Coral Edge TPU
- Wiederkehrenden Umsatz mit smarten Verbrauchsmaterialien maximieren: Game-Changer für Maschinenbauer
- DIY Automatische Modellbahn-Steuerung mit Arduino – Einfach & Flexibel
- Servogesteuerter Hindernisvermeidungs-Roboter: Bauen mit Arduino & HC-SR04
- SPRINT 20 Linear-Drehmaschine: Schnelles, automatisiertes Drehen für hochpräzise Teile
- Servopressen: Funktionsprinzip, Bauarten & Vorteile gegenüber Hydraulik/Exzenter
- Servomotoren: Funktionsweise und Bedeutung
- Präzision maximieren: Getriebe mit Servomotoren optimal kombinieren
- ECS G86 Bohrzyklus mit Spindelhalt-Funktion