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

Maak me wakker!

Componenten en benodigdheden

Arduino Nano R3
× 1
Maxim Integrated DS3231MPMB1 Peripheral Module
× 1

Over dit project

De winter komt eraan, de nachten worden langer dan de dagen, en het is een nachtmerrie voor mij om om 6 uur 's ochtends wakker te worden in een donkere en koude kamer. Wat als er een manier was om kunstmatige "zonsopgang" te creëren om de kamer veel warmer en aangenamer te maken?

Dit is een gemakkelijke taak, ik ga een slimme gloeilamp maken die in mijn huidige plafondlamp past. Het simuleert een zonsopgang door de kamer langzaam te verlichten. Als het werkt, ga ik het verbinden met mijn telefoon om er een goede wekker van te maken.

Gloeilamp

Om een ​​slimme gloeilamp te maken, heb je eerst een "domme" lamp nodig vanwege de fitting die in de lamp wordt geschroefd en voor stroomvoorziening zorgt. Ik sloeg het kapot met een hamer. Deze verrukkingsprocedure verwijderde het glas van de aluminium fitting en na het solderen van draden aan de socket en pin aan de onderkant, was de basis van de slimme gloeilamp klaar.

Vervolgens heb je een ondersteuning nodig voor alle elektronica. Ik gebruikte een perf-bord en sneed het om een ​​Arduino Nano-microcontroller, 5V-voeding en alle elektronische componenten te passen.

Hoogspanningscircuit

Veiligheidswaarschuwing: U werkt met spanningen groter dan 50V. Contact met hoogspanning kan leiden tot ernstig letsel of de dood.

Aangezien ik een gewone gloeilamp gebruik die wordt gevoed door AC-netspanning, kan ik de microcontroller niet rechtstreeks gebruiken om de stroom naar de gloeilamp te regelen. Ik heb een TRIAC nodig. Dit kleine apparaatje fungeert als een relais dat vrij snel kan in- en uitschakelen. De microcontroller zal de triac in- en uitschakelen om de AC-sinusgolf te veranderen, waardoor het licht wordt gedimd of helderder wordt.

AC-spanning wordt echter anders geregeld dan DC-spanning. AC-sinusgolf moet op precieze manieren worden afgesneden en daarom moet triac op precieze momenten worden in- en uitgeschakeld om dat te bereiken (zie onderstaande afbeelding). Met andere woorden, de microcontroller moet weten wanneer de sinusgolf van de netspanning nul overschrijdt om elk van de halve golven op dezelfde grootte te snijden. Anders zou het licht flikkeren.

Om nuldoorgang van netspanning te detecteren, is er een 4N35 (U1) optocoupler met een transistor die aangaat wanneer de sinus de nul overschrijdt. De microcontroller zal dat zien als een hoog signaal op zijn ingangspin. Optocoupler heeft een andere functie, het is om de laagspanning te isoleren van het netspanningscircuit.

Tweede optocoupler - MOC3063 (U2) - met een triac-uitgang wordt gebruikt om de microcontroller te isoleren van hoogspanningstriac (Q2). Zorg ervoor dat u geen optocoupler met nuldoorgangsfunctie gebruikt, omdat deze alleen wordt ingeschakeld wanneer de sinusgolf nul overschrijdt.

Laagspanningscircuit

Als microcontroller gebruik ik Arduino Nano. Het belangrijkste doel is om triac te regelen en het licht aan te doen wanneer de ingestelde tijd komt. Om een ​​realtime klok te bieden, is er de DS3231 nauwkeurige realtimeklokmodule die ook tijd bespaart wanneer de stroom uitvalt.

Om 5V voor chips te leveren, gebruik ik een goedkope 5V 700mA step-down voeding die is aangesloten op de netspanning van de lampfitting. Leuke en handige oplossing!

Code

Het programma is vrij eenvoudig. Wanneer de lamp wordt ingeschakeld door de schakelaar, zal deze de kamer verlichten en langzaam dimmen tot in de nacht als een verificatie dat de elektronica nog steeds werkt. 'S Nachts controleert het de realtime klok die is opgeslagen in de DS3231-module en uiteindelijk om 6 uur 's ochtends wordt de kamer langzaam verlicht tot volledig "daglicht" totdat de lamp wordt uitgeschakeld door de schakelaar.

Bekijk de onderstaande code die volgens mij voor zich spreekt. Als dat niet zo is, ben ik een slechte ontwikkelaar!

Wat nu?

Nu ga ik een paar dagen of weken experimenteren en als het me 's ochtends kan wekken, zal ik dit project evolueren naar iets slimmer en minder ruw!

Goedenacht!

Code

  • lightalarm.ino
lightalarm.inoArduino
Een slimme lamp die gaat branden als het tijd is om uit bed te komen.
/*Een slimme lamp die gaat branden als het tijd is om uit bed te komen.Hoe het werkt:1) wanneer de stroom is ingeschakeld , het licht wordt ingeschakeld om te controleren of het werkt2) het zal langzaam dimmen totdat het volledig uit is3) om 6 uur 's ochtends licht gaat langzaam aan totdat het 's avonds wordt uitgeschakeld4) het licht gaat niet aan als de kamer niet donker is meer (fotocel) Hoe te gebruiken:- doe het licht aan als je naar bed gaat en het zal de kamer verlichten als je 's ochtends wakker wordt, doe het licht uit als je de kamer verlaat om het uit te zetten. - de tijd blijft behouden vanwege naar de DS3231 module@author Jiri Praus (https://twitter.com/jipraus)AC Lichtregeling geïnspireerd door http://arduinotehniq.blogspot.com/2014/10/ac-light-dimmer-with-arduino.html* /#include  // beschikbaar via http://www.arduino.cc/playground/Code/#include "RTClib.h"#define TRIAC_PIN 2#define ZERO_CROSS_PIN 3#define LIGHT_SENSOR_PIN A6#define FREQUENCY_STEP 75 // Dit is de vertraging-per-helderheidsstap in microseconden voor 50Hz (wijzig de waarde in 65 voor 60Hz)#define CHANGE_DIM_LEVEL_EVERY 1 // verander dimniveau elke N seconden, traagheid van helderder/dimmen#define MAX_DIM_LEVEL 128 // off# definieer MIN_DIM_LEVEL 0 // on#define DARK_THRESHOLD 300 // weerstand van fotocel wanneer het buiten donker is// triac-controlevariabelen vluchtige byte triacCounter =0; // triac control timervolatile boolean zeroCrossed =false; // AC fase nul-gekruiste vlag// dim controlbyte dimLevel =MIN_DIM_LEVEL; // bij inschakelen is het lampje aan en zal het langzaam dimmen als een checkboolean lightOn =false;// alarm clockRTC_DS3231 rtc;void setup() {Serial.begin(115200); digitalWrite(TRIAC_PIN, LAAG); pinMode (TRIAC_PIN, UITGANG); pinMode (ZERO_CROSS_PIN, INPUT); pinMode (LIGHT_SENSOR_PIN, INPUT); // init real-time klok if (!rtc.begin()) { Serial.println("Kon RTC niet vinden"); terwijl(1); } if (rtc.lostPower()) { Serial.println("RTC verloor stroom, laten we de tijd instellen!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // volgende regel stelt de RTC in op de datum en tijd waarop deze schets is gecompileerd } // initialiseer interrupts en timers voor triac-besturing noInterrupts(); attachInterrupt(digitalPinToInterrupt(ZERO_CROSS_PIN), zeroCrossDetected, RISING); // Bevestig een onderbreking aan pin 2 (onderbreking 0) voor onderbrekingen van nuldoorgangsdetectie (); Timer1.initialize (FREQUENCY_STEP); Timer1.attachInterrupt (triacTimerInterrupt, FREQUENCY_STEP);} ongeldige lus () {vertraging (CHANGE_DIM_LEVEL_EVERY * 1000); checkAlarmClock(); AdjustDimLevel(); debugPrint();}void zeroCrossDetected() { zeroCrossed =true; // stel de boolean in op true om onze dimfunctie te vertellen dat er een nuldoorgang is opgetreden triacCounter =0; // begin met tellen wanneer triac moet worden geopend digitalWrite (TRIAC_PIN, LOW); // licht uit} void triacTimerInterrupt () {if (dimLevel>=MAX_DIM_LEVEL) {// permanent uit digitalWrite (TRIAC_PIN, LOW); } else if (dimLevel <=MIN_DIM_LEVEL) { // permanent op digitalWrite (TRIAC_PIN, HIGH); } else if (zeroCrossed) {if (triacCounter>=dimLevel) {digitalWrite(TRIAC_PIN, HIGH); // open triac zeroCrossed =false; // reset nuldoorgangsdetectie tot de volgende halve vawe} else {triacCounter ++; // tijdstappenteller verhogen } }} ongeldig aanpassenDimLevel () { if (lightOn &&dimLevel> MIN_DIM_LEVEL) { dimLevel--; } else if (!lightOn &&dimLevel  

Schema's


Productieproces

  1. Serie Batterijen
  2. Spanningsdeler
  3. Thermo-elektriciteit
  4. Potentiometrische voltmeter
  5. Aardappelbatterij
  6. Faseverschuiving
  7. Spanningsregelaar
  8. Voltage volger
  9. Meertraps versterker
  10. Differentiële versterker
  11. Diodes voor speciale doeleinden