Slimme Garage Parkeerassistent met RGB LED Feedback
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Nano R3 | 1 |
| Ultrasone Sensor - HC-SR04 (Generiek) | 1 |
| Condensator 1000 µF | 1 |
| 1N4148 – Algemene Doel Snelle Schakel Diode | 1 |
| Doorboor Weerstand, 470 ohm | 1 |
| WS2812B LED-strip 1M IP30 5VDC | 1 |
Benodigde tools en machines
- 3D-printer (standaard)
- Soldeerbout (standaard)
Over dit project
Dit is een garage-parkeersensor die adresbare RGB LED's gebruikt om feedback te geven aan de bestuurder van het voertuig tijdens het benaderen en uiteindelijk bereiken van de stop-(parkeer)positie. Zie video in actie:
Ik heb dit ontworpen rond enkele acrylaat 1/2" diameter halve ronde materialen die ik ter hand had (geknipt tot 20-7/16" lang) om als lens te dienen die ook de dove-tail-segmenten bijeenhoudt. Dit is gemakkelijk online te kopen voor ongeveer $0,66 per voet, maar ik heb ook een model van een lens opgenomen dat in segmenten geprint kan worden met transparant filament.
STAP 1
Bereid de LED-strip voor (WS2812b LED-strip individueel adresbare RGB Smart Pixel 30 LEDs 1 meter lange strip). Knip de strip in twee (2) 15 LED segmenten en soldeer aansluitdraden aan het begin van elke strip. Pijlen op de strip wijzen 'WEG' van waar de aansluitdraden nodig zijn.
STAP 2
Monteer alle railssecties (één Buitenrail, en twee Binnenrail-segmenten per kant) met de behuizing in het midden.
STAP 3
Voer de aansluitdraden van de LED-strips in de behuizing aan elke kant en plak ze met de achterplakband. Let op: LED-strips stoppen ongeveer 1/2" van elk buitenraileinde.
STAP 4
Schuif de lens in elk uiteinde helemaal in de behuizing om alle dove-tails op slot te zetten. Als je een geprint lens gebruikt, zijn er 4 per kant nodig. Ze zijn bedoeld om de dove-tail-gebieden te overbruggen.
STAP 5
Monteer de montage met eindkapjes op een montageschijf (ik gebruikte 1/2" MDF geknipt tot 2" breed bij 45-1/8" lang). Bevestig de montage met kleine cilinderkop- of platte-kopschroeven (let op: geen ronde kop gebruiken, anders past de USB-kabel later niet in de sleuf als herprogrammering nodig is.)
STAP 6
Bedraad de elektronica. Let op de locatie van de condensator. De condensator is nodig om spanningstoppen van de voeding te voorkomen. Een weerstand wordt gebruikt op de signaaldraad (pin 7) voor de LEDs, en een diode wordt gebruikt op de Arduino (V+) om terugvoeding van spanning te voorkomen voor het geval de USB wordt ingevoegd zonder dat de voeding aanstaat. Zonder de diode zou de Arduino proberen spanning te leveren aan de LEDs, wat overmatige stroom door de on-board spanningsregelaar veroorzaakt. Diode en weerstand worden in serie met de bedrading gesoldeerd en met krimpkous afgedekt. De behuizing moet van buiten bij de onderkant onder de Arduino geboord worden om draden van de voeding door te voeren. Ik heb dit niet in het model ontworpen, omdat de afhankelijk is van het type draad dat gebruikt wordt. Ik raad 18/2 draad aan. Ik gebruikde beldraad en plaatste een connector net buiten de behuizing.

STAP 7
Gebruik 2,5mm schroef om de Arduino vast te zetten, en voltooi de bedradingsverbindingen naar de Arduino. De houdereinden steken in de vierkante gaten in de behuizing. Ik verwijderde de uiterste pinnen op de Arduino (ongebruikt) om de installatie te vergemakkelijken.

STAP 8
Gebruik 2,5mm schroeven om de ultrasone detector (HC-SR04) aan de deksel te bevestigen met houdereind. Voltooi het solderen van verbindingen naar de sensor. LET OP: Zorg dat de draden naar het midden van de sensor wijzen zodat ze niet interfereren met de zijwand bij montage.

STAP 9
Monteer deksel op behuizing met 3mm schroeven.
STAP 10
Programmeer Arduino met de onderstaande code. Werk je IDE-bibliotheken bij met 'FastLED' en 'QuickStats' vóór het compileren van je programma. Let op: Pas parameters aan voor 'startdistance' (punt dat sensor voertuig eerst detecteert bij benadering) en 'stopdistance' (eindelijke parkeerpositie van voertuig). Sensorbereik is 3 cm tot 400 centimeter, dus start- en stopparameters moeten binnen deze grenzen liggen.
STAP 11
Op de garagepoortopener, installeer een lampfassing-adapter met ingebouwde stopcontact. Plug je 5VDC voeding in deze lijn, en voer naar de lichtbalk-eenheid. De lichtbalk zal alleen aanstaan vanaf het moment dat de deur opent totdat het deurlicht uitgaat. Dit voorkomt dat de lichtbalk altijd aanstaat.
Code
- Arduino Code
Arduino Code Arduino
/*
* Garage Parkeersensor - Gepubliceerd door Bob Torrence
*/
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats; // initialiseer een instantie van deze klasse
// Pinnen definiëren
#define LED_PIN 7
#define NUM_LEDS 15
const int trigPin = 9;
const int echoPin = 10;
// Variabelen definiëren
CRGB leds[NUM_LEDS];
float duration;
float durationarray[15];
int distance;
int stopdistance = 115; // parkeerpositie vanaf sensor (CENTIMETERS)
int startdistance = 400; // afstand vanaf sensor om scan te starten als auto binnenrijdt (CENTIMETERS)
int increment = ((startdistance - stopdistance) / 15);
void setup() {
pinMode(trigPin, OUTPUT); // Zet trigPin als output
pinMode(echoPin, INPUT); // Zet echoPin als input
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
Serial.begin(9600); // Start seriële communicatie
}
void loop() {
for (int i = 0; i <= 14; i++) {
// Wis de trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Zet trigPin op HIGH voor 10 microseconden
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lees echoPin, geeft geluidsgolf reistijd in microseconden terug
durationarray[i] = pulseIn(echoPin, HIGH);
distance = durationarray[i] * 0.034 / 2;
Serial.print(distance);
Serial.print(" ");
}
duration = (stats.median(durationarray, 15)); // Bereken de afstand
distance = duration * 0.034 / 2;
// Print afstand op Seriële Monitor
Serial.print("Afstand: ");
Serial.println(distance);
if (distance < stopdistance) {
for (int i = 0; i <= 14; i++) {
leds[i] = CRGB(255, 0, 0); // Rood: stop
}
FastLED.show();
} else if (distance < stopdistance + increment) {
for (int i = 1; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 0; i++) leds[i] = CRGB(255, 255, 0); // Geel: 1 LED
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 2) {
for (int i = 2; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 1; i++) leds[i] = CRGB(255, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 3) {
for (int i = 3; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 2; i++) leds[i] = CRGB(255, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 4) {
for (int i = 4; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 3; i++) leds[i] = CRGB(0, 255, 0); // Groen: 4 LEDs
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 5) {
for (int i = 5; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 4; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 6) {
for (int i = 6; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 5; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 7) {
for (int i = 7; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 6; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 8) {
for (int i = 8; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 7; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 9) {
for (int i = 9; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 8; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 10) {
for (int i = 10; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 9; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 11) {
for (int i = 11; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 10; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 12) {
for (int i = 12; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 11; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 13) {
for (int i = 13; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 12; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance < stopdistance + increment * 14) {
for (int i = 14; i <= 14; i++) leds[i] = CRGB(0, 0, 0);
for (int i = 0; i <= 13; i++) leds[i] = CRGB(0, 255, 0);
FastLED.show(); delay(50);
} else if (distance >= stopdistance + increment * 14) {
for (int i = 0; i <= 14; i++) leds[i] = CRGB(0, 255, 0); // Alles groen: veilige afstand
FastLED.show(); delay(50);
}
}
Aangepaste onderdelen en behuizingen
3D-printbestanden voor de behuizing en lens zijn beschikbaar in de projectrepository.
Schema's
Bijgewerkt 21-4-19 om dioderichting te corrigeren.

Productieproces
- TinyML Taaldetector met Edge Impulse op Arduino Nano 33 BLE Sense
- Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
- ATtiny85 Mini Arcade: Snake – Bouw een Handheld OLED Game Console
- Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
- Een audio-reactieve bureaulamp bouwen met Arduino Nano
- Personal Healthcare Assistant (PHA) – Slimme IoT-oplossing voor gezondheidszorg
- Koper Elektrolyseren Project: Bouw een Slim Systeem met Arduino UNO
- NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
- Indrukwekkende Lichtsequenties Maken met Arduino en Shift Register