Utente:Daniel Gostoli/Arduino

Incremento e decremento di un numero in un display a 7 segmenti in base a tasto

modifica

Il progetto che segue è pensato per la realizzazione di un conta-click, comandato da due pulsanti (uno per incrementare e uno per decrementare il numero), in grado di mostrare su uno schermo LCD a sette segmenti tutti i numeri naturali compresi tra 0 e 9.

Descrizione del progetto

modifica

Il sistema è composto da:

  • Pulsanti, hanno il compito di incrementare e decrementare il valore del contatore.
  • Display LCD a sette segmenti a catodo comune, mostra i numeri compresi tra 0 e 9 del contatore.

Schema elettrico

modifica
 
schema elettrico

Schema di montaggio

modifica

Sono state implementate due resistenza a ridosso dei pulsanti per limitare la corrente ed evitare di bruciare i pin d'ingresso.

 

Per la realizzazione del progetto è stato utilizzato il seguente codice:

int pinA  = 2;
int pinB  = 3;
int pinC  = 4;
int pinD  = 5;
int pinE  = 6;
int pinF  = 7;				//definiamo le variabili  
int pinG  = 8;
int pinButton = 9;
int pinButton2 = 10;
int counter = 0;
int valButtonOld = LOW;
int valButtonOld2 = LOW;

void setup() {
  pinMode(pinA, OUTPUT);
  pinMode(pinB, OUTPUT);
  pinMode(pinC, OUTPUT);
  pinMode(pinD, OUTPUT);
  pinMode(pinE, OUTPUT);		//impostiamo i pin come OUTPUT o INPUT
  pinMode(pinF, OUTPUT);
  pinMode(pinG, OUTPUT);
  pinMode(pinButton, INPUT);
  pinMode(pinButton2, INPUT);
 

  digitalWrite(pinA,HIGH);
  digitalWrite(pinB,HIGH);
  digitalWrite(pinC,HIGH);
  digitalWrite(pinD,HIGH);		//assegnamo lo stato dei pin 
  digitalWrite(pinE,HIGH);
  digitalWrite(pinF,HIGH);
  digitalWrite(pinG,HIGH);
  
}

void loop() {
  
  
 int valButton = digitalRead(pinButton);	
 if(valButton==HIGH&&valButtonOld==LOW)		//il pulsante è stato premuto 				
 {
   counter=counter+1;		//incremento del contatore  
  
 } 
   valButtonOld=valButton;		//aggiornamento del valore della variabile 		
  
 int valButton2 = digitalRead(pinButton2);
 if(valButton2==HIGH&&valButtonOld2==LOW)		//il pulsante 2 è stato premuto 
 {
   counter=counter-1;		//decremento del contatore 
  
 } 
   valButtonOld2=valButton2;		//aggiornamento del valore della variabile
   
 
  if (counter==0)
   {
     digitalWrite(pinA,HIGH);
     digitalWrite(pinB,HIGH);
     digitalWrite(pinC,HIGH);
     digitalWrite(pinD,HIGH);		//scrittura numero 0
     digitalWrite(pinE,HIGH);
     digitalWrite(pinF,HIGH);
     digitalWrite(pinG,LOW);
   }
  if (counter==1)
   {
    digitalWrite(pinA,LOW);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,LOW);		//scrittura numero 1
    digitalWrite(pinE,LOW);
    digitalWrite(pinF,LOW);
    digitalWrite(pinG,LOW);
   }
  if (counter==2)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,LOW);
    digitalWrite(pinD,HIGH);		//scrittura numero 2
    digitalWrite(pinE,HIGH);
    digitalWrite(pinF,LOW);
    digitalWrite(pinG,HIGH);
   }
  if (counter==3)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,HIGH);		//scrittura numero 3
    digitalWrite(pinE,LOW);
    digitalWrite(pinF,LOW);
    digitalWrite(pinG,HIGH);
   }
   if (counter==4)
   {
    digitalWrite(pinA,LOW);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,LOW);			//scrittura numero 4
    digitalWrite(pinE,LOW);
    digitalWrite(pinF,HIGH);
    digitalWrite(pinG,HIGH);
   }
   if (counter==5)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,LOW);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,HIGH);		//scrittura numero 5
    digitalWrite(pinE,LOW);
    digitalWrite(pinF,HIGH);
    digitalWrite(pinG,HIGH);
   }
  if (counter==6)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,LOW);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,HIGH);		//scrittura numero 6
    digitalWrite(pinE,HIGH);
    digitalWrite(pinF,HIGH);
    digitalWrite(pinG,HIGH);
   }
  if (counter==7)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,LOW);			//scrittura numero 7
    digitalWrite(pinE,LOW);
    digitalWrite(pinF,LOW);
    digitalWrite(pinG,LOW);
   }
  if (counter==8)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,HIGH);		//scrittura numero 8
    digitalWrite(pinE,HIGH);
    digitalWrite(pinF,HIGH);
    digitalWrite(pinG,HIGH);
   }
  if (counter==9)
   {
    digitalWrite(pinA,HIGH);
    digitalWrite(pinB,HIGH);
    digitalWrite(pinC,HIGH);
    digitalWrite(pinD,LOW);			//scrittura numero 9
    digitalWrite(pinE,LOW);
    digitalWrite(pinF,HIGH);
    digitalWrite(pinG,HIGH);
   }
  if (counter==10)
    {						//reset del contatore 
    counter = 0;
    }
  if (counter==-1)
    { 						//reset del contatore
    counter = 0;
    }
  
  }

Conclusioni

modifica

In conclusione, questo progetto funziona come un conta-click: quando si preme il pulsante a destra il numero aumenta mentre se si preme quello a sinistra il numero diminuisce.

 

Progetto realizzato da Daniel Gostoli.

Motore DC regolabile tramite potenziometro

modifica

Il progetto che segue è pensato per la creazione di una ventola, realizzata con un motore DC controllato da un transistor, in grado di azionarsi tramite un pulsante e regolabile attraverso un potenziometro.

Descrizione del progetto

modifica

Il sistema è composto da:

  • Motore DC, che ruotando fa girare una ventola;
  • Transistor NPN;
  • Pulsante;, che aziona o ferma il motore;
  • Potenziometro, che regola la velocità del motore DC.

Schema elettrico

modifica

lo schema elettrico del circuito effettuato è il seguente.

 
schema elettrico

Alla scheda di Arduino vengono collegati i componenti utilizzando sia i pin analogici, per il potenziometro, sia i pin pwm, per il motore DC

Schema di montaggio

modifica

 

Per la realizzazione del progetto è stato utilizzato il seguente codice:

int pinMotore = 3;
int pinPulsante = 4;
int pinPotenziometro = A0;
int bootTime = 300;

Definisco le variabili e i pin dei componenti, più il boot time, ossia la velocità massima del motore alla sua accensione, indipendentemente dal potenziometro.

bool enabled = false;
int lastEnableValue = LOW;
unsigned long startTime = 0;

Creo delle variabili per la lettura dello stato del pulsante, e utilizziamo "unsigned long" per memorizzare il tempo in cui il motore è rimasto acceso.

int velocitàMotore = map(analogRead(pinPotenziometro), 0, 1023, 70, 255);
int enableValue = digitalRead(pinPulsante);

La velocità del motore viene impostata attraverso la lettura del potenziometro. I pin però restutiscono un valore da 0 a 1023, non compatibili con i pin pwm (da 0 a 255) quindi attraverso la funzione map effettuo una conversione proporzionale (70 è il valore minimo sotto il quale il motore smette di girare).

void setup(){
  pinMode(pinMotore, OUTPUT);
  pinMode(pinPulsante, INPUT);
}

void loop(){
  
  if(enableValue != lastEnableValue && enableValue == HIGH){
    if(!enabled){
      startTime = millis();
    }
    enabled = !enabled;
  }

Leggo il valore del pulsante, se esso è cambiato ed è uguale a HIGH, impostiamo il tempo attuale nella variabile startTime

  lastEnableValue = enableValue;

  if(enabled){
    if((millis()-startTime) > bootTime){
      analogWrite(pinMotore, velocitàMotore);
    }else{
      analogWrite(pinMotore, 255);
    }
  }else{
    analogWrite(pinMotore, 0);
  }
  delay(50);
}

Dopo aver aggiornato la variabile che verrà utilizzata nella if successiva, se il motore era acceso, dopo il tempo di accensione, viene letto il valore del potenziometro e si imposta la velocità del motore. Se siamo ancora nella fase inziale impostiamo il valore a 255 indipendentemente dal potenziometro. Se invece viene premuto il pulsante di nuovo impostiamo la velocità a 0.

Conclusioni

modifica

In conclusione, la realizzazione di questo circuito permette, grazie ad un pulsante, l'accensione e lo spegnimento del motore DC; la velocità del motore DC è regolata da un potenziometro, realizzando così una ventola.

 


Progetto è stato realizzato da Daniel Gostoli e Sasha Fasolo Massoli.