Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Onderdelen en Benodigdheden

OnderdeelAantal
Arduino Nano R3 1
Maxim Integrated DS3231MPMB1 Real-Time Clock Module 1

Over dit Project

De winter komt, de nachten worden langer dan de dagen, en om 6 uur 's ochtends in een donkere, koude kamer wakker worden is een nachtmerrie. Wat als we een kunstmatige "zonsopgang" kunnen creëren om de kamer warmer en prettiger te maken?

Dit is een eenvoudige taak: ik bouw een slimme gloeilamp die in mijn huidige plafonnier past. Deze simuleert een zonsopgang door de kamer langzaam te verlichten. Als het werkt, koppel ik het aan mijn telefoon om een echte wekker te maken.

De Gloeilamp (Basis)

Om een slimme gloeilamp te maken heb je eerst een "domme" lamp nodig vanwege de fitting die in de armatuur geschroefd wordt en de voeding levert. Ik sloeg hem met een hamer kapot – een bevredigende actie die het glas van de aluminium fitting scheidde. Na het solderen van draden aan de fitting en de contactpin onderaan was de basis klaar.

Vervolgens had ik een draagvlak voor de elektronica nodig. Ik gebruikte een experiprint en zaagde deze op maat voor de Arduino Nano, 5V voeding en alle componenten.

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Hoogspanningscircuit

Veiligheidswaarschuwing: Je werkt met spanningen boven 50V. Contact met hoge spanning kan zware letsel of de dood veroorzaken.

Omdat ik een gewone gloeilamp gebruik die op netspanning (AC) werkt, kan ik de microcontroller niet direct de stroom naar de lamp laten regelen. Ik heb een TRIAC nodig. Dit kleine apparaat fungeert als een relais dat heel snel kan schakelen. De microcontroller zet de TRIAC aan en uit om de AC sinusgolf aan te passen, waardoor de lamp dimt of feller brandt.

AC-spanning wordt echter anders geregeeld dan DC. De sinusgolf moet op precieze momenten worden afgekapt; de TRIAC moet dus op exact de juiste momenten aan en uit gaan (zie afbeelding). Met andere woorden: de microcontroller moet weten wanneer de nuldoorgang van de netspanning plaatsvindt om elke halve golf gelijk te knippen. Anders knippert het licht.

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Om de nuldoorgang te detecteren gebruik ik een 4N35 (U1) optokoppler met een transistor die aan gaat wanneer de sinusgolf nul kruist. De microcontroller ziet dit als een hoog signaal op zijn input. De optokoppler heeft een tweede functie: het galvanisch scheiden van de lage-spanningskant van de netspanning.

Een tweede optokoppler – MOC3063 (U2) – met een TRIAC op de uitgang, scheidt de microcontroller van de hoogspannings-TRIAC (Q2). Belangrijk: Gebruik geen optokoppler met nuldoorgangsdetectie, want die schakelt alleen bij de nuldoorgang.

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Lagespanningscircuit

Als microcontroller gebruik ik een Arduino Nano. De hoofddoel: TRIAC sturen en het licht aanzetten op de ingestelde tijd. Voor accurate tijd is er een DS3231 RTC-module die de tijd behoudt bij stroomuitval.

Voor 5V voor de chips gebruik ik een goedkope 5V 700mA step-down voeding aangesloten op de netspanning uit de lampfitting. Netjes en handig!

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Code

Het programma is eenvoudig. Wanneer de lamp via de schakelaar wordt aangesloten, brandt hij even als check en dimt daarna langzaam uit ("nacht"). In de nacht checkt hij de RTC (DS3231) en om 6 uur 's ochtends laat hij de kamer langzaam opgloeien tot volle "daglicht" helderheid, tot de lamp met de schakelaar wordt uitgezet.

Bekijk de code hieronder – ik denk dat deze zichzelf verklaart. Zo niet, ben ik een slechte developer!

Wat Volgt?

Nu ga ik een paar dagen/weken experimenteren. Als het me 's ochtends kan wekken, zal ik dit project verder uitwerken naar iets slimmers en minder "knutselwerk"!

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Goede nacht!

Code (lightalarm.ino)

/* Een slimme gloeilamp die aan gaat als het tijd is om uit bed te stappen.
 * Hoe het werkt:
 * 1) Bij inschakelen gaat het licht aan als check
 * 2) Het dimt langzaam tot volledig uit
 * 3) Om 6:00 's ochtends gaat het langzaam aan tot volle helderheid
 * 4) Licht gaat niet aan als de kamer al licht is (fotocel)
 * Gebruik:
 * - Zet het licht aan bij het gaan slapen; het gaat aan bij ontwaken, zet uit bij vertrek.
 * - Tijd wordt bewaard door DS3231 module.
 * @author Jiri Praus (https://twitter.com/jipraus)
 * AC dimming geïnspireerd door https://arduinotehniq.blogspot.com/2014/10/ac-light-dimmer-with-arduino.html
 */
#include <TimerOne.h>
#include "RTClib.h"

#define TRIAC_PIN 2
#define ZERO_CROSS_PIN 3
#define LIGHT_SENSOR_PIN A6
#define FREQUENCY_STEP 75 // µs per helderheidsstap voor 50Hz (65 voor 60Hz)
#define CHANGE_DIM_LEVEL_EVERY 1 // Dim-niveau elke N seconden aanpassen
#define MAX_DIM_LEVEL 128 // Uit
#define MIN_DIM_LEVEL 0   // Aan
#define DARK_THRESHOLD 300 // Fotocel weerstand bij donker

volatile byte triacCounter = 0;
volatile boolean zeroCrossed = false;
byte dimLevel = MIN_DIM_LEVEL;
boolean lightOn = false;

RTC_DS3231 rtc;

void setup() {
  Serial.begin(115200);
  digitalWrite(TRIAC_PIN, LOW);
  pinMode(TRIAC_PIN, OUTPUT);
  pinMode(ZERO_CROSS_PIN, INPUT);
  pinMode(LIGHT_SENSOR_PIN, INPUT);

  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while(1);
  }
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

  noInterrupts();
  attachInterrupt(digitalPinToInterrupt(ZERO_CROSS_PIN), zeroCrossDetected, RISING);
  interrupts();
  Timer1.initialize(FREQUENCY_STEP);
  Timer1.attachInterrupt(triacTimerInterrupt, FREQUENCY_STEP);
}

void loop() {
  delay(CHANGE_DIM_LEVEL_EVERY * 1000);
  checkAlarmClock();
  adjustDimLevel();
  debugPrint();
}

void zeroCrossDetected() {
  zeroCrossed = true;
  triacCounter = 0;
  digitalWrite(TRIAC_PIN, LOW);
}

void triacTimerInterrupt() {
  if (dimLevel >= MAX_DIM_LEVEL) {
    digitalWrite(TRIAC_PIN, LOW);
  } else if (dimLevel <= MIN_DIM_LEVEL) {
    digitalWrite(TRIAC_PIN, HIGH);
  } else if (zeroCrossed) {
    if (triacCounter >= dimLevel) {
      digitalWrite(TRIAC_PIN, HIGH);
      zeroCrossed = false;
    } else {
      triacCounter++;
    }
  }
}

void adjustDimLevel() {
  if (lightOn && dimLevel > MIN_DIM_LEVEL) dimLevel--;
  else if (!lightOn && dimLevel < MAX_DIM_LEVEL) dimLevel++;
}

void checkAlarmClock() {
  if (!lightOn && isRoomDark()) {
    DateTime now = rtc.now();
    if (now.hour() == 6 && now.minute() == 0) {
      lightOn = true;
    }
  }
}

boolean isRoomDark() {
  return analogRead(LIGHT_SENSOR_PIN) < DARK_THRESHOLD;
}

void debugPrint() {
  Serial.print("lightOn="); Serial.println(lightOn);
  Serial.print("dimLevel="); Serial.println(dimLevel);
  DateTime now = rtc.now();
  Serial.print("datetime=");
  Serial.print(now.year(), DEC); Serial.print('/');
  Serial.print(now.month(), DEC); Serial.print('/');
  Serial.print(now.day(), DEC); Serial.print(' ');
  Serial.print(now.hour(), DEC); Serial.print(':');
  Serial.print(now.minute(), DEC); Serial.print(':');
  Serial.println(now.second(), DEC);
  Serial.print("lightLevel="); Serial.println(analogRead(LIGHT_SENSOR_PIN));
}

Schema's

Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed
Slimme Zonsopgang Wekker: Ontwaak met een Zachte Gloed

Productieproces

  1. Spanningsoptelling met serie batterijverbindingen verkennen
  2. Spanningsdeler Lab: Ontwerp, Meting en Verificatie van Kirchhoffs Spanningswet
  3. Thermoelectriciteit: Thermokoppels en het Seebeck-effect begrijpen
  4. Potentiometrische Voltmeter: Precieze Spanningmeting met Minimale Belasting
  5. Een Aardappelbatterij Bouwen: Stapsgewijze Handleiding voor DIY Elektrochemische Energie
  6. Lage‑Spanning AC Voeding: Fasverschuiving Circuit Componenten & Best Practices
  7. Spanningsregelaar Experiment met een 12‑Volt Zener Diode
  8. Voltage Follower Versterker: Ontwerp, Bouw, en Meet Handleiding
  9. Een Hoog‑Versterking Multi‑Trap Common‑Emitter Versterker Ontwerpen met Negatieve Terugkoppeling
  10. Een Hoog‑Versterking Differentiele Versterker Ontwerpen met NPN Transistoren
  11. Speciale-doel diodes: Schottky, tunnel, LED, laser, fotodiode en zonnecel innovaties