Lezione 4 su Arduino: Display

Lezione 4 su Arduino: Display

In questa quarta lezione su Arduino, scopriremo un interessante strumento, utile per interfacciare il mondo digitale con quello umano: il display a cristalli liquidi. Con questo strumento, sarà possibile leggere unità fisiche, come l’attuale temperatura in casa, l’ora, lo stato di accensione di un LED e tanto altro. Vedremo questi aspetti dal punto di vista pratico, nei vari esempi proposti.

Requisiti per i programmi

  • Arduino UNO d8023dded193db365b86e925197efd2e.image.240x240
  • Cavi flessibil, LED, Resistenze Schermata 2013-05-24 alle 09.40.56
  • Display $T2eC16hHJI!E9qSO-S8OBRtB+VwRjg~~60_12 Acquistabile su Ebay al costo di 10 Euro
  • DHT22humidity-temperature-sensor-dht22
  • Sensore ad ultrasuonilogo

 

Il collegamento dei fili, per quanto riguarda il Display, è leggermente più complesso rispetto agli esempi precedenti. Tuttavia basta collegare i vari cavi, come riportati nella seguente figura.

LCD_bb

 

 

L’elemento in basso a sinistra non è altro che un potenziometro. Esso non fa altro che far variare la resistenza al suo interno, a seconda della posizione del manopola. Questo permetterà di regolare l’intensità dello schermo.

1° Programma Hello World sul Display 

Quando si impara a programma, il primo esempio mostrato è il famoso Hello World, in cui si mostra a video la scritta “Ciao Mondo”. Allo stesso modo, faremo mostrato sul piccolo schermo, la parola “Ciao Mondo”, sfruttando Arduino.

/*
 Questo programma mostra come uscare il Display LCD per mostrare la parola "Hello World" e tempo da cui è stato accesso

  Il Circuito:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Questo esempio è tratto dal sito di Arduino

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

// Viene inzializzata la libreria del Display con i relativi PIN a cui è connesso il Display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Stampa a video la parola "hello, world!"
  lcd.print("hello, world!");
}

void loop() {
  // Imposta il cursore alla colonna 0, riga 1
  // (nota: line 1 è la seconda riga, dal momento che il conteggio inizia dallo 0):
  lcd.setCursor(0, 1);
  // Stampa a video i secondi passati dal momento del reset
  lcd.print(millis()/1000);
}

Schermata 2013-06-25 alle 09.49.50

 

Ecco il circuito del primo programma

Lez4.1

 

2° Programma Mostriamo la temperatura di casa sul Display

In questo secondo esempio, vedremo come mostrare la temperatura di casa sul nostro Display, sfruttando il sensore DHT22, che è già stato trattato nella seconda Lezione su Arduino

/*
 Questo programma mostra come uscare il Display LCD per mostrare la temperatura di casa

  Il Circuito:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Questo esempio è tratto dal sito di Arduino

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>
#include "DHT.h"

#define DHTPIN 8     // Il pin a cui è collegato il sensore

// Togli il commmento al sensore che vuoi usare
//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connettere il pin 1 (a sinistra) a +5V
// Connettere il pin 2 del sensore alla porta 8
// Connettere il pin 4 (a destra) del sensore  a GROUND
// Connettere una resistenza da 10K tra il pin 2 (data) e il pin 1 (power) del sensore

DHT dht(DHTPIN, DHTTYPE);

// Viene inzializzata la libreria del Display con i relativi PIN a cui è connesso il Display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  dht.begin();
}

void loop() {
  // Legge la temperatura e l'umidità ogni 250 millisecondi!
  // Vengono inizializzate le variabili in cui vengono scritti i valori letti
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  //Imposto la  colonna 0, riga 0
  lcd.setCursor(0,0);
  // print the humidity 
  lcd.print("Humidita' ");
  lcd.print(h);
  lcd.print(" % ");
  //Imposto la  colonna 0, riga 1
  lcd.setCursor(0,1);
  lcd.print("Temp. ");
  lcd.print(t);
  lcd.print(" *C");

  delay(1000);
}

 

display_temperatura

 

 

3° Programma Mostriamo la distanza di un oggetto sul display e accendiamo un LED (una sorta di sensori di parcheggio)

In questo terzo esempio, mostriamo come utilizzare Arduino, con il display, con il sensore ad ultrasuoni, per visualizzare la distanza di un oggetto e utilizzeremo un LED rosso, per indicare che l’oggetto è troppo vicino.

 

/*
 Questo programma mostra come uscare il Display LCD per mostrare la parola "Hello World" e tempo da cui è stato accesso

  Il Circuito:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Questo esempio è tratto dal sito di Arduino

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // LED

int green = 30;
int orange = 15;
int red = 14;
long duration, distance; 

// Inizializziamo i 3 LED

int ledgreen = 10;
int ledorange = 9;
int ledred = 13;

// Viene inzializzata la libreria del Display con i relativi PIN a cui è connesso il Display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);

   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
   // Iniziliazzo i 3 LED
   pinMode(ledgreen, OUTPUT); 
   pinMode(ledorange, OUTPUT); 
   pinMode(ledred, OUTPUT); 
}

void loop() {
  /* La seguente funzione permette di ricavare la distanza a cui si trova un oggetto, vicino al sensore */
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 

 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);

/* Calcola la distanza in centimetri dall'oggetto*/
 distance = duration/58.2;
 delay(500);

 if (distance>=green) {
   green_on();
   print_lcd();
    }

  if (green<=distance<green) {
    orange_on();
    print_lcd();

  }
 if (distance<=red) {
      red_on();
      print_lcd();
 }

}

// Funnziona che stampa sul display la distanza
void print_lcd () {

   // Imposta il cursore alla colonna 0, riga 1
  // (nota: line 1 è la seconda riga, dal momento che il conteggio inizia dallo 0):
  lcd.setCursor(0, 0);
  // Stampa a video i secondi passati dal momento del reset
  lcd.print("Distanza ");
  lcd.print(distance);
  lcd.print(" cm ");
}

// Accende il LED verde
void green_on() {
   digitalWrite(ledgreen, HIGH);
   digitalWrite(ledorange, LOW);
   digitalWrite(ledred, LOW);
}

// Accende il LED arancione
void orange_on () {
    digitalWrite(ledgreen, LOW);
    digitalWrite(ledorange, HIGH);
    digitalWrite(ledred, LOW);
}

// Accende il LED rosso
void red_on () {
      digitalWrite(ledgreen, LOW);
      digitalWrite(ledorange, LOW); 
      digitalWrite(ledred, HIGH);
}

 

Display_distance

 

Ecco il circuito del terzo programma.

Lez4.3

Blogger