Ventilatore con Arduino UNO

 

Buongiorno a tutti! Finalmente anche io mi sono munito di un Arduino! E quale miglior modo per inaugurarlo che con un bel progetto sul blog?

Quello che andremo a fare è un piccolo ventilatore, la cui veocità è regolabile tramite una manovella – termine tecnico!

 

COSA CI SERVE

Potete trovare tutti i componenti singolarmente ai link che vi abbiamo suggerito. Se non li avete magari potete pensare di fare come noi: acquistare il Super Kit della Sunfounder.

 

CIRCUITO

Iniziamo subito creando il nostro circuito.

Inseriamo il potenziometro all'interno della nostra board in modo che sporga un po' , così che sia facile da settare.

Il potenziometro che stiamo usando è da 50K Ohm. Ha tre pin:

  1. Il pin di destra va collegato al GND.
  2. Il pin di sinistra va collegato all'alimentazione a 5 Volt.
  3. Il pin centrale va invece collegato al pin analogico A5 del nostro Arduino.

Successivamente posizioniamo il chip che andrà a controllare il motore. In questo caso useremo il L293D. Ecco il suo schema tecnico:

e se volete approfondire di più ecco il suo datasheet.

In ogni caso, come possiamo vedere dallo schema tecnico, abbiamo 16 pin. Vediamo il loro funzionamento:

  • Pin 1: è l'alimentazione del chip per attivare il controllo del motore uno. 5 Volt.
  • Pin 9: è l'alimentazione del chip per attivare il controllo del motore due.
  • Pin 8: è il pin di alimentazione del motore 1. Lo colleghiamo a 5 Volt o a una batteria esterna.
  • Pin 16: è l'alimentazione per il motore 2.
  • Pin 2 e 7: sono i pin logici per il controllo del motore 1.
  • Pin 15 e 10: sono i pin logici per il controllo del motore 2.
  • Pin 3 e 6: sono i pin di output per il motore 1.
  • Pin 14 e 11: sono i pin di output per il motore 2.
  • Pin 4 e 5: GND e Heat Sink per il motore 1.
  • Pin 12 e 13: GND e Heat Sink per il motore 2.

Colleghiamo i pin 1, 8 e 9 ai 5 Volt per dare energia. Successivamente colleghiamo i pin 2 e 7 ai pin 8 e 9 di Arduino per controllare digitalmente il motore.

Colleghiamo i terminali del motore ai pin 3 e 6 per poter controllare il motore.

Ora non ci resta che collegare GND e Heat Sink, rispettivamente pin 4 e 5, a GND della breadboard.

 

 

SKETCH

Colleghiamo arduino (con il circuito aperto magari – stacca i 5 Volt o il GND) e apriamo l'editor Arduino e incolliamo il seguente codice.

const int motorIn1 = 9;
const int motorIn2 = 8; 
const int analogIn = 5; 

void setup() {
    pinMode(motorIn1, OUTPUT); 
    pinMode(motorIn2, OUTPUT); 
}

//Funzione per attivare il motore.
void clockwise(int speed) {
    analogWrite(motorIn1, speed);
    analogWrite(motorIn2, 0);
}

void loop() {
    int inputValue = analogRead(analogIn);
    int input = map(inputValue, 0, 1023, 800, 1000);
    
    if(inputValue < 100) {
        input = 0;
    }

clockwise(input);
}

Iniziamo a spiegare il codice.

const int motorIn1 = 9;
const int motorIn2 = 8; 
const int analogIn = 5; 

in questa fase di inizializzazione delle costanti. Le prime due sono i pin logici del motore. AnalogIn invece serve a prendere in input il segnale analogico dal potenziometro.

Passiamo alla funzione setup:

void setup() {
    pinMode(motorIn1, OUTPUT);
    pinMode(motorIn2, OUTPUT);
}

In cui settiamo i due pin, come output digitali, in modo da poter controllare il motore.

void clockwise(int speed) {
    analogWrite(motorIn1, speed); //set the speed of motor
    analogWrite(motorIn2, 0); //stop the motorIn2 pin of motor
}

in questa funzione andiamo ad attivare il motore. Per impostare la marcia avanti al nostro motore basta dare un output alto al primo pin motorIn1 e 0 al secondo pin motorIn2. In questo modo faremo muovere il motore in senso orario (occhio il senso dipende anche da come avete collegato i jumper al motore).

void loop() {
    int inputValue = analogRead(analogIn);
    int input = map(inputValue, 0, 1023, 800, 1000);

    if(inputValue < 100) {
        input = 0;
    }

    clockwise(input); //rotate clockwise
}

Ecco la funzione più importante di tutto il codice: il loop!

Per prima cosa andiamo a leggere l'input analogico per conoscere a che velocità il nostro motore deve girare.

L'istruzione più complicata è:

int input = map(inputValue, 0, 1023, 800, 1000);

Questa è la riga più esotica di tutto il codice. Il potenziometro ci restituisce un input analogogico, che è convertita in un input intero che va da 0 a 1023.

Ora: il nostro motore che utilizziamo, non ha 1024 livelli di velocità e non si attiva al di sotto di 800. Di conseguenza dovremo mappare l'input da 0 a 1023 su una scala di 800 a 1000, e lo facciamo tramite la funzione map.

A questo punto introduciamo lo spegnimento del motore sotto il valore 100, per lo stesso motivo di prima. In più essendo analogico, non avremo mai esattamente 0 come valore di input, ma varierà intorno a quest'ultimo valore.

if(inputValue < 100) {
    input = 0;
}

infine lanciamo il motore:

clockwise(input);

 

 

CONCLUSIONI

Ovviamente è un progettino che non vi ruberà molto tempo. Consiglio: provate a scrivere uno sketch che oltre una certa soglia del potenziometro, invece che spegnere il motore lo inverta.

Presto vi daremo la nostra soluzione sul canale telegram e agli iscritti della newsletter e-mail.

 

Dottore in Informatica. Appassionato di computer fin dal primo PC Olivetti con Windows 95 e la bellezza di 8 MB di RAM.
Utilizzatore Linux da 5 anni, credo profondamente nella filosofia open source.
Dopo tante distro provate sul mio fidato Toshiba, uso Fedora per lo studio e il divertimento.

Lascia un commento