Salve ragazzi sono di nuovo io. Questa volta sono alle prese con un progetto che si dovrebbe occupare di far variare la luminosità di una lampada 220V attraverso in circuito di zero crossing.
Prima di procedere a creare il progetto ho girovagato per molti siti e in particolare ho fatto riferimento alla discussione trattata in precedenza qui:
http://arduino.cc/forum/index.php/topic,89415.45.html
dopo aver seguito i consigli dati in quella discussione ho deciso di cimentarmi anche io in questa esperienza. Grazie all'aiuto dato da maxvetro in quella discussione sono arrivato a creare il mio piccolo circuitino montato su piastra mille fori. Il circuito è il seguente:
se vedete bene il circuito è riprodotto proprio sulle false righe del circuito proposto da maxvetro.
Il mio problema è che non funziona. La lampada si accende per qualche frazione di secondo e poi si spegne senza fare il dimmer.
Ho provato diversi codici tra i quali:
int var = 1000 ;
void setup()
{
attachInterrupt(0, zero_cross_detect, RISING);
pinMode(10, OUTPUT);
Serial.begin(9600);pinMode ( 3 , INPUT );
}
void zero_cross_detect() {
delayMicroseconds(var);
digitalWrite(10, HIGH);
delayMicroseconds(1000);
digitalWrite(10, LOW);}
void loop()
{if ( digitalRead(3) == LOW ) {
var = var + 50 ;
delay ( 10 ) ;
if ( var == 9000 ) {
var = 1000;}
}
}
e anche
int AC_LOAD = 3; // Output to Opto Triac pin
int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF
/* Due to timing problems, the use of ‘0’ can sometimes make the circuit
flicker. It is safer to use a value slightly higher than ‘0’
*/
void setup()
{
pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
attachInterrupt(0, zero_crosss_int, RISING);
// Chooses '0' as interrupt for the zero-crossing
}
// 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// 10ms=10000us
// (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65
int dimtime = (75*dimming); // For 60Hz =>65
delayMicroseconds(dimtime); // Off cycle
digitalWrite(AC_LOAD, HIGH); // triac firing
delayMicroseconds(10); // triac On propogation delay
//(for 60Hz use 8.33)
digitalWrite(AC_LOAD, LOW); // triac Off
}
void loop() {
for (int i=5; i <= 128; i++)
{
dimming=i;
delay(10);
}
}
Adesso mi chiedo potrebbero essere i CNY17-3 che non sono adatti a questo scopo? Se avete qualche consiglio da suggerirmi sarò più che felice di seguirvi nel limite del possibile
Un grazie in anticipo a tutto il forum!Siete davvero grandi!
PS: utilizzo un Arduino 2009