Vai al contenuto

Utente:Fedy/Arduino

Da Wikiversità, l'apprendimento libero.

OROLOGIO CON ARDUINO

Il progetto che segue è pensato per visualizzare l'ora su un display, ed è stato realizzato mediante l'uso di:

- UN ARDUNO

display

- UNA BREADBOARD

- 2 PULSANTI

- UN MODULO RTC

-UN DISPLAY

- 2 RESISTENZE DA 10 KOHM

- DEI CAVETTI DI COLLEGAMENTO


DESRIZIONE DEL PROGETTO

Il progetto è realizzato in questo modo:

- è presente un modulo RTC che genera il tempo per arduino in maniera tale da ottenere un real time clock, mentre invece il display serve per visualizzare l'ora.

inoltre sono presenti 2 pulsanti che servono per regolare le ore ed in minuti, e sono gestiti dalla variabile int.


SCHEMA ELETTRICO


- è presente un display a segmenti con una propria libreria che permette di visualizzarer l'ora

- è presente un modulo rtc che fornisce l'ora ad arduino

- sono presenti anche 2 pulsanti che, gestiti tramite la funzione int, sono in grado di regolare l'ora e i minuti


SCHEMA DI MONTAGGIO


CODICE

//Definisco le librerie utilizzate per il progetto
#include <DS3231.h>
#include <Wire.h>
#include <TM1637Display.h>

//Imposto l'orologio
DS3231 Orologio;

//Imposto il display
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

//Dichiaro le variabili e le costanti
int Ore, Minuti, Secondi;
bool H, HH;
int B_Ore = HIGH;
int B_Minuti = HIGH;

void setup() {
  Serial.begin(9600);
  Wire.begin(); 
  display.setBrightness(0x0f); //imposto la luninosità del display
  pinMode(4, INPUT); //inserisco il pin 4 come ingresso
  pinMode(5, INPUT); //inserisco il pin 5 come ingresso
}

void loop() {
  //inserisco i valori delle ore, dei minuti e dei secondi, che vengono memorizzati nelle variabili
  Ore = Orologio.getHour(H, HH);
  Minuti = Orologio.getMinute();
  Secondi = Orologio.getSecond();
  
  Serial.print(Ore);
  Serial.print(":");
  Serial.print(Minuti);
  Serial.print(":");
  Serial.print(Secondi);
  Serial.println("");
  //variabile del tempo
  int Tempo = ((Ore*100) + Minuti);
  //Scrive sul display il valore del tempo 
  display.showNumberDecEx(Tempo, (0x80 >> 1), true,4,0);

  //prima fase per il controllo dei pulsanti e del lampeggio dei due punti
  for(int i=0; i<50; i++){
  B_Ore = digitalRead(5);
  B_Minuti = digitalRead(4);
  if(B_Ore == HIGH || B_Minuti == HIGH){
    delay(2);
    }
  else{
    delay(10);
    }
    }
  //Modifico i valori dei minuti o delle ore
  B_Ore = digitalRead(5);
  B_Minuti = digitalRead(4);
  if(B_Ore == HIGH && B_Minuti == LOW){
    if(Ore<24){Ore=Ore+1; Orologio.setHour(Ore);}
    if(Ore>=24){Orologio.setHour(00);}
    }
  if(B_Minuti == HIGH && B_Ore == LOW){
    if(Minuti<60){Minuti=Minuti+1; Orologio.setMinute(Minuti);}
    if(Minuti>=60){Orologio.setMinute(00);}
    }

  //Scrive sul display il valore del tempo 
  display.showNumberDecEx(Tempo, (0x80 >> 2), true,4,0);

  //Seconda fase per il controllo dei pulsanti e il lampeggio dei due punti.
  for(int i=0; i<50; i++){
  B_Ore = digitalRead(5);
  B_Minuti = digitalRead(4);
  if(B_Ore == HIGH || B_Minuti == HIGH){
    delay(2);
    }
  else{
    delay(10);
    }
    }
}


CONCLUSIONI

Lo scopo di questo progetto era quello di realizzare un orologio digitale con arduino, e per farlo ho utilizzato un modulo RTC in maniera tale da ottenere l'ora da visualizzare in un display a segmenti, il tutto regolato da 2 pulsanti gestiti dalla variabile int in grado di regolare le ore ed i minuti.

Per concludere il progetto è riuscito, rispettando lo scopo, e quindi arduino riesce a mostrare l'ora sul display.