Arduino gecontroleerd licht dimmer (3 / 15 stap)

Stap 3: De software, een beetje theorie


Als u kon minder zorg over de theorie, maar wil gewoon de software, gaat u naar de volgende stap

De manier om het gebruiken van een AC dimmer/fader is vrij eenvoudig zodra u de basisprincipes begrijpt:

In AC de macht gevoed aan de lamp is direct gerelateerd aan de totale oppervlakte van de sinuswave, de lamp kan geregeld worden doordat alleen een voorspelbare deel van dat sinuswave doorheen de lamp kan stromen.

Als dergelijke we nodig een referentie punt op dat sinus van waar we berekenen wanneer de lamp moet worden ingeschakeld.

Het gemakkelijkste referentiepunt te gebruiken is de zogenaamde 'nul crossing': het moment dat het licht door nul gaat.
Er is volledige de helft van de sinuswave beschikbaar voor verzenden via de lamp na elke nul overtocht.

Dus is wat de software moet doen de zerocrossing kunt ontdekken en dan wachten op een vastgestelde hoeveelheid tijd op die sinuswave om over te schakelen op de TRIAC.

Er zijn 2 belangrijke netto frequenties in de wereld: 100 Hz in Europa en het grootste deel van Azië en Afrika en 120 Hz in de Amerika's (en delen van de Caribean). Er zijn 2 grote spanningen in de wereld: 110-120V en 220-240V, maar ze zijn niet belangrijk voor de wiskunde hier.

Voor gebruiksgemak zal ik de 50Hz frequentie als voorbeeld nemen:
50Hz is 50 golven per seconde.
Iedere sinuswave duurt dus 1000ms/50 = 20ms (miliseconden)
Aangezien er 2 sinuspeaks in een golf die dat na elke nul detectie betekent is er een 10ms periode die we kunnen reguleren.
Moeten we de lamp ontbranden direct aan het begin van die periode, de lamp ontvangt volle kracht, doen we het aan het einde van die periode van de 10ms die de lamp geen ower ontvangt en doen we het halverwege, ontvangt de lamp half vermogen.
Als we zijn met behulp van TRIACs, is wat de software moet doen te wachten tot het nulpunt op de sinuscurve, neem nota van die wacht op een bepaalde hoeveelheid tijd binnen die periode 10ms te sturen een puls naar de TRIAC.
Als het verzendt die pols bij 5ms, zal alleen de lamp branden op halve kracht.

In het Circuit, de nul detectie wordt gedaan door de biphase optocoupler en is beschikbaar als de X-signaal op het bord.
Er zijn eigenlijk 2 manieren voor een microcontroller om dat signaal te detecteren:
1-een continu 'polling' van de overschrijding van de nul-pin
2-met behulp van een interrupt aan het programma niet zeggen dat er een nul kruising was
Het belangrijkste verschil tussen de twee is dat in 'polling' everytime de computer doorloopt de hoofdlus moet controleren de pin. Als uw programma bezig een heleboel andere dingen is, het wellicht te laat bij de controle op de nul kruising pin, terwijl bij het gebruik van een interrupt, het maakt niet uit wat het programma bezig met is. De interrupt is soort 'te tikken op het op de schouder' zeggen "Hey look, iets kwam dat u moet wonen nu".

Nadat de nul overschrijding wordt ontdekt dat het programma nodig heeft om te wachten voor een bepaalde hoeveelheid tijd en schakel over op de TRIAC.
Ook hier, kan dat wachten worden gedaan op twee verschillende manieren
1 - door de uitgifte van een 'wachten' commando
2-met behulp van een timer-interrupt

Nogmaals, deze beide methoden hebben hun pro's en con's De opdracht 'geduld' ('vertraging' in Arduino taal) letterlijk laten we de computer wacht de vereiste tijd en het kan niets anders in de tussentijd. Als de lamp op lage kracht brandt door te laten de computer wacht zeggen 9ms, dat dat elke 10ms betekent de computer wordt verteld om te wachten 9ms: ergo het zal inactief zijn 90% van de tijd. Dat is fijn als je controller wordt alleen gebruikt om te controleren van de lamp, maar als het moet doen andere dingen dan weinig tijd overblijft.
Met behulp van een timer-interrupt is dat opgelost. Eigenlijk wat dat betekent is dat het programma de timer vertelt: ¨Hey, die ik zojuist gehoord hebben we een nul kruising, ik heb te doen iets anders, maar u wacht enkel 4.5ms en schakel over op de Triac "zodat het programma gaat over het is vrolijk, manier en 4.5ms (als voorbeeld) nadat het kreeg aankondiging er was een 0-kruising, de timer schakelt over op de TRIAC.

Polling: (Let op dit is een ruwe voorbeeld ter illustratie van polling, natuurlijk moet het sommige verbetering)

 int AC_LOAD=3; // We use pin 3 to ignite the TRIAC int state; // integer to store the status of the zero crossing void setup() { pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output } void loop() { state=digitalRead(AC_LOAD); if (state=1) { delayMicroseconds(5000); // =5 ms=half power digitalWrite(AC_LOAD, HIGH); // triac firing } 

Gedreven onderbreken:
Voor het gebruik van een interrupt, eerst we stellen dat maximaal. Op de Arduino die is als volgt:

 void setup() { pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output attachInterrupt(0, zero_crosss_int, RISING); // Choose the zero cross interrupt # from the table above } 

Wat dit zegt is dat de interrupt is aangesloten als u wilt onderbreken 0, het gaat om een functie genaamd "zero_crosss_int" en het reageert op een stijgende flank op de pin.

In de Zero_cross_int-functie die het programma naar na de interrupt springt bepalen we de tijd die we wachten moeten voor de ontploffing van de TRIAC. We zullen ook een beetje functionaliteit toevoegen. We willen niet alleen één niveau set die de lamp brandt op, we willen toevoegen sommige functies voor het regelen van het lichtniveau in stappen.
Daarvoor heb ik besloten de volledig willekeurige hoeveelheid 128 stappen. Dat betekent dat elke stap 10ms/128 = 10000us/128 = 75us (in feite is 78, maar ik krijg dat later). De totale dimtime wordt dan berekend uit 75 x (1 tot 128). Het nummer tussen 1-128, die bepalend is voor ons niveau van dimmen, we toewijzen aan de variabele integer 'dimmer'

 void zero_crosss_int() // function to be fired at the zero crossing to dim the light { int dimtime = (75*dimming); // For 60Hz =>65 delayMicroseconds(dimtime); // Off cycle digitalWrite(AC_LOAD, HIGH); // triac firing delayMicroseconds(10); // triac On propagation delay (for 60Hz use 8.33) digitalWrite(AC_LOAD, LOW); // triac Off } 

Wat gebeurt er hier is dat de eerste berekend, doordat de dimtime (= de tijd moet worden gewacht voordat de triac is ontslagen)

Vervolgens wacht die hoeveelheid tijd, vervolgens wacht die hoeveelheid tijd en branden de Triac. De Triac weer wordt uitgeschakeld na nul kruising, maar we gaan al een laag om op te schrijven de TRIAC-pin om te voorkomen dat per ongeluk ontsteking in de volgende cyclus. We moeten een beetje wachten maar weten zeker de TRIAC aanstaat, dus we 10us wachten. Nu (10000-10) / 128 is nog 78 maar ik vond 75 goed te werken. Voel je vrij om gebruik te maken van 78 maar.

Het enige wat dan nog moet doen in het hoofdprogramma is het niveau waarop we de lamp branden wilt instellen:

 void loop() { for (int i=5; i <= 128; i++){ dimming=i; delay(10); } 

Wat er gebeurt hier is een eenvoudige lus die de lamp omhoog in een 128 stappen regelt. Ik heb besloten om nog maar niet te beginnen bij 1 maar op 5 omdat op dat niveau kunnen er enkele timing-problemen die zorgen de lamp dat kunnen knippert.

Het bovenstaande programma is slechts een voorbeeld van hoe de controle van de lamp, uiteraard u wilt sommige andere functionaliteit toe te voegen in plaats van alleen maar een lamp die omhoog en omlaag gaan in helderheid.

Met behulp van een timer:
Als u uw tijd efficiënt wilt moet u een interrupt voor het overschrijden van een nul-detectie en een timer gebruikt om te bepalen van de hoeveelheid tijd te wachten.
Een programma zou er ongeveer als volgt:

Initialiseren
Instellen van de diverse constanten en variabelen die je nodig hebt en omvatten de bibliotheken gebruikt (zoals de TimerOne-bibliotheek)

Setup
Setp de pinnen en de 2 interrupts
De nul-crosssing interrupt verwijst naar een functie en dus doet de timer onderbreken

Nul-Kruis function
Instellen van een boolean die aangeeft of een nul Kruis is opgetreden

Timer-functie
Als wij de helderheid weer in 128 stappen, dan de timer-functie regelen is ingesteld om te worden aangeroepen wanneer de tijd van een stap is verstreken (bijvoorbeeld 75us) en die vervolgens controleert als het aantal stappen doorgegeven gelijk aan het aantal stappen instellen is. Als dat het geval, de Triac aanstaat

Gerelateerde Artikelen

Maken van een Arduino gecontroleerd licht-volgende bloem Bot

Maken van een Arduino gecontroleerd licht-volgende bloem Bot

In dit project van Arduino gebaseerde, maakt u een "biomimetische," of biologie-geïnspireerde, bloem die een lichtbron volgt. U heeft waarschijnlijk gezien dit probleem in uw kamerplanten! Planten vereisen zonlicht te groeien en bloeien, en &quo
Goedkope Arduino gecontroleerd licht Sockets - Reverse Engineering RF

Goedkope Arduino gecontroleerd licht Sockets - Reverse Engineering RF

Slimme lightbulbs kosten uw eerstgeborene kind. Dat is een schande, want slimme verlichting enorme potentieel voor huis automatisering, energiebesparing, en allerlei leuke projecten.Al was het maar was er een manier om controle van uw verlichting zon
Mening gecontroleerde licht met behulp van de Arduino || Arme man EEG sensor

Mening gecontroleerde licht met behulp van de Arduino || Arme man EEG sensor

Het zou niet geweldig om te schakelen dingen in- of uitschakelen met je geest... !!!Zoals de Puzlebox baan Mobile Edition (http://www.amazon.com/Puzzlebox-Puzlebox-Orbit-Mob... ) of de coole Star Wars Science - Force Trainer ( http://www.amazon.com/S
Arduino gecontroleerd CNC / 3D Printer hybride

Arduino gecontroleerd CNC / 3D Printer hybride

Moeder natuur maakt... Wij bouwen.BuildersBot zekeringen 3D printen & CNC frezen in één Builder's droom "3dprintingindustry.com"De BuilderBot is een Open ontwerp machine, die gebruik maakt van OpenSoftware en Open Hardware. Het is een produc
Arduino-gecontroleerde Smart Home

Arduino-gecontroleerde Smart Home

Dit Instructable werd geschreven door PubNub Evangelist Ian Jennings . Ian's verhaal doorloopt zijn proces van het opbouwen van een Arduino-gecontroleerde smart home model van kras.--Terug in September, onze stichter Stephen en ik spraken over manier
Digitale venster Sticker (Arduino gecontroleerde)

Digitale venster Sticker (Arduino gecontroleerde)

een bumpersticker formaat L.E.D. matrix waarin afbeeldingen worden weergegeven in volgorde van een SD-kaart, voor de productie van een geanimeerde teken of "venster sticker." Arduino gecontroleerd! Ook bevat Windows, Mac en Linux code voor .xbm
Intel® Edison Hands-on dag 3: Licht dimmer

Intel® Edison Hands-on dag 3: Licht dimmer

Licht dimmers zijn apparaten die worden gebruikt om te variëren van de helderheid vaneen licht. Door een rotatie sensor, kunnen we de intensiteit van de lichtopbrengst tune. Meer u de knop draaien, helderder de LED zal worden. Dus laten we proberen o
Versnellingsmeter gecontroleerd lichte handschoenen

Versnellingsmeter gecontroleerd lichte handschoenen

Deze Halloween, heb ik besloten om Alina Starkov uit De Grisha-trilogie door Leigh Bardugo. In de boeken is ze enerzijds en alleen Sun Summoner, doet magie met licht en warmte.Aangezien deze bevoegdheden waren voorbij me, ik samen te stellen een aant
Galvo - Laser Arduino gecontroleerd

Galvo - Laser Arduino gecontroleerd

Arduino gecontroleerd galvo laser. De servo aangedreven spiegels sturen de verlaten een fosforescerende parcours op het blad van de glow-in-the-dark vinyl UV-laser.Oorspronkelijk Gepost op notes.robives.comStap 1:Beginnen met een blad van lichtgevend
Arduino gecontroleerd kookwekker

Arduino gecontroleerd kookwekker

U allen moet heb meegemaakt dat je iets wordt gekookt op uw gasfornuis terwijl aan de andere kant u get drukke TV kijken of krijgen een diepe gesprek hebt dat je je realiseert op het opsporen van een geur die het was volledig verwend alleen vanwege u
Arduino-gecontroleerde Wolf staart

Arduino-gecontroleerde Wolf staart

groeten, of moet ik zeggen, "Aaaaaooooooooooooh!" Maken van uw bekende collega wolf liefhebber graag. Je hebt een innerlijke wolf geest dat zo graag bekend maken dat u mij om te leren hoe om uw zeer eigen animatronic wolf staart, zodat u kunt ec
Arduino-gecontroleerde gordijn

Arduino-gecontroleerde gordijn

In dit nieuwe project, we gecombineerd van elektronica en mechanica, en maakte een Arduino-gecontroleerde gordijn roller.Veel plezier met maken!Stap 1: Planning van het CircuitVoor dit circuit u hebt nodig:1. de roterende Potentiometer2. de Arduino U
Draadloos Arduino gecontroleerde Tank (nRF24L01)

Draadloos Arduino gecontroleerde Tank (nRF24L01)

Hallo!Vandaag zal ik u tonen how to build een Arduino gecontroleerde tank en een afstandsbediening. De 3d afgedrukt delen van de tank (met uitzondering van de controller, bijhouden gids en tank cover) werden ontworpen door timmiclark en kan worden ge
Huisdier Curfew: Een Arduino gecontroleerde huisdier deur

Huisdier Curfew: Een Arduino gecontroleerde huisdier deur

Het probleem: U wilt beperken van de tijd wanneer uw huisdier mee mag naar buiten te gaan. Dit kan zijn omdat de buurt niet veilig voor uw kat of kleine hond in de nacht is (plunderende coyotes voor de geest komt). Maar u wilt uw huisdier te kunnen t