Slimme AC-verlichting met Arduino UNO en Relais – Automatische besturing
Onderdelen en benodigdheden
| Arduino UNO | × | 1 |
| Energiespaarlamp (met fitting en stekker) | × | 1 |
| 5V DC Adapter | × | 1 |
| Jumper wires | × | 1 set |
| Relaismodule (1 kanaal) | × | 1 |
| UTSOURCE Elektronische onderdelen | × | 1 |
Benodigde tools en machines
- Kruiskopschroevendraaier (voor relaismodule)
Apps en online diensten
- Microsoft Visual Studio 2015 (gratis Community-editie) of Arduino IDE
Over dit project
Slimme huislampen
In dit project leer je hoe je een relais combineert met een ultrasone sensor en Arduino om je huislampen (of elk apparaat) slim te maken.
Doel: Een energiespaarlamp die uigaat als je de kamer verlaat en aan gaat als je weer binnenkomt. Eenvoudig te implementeren en snel klaar.
Vereiste kennis: Basiskennis Arduino. Als je er al mee hebt gewerkt, kan je direct starten.
⚠ WAARSCHUWING: Dit project gebruikt hoogspanning (AC-netspanning). Ben je jonger dan 16 of onervaren? Laat de AC-deel dan door een ervaren persoon doen. Je kunt het concept ook veilig bewijzen met DC-apparaten op lage spanning. Waarschuwingen worden duidelijk aangegeven wanneer het gevaarlijk wordt.
Componenten overzicht











Ultrasone sensor voorbereiden
Eerst de HC-SR04 aansluiten op de Arduino (zie schema). Later testen we de sensor.

Relaismodule (mijn module heeft 2 kanalen, we gebruiken 1):
- VCC → 5V
- IN1 → Arduino Pin 8 (of naar keuze)
Let op: Mijn relais is active-low. Om te testen: VCC/GND aansluiten, IN naar 5V → niets gebeurt = active-low. Bevestig door IN naar GND te verbinden (relais schakelt).

De lamp aansluiten (⚠ HOOGSPANNING)
Eén lampdraad direct op de stekker. De andere draad doorhalen in het midden: één einde naar NO (Normaal Open) van het relais, het andere einde naar COM van het relais, en dan naar de stekker.


Complete schakeling:


De code doet het volgende:
- Meet afstand met ultrasone sensor
- Detecteert of iemand voorbij de deur loopt
- Schakelt de lampstatus om
Waarden uitlezen van de ultrasone sensor
Voorbeeld uit de NewPing-bibliotheek (installeer via Library Manager of GitHub):
sonar.ping_cm(); // afstand in cm
sonar.ping_inch(); // afstand in inches
De library stelt trigger/echo pinnen en max bereik in.

Probleem: De sensor leest af en toe een foutieve afstand (ruis).

Oplossing: meerdere metingen middelen of mediaanfilter gebruiken. De NewPing library heeft dit ingebouwd:
sonar.ping_median(unsigned byte numReadings); // max 512
Deze retourneert de echo-tijd (µs). Omrekenen naar cm/inch:
sonar.convert_cm(unsigned int echoTime);
sonar.convert_in(unsigned int echoTime);
Extra: sensor geeft 0 bij "niets gedetecteerd" → behandelen als MAX_DISTANCE.
Uiteindelijke leesfunctie (distance is globale variabele):

Detecteren dat iemand voorbij loopt
Drempelafstand = halve deurbreedte (zo weet je zeker dat iemand de deur passeert). De lamp schakelt alleen bij passage; iemand stil staan voor de sensor doet niets.

Gefeliciteerd, klaar! Heel Visual Studio project (met kleine library-aanpassing voor dynamische geheugenallocatie) op GitHub.
Onderdelen: utsource.net. Waardeer dit project als nuttig. Andere projecten: Arduino kleurmixer, RC Auto met 1Sheeld, Artikelen over Visual Studio voor Arduino.
Code
Smart House Light (Arduino)
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
#define RELAY_LINE1_PIN 8
#include "NewPing.h"
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int critical_distance_cms = 50; // drempel (cm)
bool state = 0;
void setup() {
Serial.begin(9600);
pinMode(RELAY_LINE1_PIN, OUTPUT);
digitalWrite(RELAY_LINE1_PIN, HIGH); // Lamp uit (active-low)
}
void loop() {
delay(50); // 20 pings/sec
unsigned int distance = readDistance();
Serial.print("Ultrasonic: ");
Serial.print(distance);
Serial.println("cm");
if (distance < critical_distance_cms) {
// Wacht tot persoon weg is
while (distance < critical_distance_cms) {
distance = readDistance();
delay(5);
}
state = !state; // Toggle relais
if (state) {
Serial.println("Deur Open!");
digitalWrite(RELAY_LINE1_PIN, LOW); // Lamp aan
} else {
Serial.println("Deur Dicht!");
digitalWrite(RELAY_LINE1_PIN, HIGH); // Lamp uit
}
}
}
unsigned int readDistance() {
// Mediaanfilter over 7 metingen
unsigned int distance = sonar.convert_cm(sonar.ping_median(7));
if (distance == 0) distance = MAX_DISTANCE;
return distance;
}
Ultrasonic test (Arduino)
// Example NewPing sketch
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(115200);
}
void loop() {
delay(50);
Serial.print("Ping: ");
Serial.print(sonar.ping_cm());
Serial.println("cm");
}
Smart House Lights (Visual Studio project)
Schema's

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
- Arduino temperatuur- en vochtigheidslogger met DHT11 en Ethernet Shield
- Arduino-gestuurd automatische plantenwateringssysteem
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- Slimme Zelfzittende Schoenen met Ingebouwde Energie-opwekking
- Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
- Vier met Licht en Geluid: DIY Verjaardags Arduino-project
- Naadloze LED-dimmer met Bolt IoT en Arduino UNO
- Een audio-reactieve bureaulamp bouwen met Arduino Nano