Arduino kontrollerade ljus dimmer (3 / 15 steg)

Steg 3: Programvaran, lite av teori



Om du kunde bry sig mindre om teorin, men vill bara programvaran, gå till nästa steg

Sättet att använda en AC dimmer/fader är ganska enkelt när du förstår grunderna:

I AC kraften matas till lampan är direkt relaterad till den totala ytan på sinuswave, lampan kan regleras genom att endast tillåta en förutsägbar del av det sinuswave att flöda genom lampan.

Som sådan vi behöver en referens punkt på det sinus från där vi beräknar när lampan måste vara påslagen.

Den enklaste referenspunkten att använda är den så kallade "zero crossing": det ögonblick då ljuset går genom noll.
Efter varje noll korsning finns fullt hälften av sinuswave tillgängliga att skicka genom lampan.

Så är vad programvaran måste göra att upptäcka zerocrossing, och sedan vänta på en viss tid på det sinuswave att slå på TRIAC.

Det finns 2 stora net frekvenser i världen: 100 Hz i Europa och de flesta av Asien och Afrika och 120 Hz i USA: s (och delar av Caribean). Det finns 2 stora spänningar i världen: 110-120V och 220-240V men de är inte viktigt för matematik här.

För enkel användning kommer jag ta 50Hz frekvens som ett exempel:
50Hz är 50 vågor per sekund.
Varje sinuswave tar således 1000ms/50 = 20ms (millisekunder)
Det finns 2 sinuspeaks i en våg som innebär att efter varje noll identifieringen finns en 10ms period som vi kan reglera.
Ska vi tända lampan direkt i början av denna period, lampan kommer att få full effekt, ska vi göra det i slutet av denna 10ms period lampan får ingen ower så ska vi göra det halvvägs, lampan får halva makten.
Vi använder TRIACs, är vad programvaran behöver göra att vänta på nollpunkten på sinuscurve, noterar detta och sedan vänta en viss tid inom denna 10ms tid att skicka en puls till TRIAC.
Om det skickar den pulsen på 5ms, brinner bara lampan på halv effekt.

I kretsen, noll upptäckt görs genom biphase optocoupler och finns som X-signalen i styrelsen.
Det finns i princip 2 väg för en mikrokontroller att identifiera den signalen:
1-en kontinuerlig "polling" av Zero Crossing pin
2-med ett avbrott att tala om för programmet att det fanns en noll korsning
Den största skillnaden mellan två är att i "röstningen" varje gång datorn går igenom det viktigaste loop måste kolla stiftet. Om ett program är upptagen med en massa andra saker, kan det vara för sent vid kontrollen noll korsning stift, medan när du använder ett avbrott, det ingen spelar roll vad programmet är upptaget med. Avbrottet är slags "Knacka på axeln" säger "Hey look, något kom att du måste sköta nu".

Efter noll passage upptäcks måste vänta en viss tid och slå sedan på TRIAC.
Även här, kan den väntan göras på två olika sätt
1 - genom att utfärda ett "vänta" kommando
2-med hjälp av en timer avbryta

Återigen, båda metoderna har sina pro's och con's Kommandot "vänta" ("försening" på Arduino språk) bokstavligen låt oss datorn vänta på utsatt tid och det kan inte göra något annat under tiden. Om lampan brinner vid låg effekt genom att låta datorn vänta säga 9ms, betyder det att varje 10ms datorn berättas att vänta 9ms: ergo man sysslolös 90% av tiden. Det är bra om handkontrollen endast används för att styra lampan, men om den behöver för att göra andra saker sedan lite tid kvar.
Med hjälp av en timer avbryta löser som. I grund och botten vad det betyder är att programmet berättar timern: ¨Hey, jag hörde bara vi har en noll korsning, jag fick göra något annat, men du bara vänta 4.5ms och slå sedan på Triac "så programmet går på är det glada sätt och 4.5ms (som exempel) efter det fick märka det var en 0-korsning, timern kopplar på en TRIAC.

Polling: (Obs detta är en grov exempel för illustration av röstningen, uppenbarligen behöver några tillbehör)

int AC_LOAD = 3; Vi använder stift 3 för att antända TRIAC
int staten. heltal för att lagra status för noll passage

void setup()
{
pinMode (AC_LOAD, OUTPUT); / / ställa in AC Load pin som utgång
}

void loop()
{
State=digitalRead(AC_LOAD);
om (state = 1) {
delayMicroseconds(5000); = 5 ms = halv effekt
digitalWrite (AC_LOAD, hög); Triac bränning
}

Avbryta driven:
För att använda ett avbrott, först måste vi inrätta som. På Arduino är som följande:

void setup()
{
pinMode (AC_LOAD, OUTPUT); / / ställa in AC Load pin som utgång
attachInterrupt (0, zero_crosss_int, RISING); Välj noll korset avbryta # från tabellen ovan
}

Vad detta säger är att avbrottet är ansluten om du vill avbryta 0, den går till en funktion som kallas "zero_crosss_int" och det reagerar på en stigande flanken på stiftet.

I funktionen Zero_cross_int som programmet hoppar till efter avbrottet bestämma vi den tid vi behöver vänta innan vi skjuter en TRIAC. Vi kommer också lägga lite av funktionalitet. Vi vill inte bara en nivå uppsättning som lampan brinner på, kommer vi att lägga till några funktioner för att reglera ljusnivån i steg.
Som jag har valt helt godtyckliga mängden 128 steg. Det innebär att varje steg är 10ms/128 = 10000us/128 = 75us (i själva verket är 78, men jag kommer till det senare). Den totala dimtime beräknas sedan utifrån 75 x (1 till 128). Det nummer mellan 1-128, som avgör vår nivå ljusreglering, vi tilldela variabeln heltal "mörkläggning"

void zero_crosss_int() / / funktion för att eldas på noll korsningen till dämpa ljuset
{
int dimtime = (75 * dimming); För 60Hz = > 65
delayMicroseconds(dimtime); Av cykeln
digitalWrite (AC_LOAD, hög); Triac bränning
delayMicroseconds(10); Triac på överföringsfördröjning (för 60Hz 8,33)
digitalWrite (AC_LOAD, låg); Triac Off
}

Vad som händer här är att först beräknas den dimtime (= tid att vänta innan triac avfyras)

Därefter väntar den mängden tid, därefter väntar den mängden tid och bränder en Triac. Triac kommer att stänga igen på följande noll korsning, men vi kommer att skriva en låg redan på TRIAC stiftet att undvika oavsiktlig tändning i nästa cykel. Vi måste vänta lite dock veta säkert TRIAC är på, så vi väntar 10us. Nu (10000-10) / 128 är fortfarande 78 men jag hittade 75 att fungera bra. Känn dig fri att använda 78 ändå.

Det enda som sedan kvar för att göra i huvudprogrammet är Ställ som vi vill att lampan att bränna:

void loop() {
för (int jag = 5; jag < = 128; i ++) {
mörkläggning = i.
Delay(10);
}

Vad som händer här är en enkel slinga som reglerar lampan upp i en 128 steg. Jag har valt att inte starta på 1 men på 5 eftersom på den nivån det kan finnas vissa Tidsproblem som kan orsaka lampan flimra.

Ovanstående program är bara ett exempel på hur du kan styra lampan, uppenbarligen du vill lägga till några andra funktioner snarare än att bara ha en lampa går upp och ner i ljusstyrka.

Med en timer:
Om du vill att din vara tiden effektivt måste du använda ett avbrott för att noll-korsning upptäcka och en timer för att avgöra hur lång tid att vänta.
Ungefär ett program ser ut enligt följande:

Initiera
Ställa in de olika konstanter och variabler du behöver och inkluderar de biblioteken (till exempel TimerOne biblioteket)

Setup
Setp stiften och de 2 avbrott
Noll-crosssing avbrott poäng till en funktion och så gör timer avbrottet

Noll-cross functie
Ange ett booleskt värde som anger om ett noll kors har inträffat

Timerfunktionen
Om vi reglera ljusstyrkan igen i 128 steg, då Timerfunktionen är inställd att anropas när ett steg har passerat (t.ex. 75us) och kontrollerar sedan om antalet steg passerade är lika med antalet steg uppsättning. Om så är fallet, är Triac påslagen

Se Steg
Relaterade Ämnen

Billiga Arduino kontrollerade ljus Sockets - Reverse Engineering RF

Smart glödlampor kostar din förstfödda barn. Vilket är synd, eftersom smarta lampor låsa upp enorm potential för hemautomation, energibesparingaroch alla typer av coola projekt.Om bara fanns det ett sätt att kontrollera dina lampor utan att bryta ban...

Arduino kontrollerade ljus

Hej, mitt namn är Blane Parker, jag är 14 år gammal och bor i Texas. Jag älskar att spela med elektronik och besöka instructables ofta att lära sig; att bli bättre i elektronik.1. vad gjorde du?Jag gjorde enhet som ansluts till en Arduino eller en "s...

Skapa en Arduino kontrollerade ljus-följande blomma Bot

I detta baserade Arduino projekt, skapar du en "biomimetiska," eller biologi-inspirerade, blomma som följer en ljuskälla. Du har förmodligen sett detta beteende i dina krukväxter! Växter behöver solljus för att växa och frodas, och "heliotr...

Mind kontrollerade ljus med hjälp av Arduino || Fattig mans EEGEN sensor

Det vore inte bra att vända saker på eller av med ditt sinne... !!!Som Puzlebox Orbit Mobile Edition (http://www.amazon.com/Puzzlebox-Puzlebox-Orbit-Mob... ) eller häftiga Star Wars vetenskapen - Force tränare ( http://www.amazon.com/Star-Wars-Scienc...

Sällskapsdjur utegångsförbud: En Arduino kontrollerade sällskapsdjur dörr

Problemet: du vill begränsa den tid när ditt husdjur är tillåtet att gå utanför. Detta kan bero på att trakten inte är säkra för din katt eller liten hund på natten (plundringarna coyotes kommer att tänka på). Men du vill ha ditt husdjur för att kunn...

Android & Arduino kontrollerade projektorn skärmen

detta är min första gången du använder Arduino, eller någon mikrokontroller. Jag är glad att det fungerat så bra men min fru kan inte bero på, travar av mikrokontroller som kommer att dyka upp på vår tröskel snart för framtida projekt. Någon feedback...

Laser Galvo - Arduino kontrollerade

Arduino kontrollerad laser galvo. Servo driven speglar styra UV laser lämna ett fosforescerande spår på glöd-in-the-dark vinyl ark.Ursprungligen postat på notes.robives.comSteg 1:Börjar med ett blad av självlysande vinyl från eBay och en UV laserpeka...

Arduino kontrollerade Servo Robot (serbiska)

vad bättre sätt för att börja experimentera med öppen källkod mikro-styrenheter ( Arduino ) då genom att bygga din egen öppen källkod robot ( CC (SA-av))?Vad till gör med din Serbiska?(här) - Hur ansluta din serbiska till internet och köra det över e...

Infraröd Sensor guidade Arduino kontrollerade L293D Robot (del 2)

Här är del 2 av Arduino kontrollerade L293D Robot.Del 2 innehåller IR Sensors.This ingår i en serie av instructables leder till en rad efterföljare Robot.QRD1114 Infrarödsensor kopplad till ArduinoSteg 1: Ledningar IR sensorn till ArduinoNegativ från...

Arduino blekning ljus

detta är en Arduino kontrollerade nattlampa.material:1 x LED5 x hoppare ledningar1 x arduino1 x fotocell1 x skärbräda1 x 10 k ohm motståndHär är koden, skriv inte saker efter den / /, koden kommer att få för lång:Dessa konstanter inte kommer att ändr...

Arduino kontrollerade fyren

Översikt:Jag har ofta tänkt att en fyr skulle göra ett stort projekt för en Arduino, och så jag beslöt att ge det ett försök med någon av de lokala fyrarna här i Erie, Pennsylvania som inspiration. Jag valde Norr Pierhead fyr som vaktar ingången till...

Arduino-kontrollerade Wolf svans

hälsningar, eller ska jag säga, "Aaaaaooooooooooooh!" Gärna göra din bekantskap Karl wolf entusiast. Du har en inre wolf ande som är så ivriga att ge sig till känna att du har kommit mig att lära mig hur man gör din egen animatronic wolf svans,...

Arduino kontrollerade kök Timer

Alla ni måste har upplevt detta att du har något kokning på din gasspis medan å andra sidan du få upptagen tittar på TV eller få en djup konversation att du inser på upptäcka en lukt som det var helt bortskämd bara på grund av din slarv. Denna lilla...

Arduino kontrollerad bil Tracking System baserade på SMS-

Hej jag gjorde en Arduino kontrollerad bil Tracking System baserat på SMS för min fars bil.Använda modulerna är;Arduino nano V3.0SkyLab GPS-modulenWaveCom GSM-modulSoftwareSerial bibliotek, TinyGPS används för att kommunicera med moduler.När jag ring...

Trådlösa Arduino kontrollerade Tank (nRF24L01)

Hej!Idag kommer jag att visa dig hur man bygger en Arduino kontrollerade tank och fjärrkontroll. 3d tryckta delar av tanken (med undantag av registeransvarige, spåra guide och tank cover) ritades av timmiclark och kan hittas här.Steg 1: Samla materia...

Arduino kontrollerade CNC / 3D skrivare Hybrid

Moder natur gör... Vi bygger.BuildersBot säkringar 3D utskrift & CNC fräsning till en Builders dröm "3dprintingindustry.com"BuilderBot är en öppen Design maskin, som använder OpenMjukvara och öppen hårdvara. Det är en produkt av öppna projek...

Wall-E's anti-sociala kusin: objekt att undvika Arduino kontrollerade Robot!

jag byggde nyligen en Arduino kontrollerade robot, som undviker objekt och skickar ut en PING)) ekolod att kontrollera om ett objekt är. När ett objekt har identifierats, roboten ryggen upp och vänder åt andra hållet!Jag kallar det anti-sociala robot...

Arduino-kontrollerade Smart Home

Detta Instructable skrevs av PubNub Evangelist Ian Jennings . Ians historia går igenom hans processen för att bygga en Arduino-kontrollerade smarta hem modell från grunden.--Tillbaka i September, vår grundare Stephen och jag pratade om olika sätt att...

Arduino kontrollerade Flight Simulator - "The Viper"

min Maker Faire projekt för 2012 är "The Viper"--en Arduino kontrollerade flight simulator inspirerad av shipen av det samma känt från SyFy kanalens TV-serien Battlestar Galactica. Den roterar 360 grader längs två axlar, vilket innebär att ja, d...