Έλεγχος φορτίων AC με Arduino

Πηγή: Arduino AC Power Control Tutorial

Ρίχνουμε μια εις βάθος ματιά στο υλικό για τη χρήση Διακοπών ( interrupts ) του Arduino για τον έλεγχο φωρτίου σε γραμμές εναλλασόμενης τροφοδοσίας (AC) μέσω ενός triac. Χρησιμοποιώντας έναν ανιχνευτή διέλευσης από το μηδέν, το Arduino θα ανιχνεύσει τον παλμό και στη συνέχεια θα υπολογίσει μια καθυστέρηση για τον έλεγχο της ισχύος εξόδου στο φορτίο.

Περισσότερα σχετικά με τη βασική τάση AC

Σχήμα2

Το Σχ. 2 δείχνει το τροφοδοτικό 5 volt για το Arduino αλλά περιλαμβάνει τη δίοδο αποκλεισμού D2. Στην πλευρά της καθόδου έχουμε φιλτράρει το DC που ρυθμίζεται στα 5 βολτ μέσω U2. Στην πλευρά της ανόδου έχουμε αφιλτράριστο ακατέργαστο συνεχές ρεύμα 120 Hz που πηγαίνει στο LED στον οπτικό-συζευκτήρα 4N25. Η έξοδος από τον συλλέκτη του φωτο-τρανζίστορ πηγαίνει στον ψηφιακό ακροδέκτη 2 του Arduino για την Διακοπή 0. Το ποτενσιόμετρο R3 μεταβαίνει στην αναλογική ακίδα 0 και χρησιμοποιείται για τον υπολογισμό της χρονικής καθυστέρησης για τους παλμούς πυροδότησης του τριακ μισού κύκλου

Το παραπάνω σχήμα δείχνει τη σχέση του παλμού διέλευσης από το μηδέν με το ημιτονοειδές κύμα AC. Ανιχνεύοντας τον παλμό και προγραμματίζοντας μια καθυστέρηση μπορεί κανείς να ελέγξει το επίπεδο ισχύος εξόδου σε ένα φορτίο AC.

Σχήμα 3.

φγη

Το σχήμα 3 δείχνει το κύκλωμα πυροδότησης triac. Ο οπτικός σύνδεσμος MOC3011 χρησιμοποιεί ένα photo triac σε αντίθεση με ένα τρανζίστορ. Οι παλμοί που συγχρονίζονται με τον μισό κύκλο των ημιτονοειδούς κυμάτων εναλλασσόμενου ρεύματος εξάγονται από τον ψηφιακό ακροδέκτη 5 του Arduino στο LED στο MOC3011, το οποίο επίσης χρησιμεύει για την απομόνωση της υψηλής τάσης AC από τα εξαρτήματα χαμηλής τάσης.

Το πάτημα του διακόπτη λειτουργίας θα ενεργοποιήσει τους παλμούς ενεργοποίησης στο MOC3011 ενώ το LED στον ψηφιακό ακροδέκτη 12 είναι ένδειξη ενεργοποίησης. Τα C1 και R6 σχηματίζουν ένα κύκλωμα snubber για επαγωγικά φορτία. Χωρίς θόρυβο εναλλαγής από επαγωγικά φορτία θα προκαλέσει αστοχία πυροδότησης του triac.

Σημειώστε ότι στις γραμμές τροφοδοσίας 60 Hz ο μισός κύκλος είναι 8,35 mSec. ενώ ένα σύστημα 50Hz είναι 10mSec. Ρυθμίστε τη χρονική καθυστέρηση μισού κύκλου για 50 Hz.

/*
Σκοπός: ανίχνευση παλμού διέλευσης από το μηδέν στο INT0 ψηφιακός ακροδέκτης 2, ο οποίος μετά από καθυστέρηση  ενεργοποιεί ένα triac. 
 Έξοδος ισχύος στο triac που ενεργοποιείται από εξωτερικό διακόπτη.
 */

#define triacPulse 5
#define SW 4
#define aconLed 12 

int val;

void setup() {
  pinMode(2, INPUT);
  digitalWrite(2, HIGH); // αντίσταση pull up
  pinMode(triacPulse, OUTPUT);
  pinMode(SW, INPUT);
  digitalWrite(SW, HIGH);
  pinMode(aconLed, OUTPUT);
  digitalWrite(aconLed, LOW);
}

void loop() {
  // έλεγχος για SW κλειστό
  if (!digitalRead(SW)) {
    // ενεργοποίηση τροφοδοσίας
    attachInterrupt(0, acon, FALLING);
    // Η ένδειξη HV είναι ενεργοποιημένη
    digitalWrite(aconLed, HIGH);
  }  // τέλος εάν
  else if (digitalRead(SW)) {
    detachInterrupt(0); // απενεργοποίηση τροφοδοσίας
    // Η ένδειξη HV είναι απενεργοποιημένη
    digitalWrite(aconLed, LOW);
  } // άλλο
} // βρόχος τερματισμού

// έναρξη ρουτίνας διακοπής AC
// η καθυστέρηση() δεν θα λειτουργήσει!
void acon()  
{
  delayMicroseconds((analogRead(0) * 6) + 1000); // διαβάστε την AD1
  digitalWrite(triacPulse, HIGH);
  delayMicroseconds(200);  
  // καθυστέρηση 200 uSec στον παλμό εξόδου για να ενεργοποιήσετε το triac
  digitalWrite(triacPulse, LOW);
}