Ceci est une ancienne révision du document !
Réaliser un variateur 220V pouvant être piloté par une platine Arduino via une liaison série.
{| align=“center” width=“40%” class=“wikitable”
! scope=“col” | Nom ! scope=“col” | Référence ! scope=“col” | Quantité
width=“50%” |
Résistance
width=“25%” |
150K 1W
width=“25%” |
2
width=“50%” |
Résistance
width=“25%” |
330 1W
width=“25%” |
1
width=“50%” |
Résistance
width=“25%” |
270 1/4W
width=“25%” |
1
width=“50%” |
Résistance
width=“25%” |
120 1/4W
width=“25%” |
1
width=“50%” |
Diode de redressement
width=“25%” |
1N4007
width=“25%” |
4
width=“50%” |
Triac
width=“25%” |
BT139-600
width=“25%” |
1
width=“50%” |
Optocoupleur
width=“25%” |
MOC3021M
width=“25%” |
1
width=“50%” |
Optocoupleur
width=“25%” |
6N138
width=“25%” |
1
50px|Attention.svg Lors du branchement sur le réseau 220V, risque de mort, il est nécessaire de prendre toute les précautions pour éviter que des pièces métalliques entrent en contact avec le montage.
Pour le bon fonctionnement du montage il faut bien faire attention de relier le circuit de gâchette du triac entre le pin 2 (Main terminal 2) et le pin 3 (Gate) du triac.
unsigned int tempo = 0; boolean flag = false; void setup(){ pinMode(7, OUTPUT); // Le port digital 7 est configuré en sortie pour envoyer l'information au MOC3021 Serial.begin(9600); attachInterrupt(0, zeroDetect, CHANGE); // L'interruption est gérée sur le port digital 2 } void loop(){ if (Serial.available() > 0) { tempo = 9600 - Serial.read() * 35; // Calcul la temporisation dans la demi-phase } } void zeroDetect() { noInterrupts(); if (flag) { // Permet de gérer le bon changement de l'interruption flag = false; } else { flag = true; delayMicroseconds(tempo); // Attente sur la demi-phase courante digitalWrite(7, HIGH); delayMicroseconds(50); // Durée nécessaire pour que le triac s'amorce digitalWrite(7, LOW); } interrupts(); }
Le script peut être amélioré. Il faudrait bien distinguer la gestion de l'interruption lors du passage à zéro du secteur, calibrer automatiquement l'intervalle du passage à zéro.
import processing.serial.*; Serial portSerie; // Crée un objet de la classe Serial int val; // Donnée envoyée par le port série PFont font; void setup() { size(200, 600); String nomPort = Serial.list()[0]; portSerie = new Serial(this, nomPort, 9600); fill(0); stroke(255 ,0 ,0); font = loadFont("HelveticaNeue-36.vlw"); textFont(font); } void draw() { background(255); rect(50, 50, 100, 500); if (sourisSurRect() == true) { // Teste si la souris est au-dessus du rectangle val = (mouseY - 50)*255/500; portSerie.write(val); } line(50, (val*500/255 + 50), 150, (val*500/255 + 50)); text(val, 50, 590); } boolean sourisSurRect() { // Teste si la souris est au-dessus du rectangle return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 550)); }