marți, 13 decembrie 2011

Arduino - Controlează turația unui cooler cu PWM

      În acest articol voi descrie o posibilă schemă de control al turației unui cooler cu PWM (Pulse Width Modulation) cu ajutorului unei plăci de dezvoltare Arduino.

      Placa va comanda în impulsuri un circuit de tranzistori puși în montaj Darlington, folosit ca driver pentru cooler. Este vorba de circuitul TIP-122, în capsulă TO-220 format din 2 tranzistori, rezistențe și o diodă. Acest circuit suporta o tensiune comandată de maxim 100V. Se poate folosi capsula TIP-120 pentru o tensiune maximă de 60V, suficientă pentru ceea ce ne propunem. Coolerul poate fi unul a cărei tensiune nominală este de 12V.
      Mai jos este schema bloc a montajului Darlington:



      Schema circuitului de test poate arăta ca in figura de mai jos:



      Intrarea circuitului folosește ca parametru de intrare analogRead(0) pentru a citi valoarea intensității luminoase de la un fotorezistor (RDL - rezistor dependent de lumină). În funcție de intensitatea luminoasă se citește o valoare convertită de ADC în plaja 0..1023. Deoarece functiei PWM i se pot asigna valori de la 0 la 254 se va divide această valoare cu 4.
      Sursa de 12 V care alimentează motorul este separată de sursa plăcii Arduino, dar au aceeași masă. 
      În schemă se poate folosi opțional un LCD pentru a afișa de exemplu valoarea pe care o citește cu analogRead de exemplu.
      Pinul 9 (PWM) al plăcii Arduino este conectat la baza (B) lui TIP-122. Coolerul este conectat la colector (C) iar emitorul (E) este conectat la masă.

      Mai jos este partea de citire a valorii fotorezistorului si comanda coolerului.

int ldr = 0;
ldr = analogRead(0)/4; //se citește pinul analog iar valoarea se împarte la 4
 
// dacă lumina este intre cele 2 valori mai jos (lumina camerei) este
// marită cu 50 pentru ca coolerul să se rotească mai repede.

if ( ldr < 125 && ldr > 40 ) {
ldr = ldr + 50;
}

// dacă valoarea citită este mai mică de 40, coolerul nu pornește

if ( ldr < 40 ) {
ldr = 0;
}

// altfel coolerul se rotește conform valorii ldr de până la 255

// trimite valoarea PWM la baza lui TIP-122 (pinul 9)
analogWrite(9,ldr);
delay(500); //după 500 milisecunde se reia citirea

0 comentarii:

Trimiteți un comentariu