Arduino gecontroleerd licht dimmer (4 / 15 stap)

Stap 4: Arduino gecontroleerd licht dimmer: de software


Zoals besproken in de vorige pagina van de theoretische, is de software vrij eenvoudig.
Wilt u uw eigen software te ontwikkelen is al ubehoefte te doen:
Wachten op de zerocrossing
Een specifieke wachttijd tussen 0 en 9090 microseconden (9090 = 10.000-10)
yr TRIAC inschakelen
Wachten over 10us (dat wil zeggen de tijd moet u ervoor zorgen dat de TRIAC brandt)
Schakel yr TRIAC (in feite, je enige verwijderen de triggersignal aan de TRIAC, de TRIAC zal blijven tot de volgende zerocrossing)

Ik schets kort de stroom van het programma dat ik heb gebruikt:

(zorg ervoor dat je de onderstaande 'Opmerking')

De nul X-ing-signaal genereert een interrupt.
Bij 50Hz die onderbreken is elke 10ms of 10.000uS
Bij 60Hz die onderbreken is-elke 8.333 ms of 8333 ons
De interrupt routine dan de schakelaars op de Triac na een specifieke tijd. Die tijd ligt in de lus van het hoofdprogramma.
Aangezien het programma verschilt het dimmen van volledige uitgeschakeld in 128 stappen (dat is gewoon een keuze die werd gemaakt, zou 100 stappen ook), bij 50 Hz moeten we de stappen voor het worden van 75 Amerikaanse en bij 60Hz moeten ze worden 65 VS

Het werkt als volgt:
De interrupt-functie "zero_crosss_int" wordt aangeroepen telkens wanneer een nul-kruising is gedetecteerd, dat is 100times per seconde. Het enige functie is om de tijd die de Triac is ingeschakeld om de waarde van de variabele 'dimmer'
In de hoofdlus van het programma is de werkelijke waarde van die variabele ingesteld

http://www.inmojo.com http://www.inmojo.com < /a > Pin | Interrrupt # | Arduino Platform---2 | 0 | Alle - maar het is INT1 op de Leonardo-3 | 1 | Alle - maar het is INT0 op de Leonardo-18 | 5 | Arduino Mega enige 19 | 4 | Arduino Mega slechts 20 | 3 | Arduino Mega slechts 21 | 2 | Arduino Mega alleen 0 | 0 | Leonardo 1 | 3 | Leonardo 7 | 4 | The Arduino-Due Leonardo heeft geen standaard interrupt-pinnen als een iterrupt kan worden aangesloten op almosty een pin. In het programma gekozen pin 2 * / int AC_LOAD = 3; Uitvoer naar Opto Triac pin int dimmen = 128; Dimmen van niveau (0-128) 0 = ON, 128 = OFF /* AC Voltage dimmer with Zero cross detection Author: Charith Fernanado <a href="http://www.inmojo.com"> http://www.inmojo.com </a> Adapted by DIY_bloke License: Creative Commons Attribution Share-Alike 3.0 License. Attach the Zero cross pin of the module to Arduino External Interrupt pin Select the correct Interrupt # from the below table (the Pin numbers are digital pins, NOT physical pins: digital pin 2 [INT0]=physical pin 4 and digital pin 3 [INT1]= physical pin 5) check: <a href="http://arduino.cc/en/Reference/attachInterrupt"> http://www.inmojo.com </a> Pin | Interrrupt # | Arduino Platform --------------------------------------- 2 | 0 | All -But it is INT1 on the Leonardo 3 | 1 | All -But it is INT0 on the Leonardo 18 | 5 | Arduino Mega Only 19 | 4 | Arduino Mega Only 20 | 3 | Arduino Mega Only 21 | 2 | Arduino Mega Only 0 | 0 | Leonardo 1 | 3 | Leonardo 7 | 4 | Leonardo The Arduino Due has no standard interrupt pins as an iterrupt can be attached to almosty any pin. In the program pin 2 is chosen */ int AC_LOAD = 3; // Output to Opto Triac pin int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF 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 } //the interrupt function must take no parameters and return nothing void zero_crosss_int() //function to be fired at the zero crossing to dim the light { // Firing angle calculation : 1 full 50Hz wave =1/50=20ms // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) // For 60Hz => 8.33ms (10.000/120) // 10ms=10000us // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65 int dimtime = (75*dimming); // For 60Hz =>65 delayMicroseconds(dimtime); // Wait till firing the TRIAC digitalWrite(AC_LOAD, HIGH); // Fire the TRIAC delayMicroseconds(10); // triac On propogation delay // (for 60Hz use 8.33) Some Triacs need a longer period digitalWrite(AC_LOAD, LOW); // No longer trigger the TRIAC (the next zero crossing will swith it off) TRIAC } void loop() { for (int i=5; i <= 128; i++){ dimming=i; delay(10); } } de interrupt-functie moet nemen geen parameters en terugkeer niets void zero_crosss_int() //function worden ontslagen bij de nul doorkomst aan dim het licht {/ / Firing hoek berekening: 1 volledige 50Hz Golf = 1/50 = 20ms / / elke zerocrossing dus: (50Hz) -> 10ms (cyclus 1/2) / / voor 60 Hz = > 8.33ms (10.000/120) / / 10ms = 10000us / / (10000us - 10us) / 128 = 75 (ongeveer) voor 60 Hz = > 65 int dimtime = (75 * dimmen); / / voor 60 Hz = > 65 delayMicroseconds(dimtime); / / Wait tot het afvuren van de TRIAC-digitalWrite (AC_LOAD HOGE); Brand de TRIAC-delayMicroseconds(10); Triac op propagation delay / / (voor 60Hz gebruiken 8.33) sommige Triacs moet een langere periode digitalWrite (AC_LOAD, laag); Niet meer leiden tot de TRIAC (de volgende nul overschrijding zal swith op vandoor) TRIAC} int AC_pin = 3;//Pin to OptoTriac byte dim = 0; //Initial brightness level from 0 to 255, change as you like! void setup() { Serial.begin(9600); pinMode(AC_pin, OUTPUT); attachInterrupt(0, light, FALLING);//When arduino Pin 2 is FALLING from HIGH to LOW, run light procedure! } void light() { if (Serial.available()) { dim = Serial.read(); if (dim < 1) { //Turn TRIAC completely OFF if dim is 0 digitalWrite(AC_pin, LOW); } if (dim > 254) { //Turn TRIAC completely ON if dim is 255 digitalWrite(AC_pin, HIGH); } } if (dim > 0 && dim < 255) { //Dimming part, if dim is not 0 and not 255 delayMicroseconds(34*(255-dim)); digitalWrite(AC_pin, HIGH); delayMicroseconds(500); digitalWrite(AC_pin, LOW); } } void loop() { } 

Over de software: theoretisch in de lus kunt u variabele 'ik' beginnen '0'. Echter, aangezien de timing in de interrupt is een beetje een benadering met behulp van "0" (volledig op) kon verknoeien de timing een beetje. hetzelfde geldt voor 128 (volledig af) maar dat lijkt minder kritisch. Of '5' of misschien '1' is de limiet voor uw set-up is een kwestie van proberen, uw bereik kan gaan van bijvoorbeeld 2 tot en met 126 in plaats van 0-128. Als iemand een meer precieze manier heeft om de timing in de interrupt zou ik graag horen.
Natuurlijk is het niet nodig om te werken met interrupts. Het is ook mogelijk om de nul kruising pin om naar 0 te gaan houden polling.

Hoewel de software met een interrupt om te bepalen van het moment van nul crosssing werkt, is het nog steeds niet zo efficiënt omdat de tijd (dimtime) we wachten moeten na de nul oversteek voordat de triac wordt afgevuurd is letterlijk 'wachten' in de nul Kruis onderbreken functie.

Het zou efficiënter instellen van een timer onderbreken om te vuren op het juiste moment, zodat in de tussentijd de arduino iets anders kunt doen. Een dergelijk programma kan worden gevonden in stap

OPMERKING

Nogmaals: gewoon de bovenstaande verklaring: dit programma is een demo van hoe u de dimmer controleren kunt. Het is niet en efficiënt programma als het grootste deel van haar tijd te wachten. Het is daarom niet het meest geschikt om te combineren met andere taken van de processor. Wenst u een efficiënter gebruik van de programma een timer in plaats van vertraging

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