Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

Domotica Device Arduino Integrazioni tipiche

From Aino Wiki

Jump to: navigation, search

Dispositivi

Generici

Pulsanti

Con Arduino posson esser usati in INPUT per determinare dei comportamenti specifici ai circuiti creati. Basta usare dei pin sui qualis i determinerà se è stato premuto o meno un pulsante in base alla corrente che rileveranno, per i pin digitali si capterà se la tensione è alta (5V = HIGH) o bassa (0V = LOW, a massa).

Arduino Pulsanti PullDown e Up 01.jpg

Pulsanti in pull down
Per cui il PIN 8 riceverà lo stato HIGH solo quando il pulsante sarà premuto altrimenti sarà collegato a massa tramite una resistenza da 10 K ohm

Arduino Pulsante PullDown 01.jpg

Pulsanti in pull Up

Display

Usare un display LCD (Compatibile Hitachi 44780 16 colonne per 2 righe) (video di Paolo Aliverti)
Documentazione ufficiale arduino.cc
Risultato finale di un esempio basico:

Arduino Display 16x2 01.jpeg

Come si vede nella foto si è usato un Arduino R4 clone ma la configurazione è identica anche con un Arduino R3.

Pin Display Pin Arduino Descrizione pin del display
1    - GND o VSS GND Al pin GN di Arduino
2    - VDD-VCC 5V Al pin 5V per alimentare il display
3    - V0 (Contrasto) Trimmer da 10KΩ Il trimmer è posto tra 5V e GND, consiglio tenerlo al massimo ovvero > tensione.
4    - RS (Register Select) 12 Determina il comportamento del display, nello stato basso (LOW) il display è in "command mode" altrimenti è allo stato alto (HIGH) e nella modalità "data mode". Lo gestirà la libreria (LiquidCrystal.h) di Arduino in modo trasparente.
5    - RW (Read/Write) GND Se collegato a GND, corrente in stato LOW, il display è in "write mode" quindi riceve dati da scrivere, se collegato a 5V è in modalità "read mode" per leggere quel che il display stà visualizzando (caso raro).
6    - E (Clock enable) 11 Il display può elaborare dati solo il clock interno è abilitato e "da il tempo al chip", quindi alla fine questo PIN abilita o disabilita il display.
7-8 - DB0-DB7 4,3,2,1 Sono i pin dei dati per le operazioni di scrittura.
9-10 ? - ? Sono i pin dei dati.
15  - LED+ 5V Regola la retro illuminazione, riceve 5V.
16  - LED- GND Per la retro illuminazione si collega al negativo.

Schema di collegamento:

Arduino Display 16x2 02.jpeg

Sketch

Prima di creare il seguente sketch di esempio, includere la libreria standard LiquidCrystal:
#include <LiquidCrystal.h>
// Setup con i corrispondenti pin di Arduino: lcd(RegisterSelect,ClockEnable, D4,D5,D6,D7)
LiquidCrystal lcd(12,11, 5,4,3,2); 
 
int contatore = 0;
 
void setup() {
  // Display tipico 216 colonne x 2 righe
  // compatibile Hitachi 44780
  lcd.begin(16,2);  
  lcd.print("Conteggio:");
}
 
void loop() {
  lcd.setCursor(0,1);
  lcd.print(contatore);
  contatore++;
  delay(1000);
}

Adattatore I2C

Allo scopo di semplificare i collegamenti al display quindi ridurre i pin necessari su Arduino si potrà usare il seguente adattatore interfaccia seriale PCF8574 della Texas Instruments. (Guida estrapolata da lastminuteengineers.com lastminuteengineers.com).
I2C-LCD-Display-Pinout.png
L'adattatore accanto al display ha un chip converte i dati I2C da Arduino in dati in parallelo per la comunicazione del display LCD necessari al suo funzionamento.
Adattatore I2C display LCD PCF8574.jpg

Mio test:

Es Arduino con PCF8574.jpeg
  • Sulla sinistra c'è un ponticello/jumper su due pin per far sì che sia alimentata la retroilluminazione.
  • Poiché è previsto che ci possan essere più adattatori (per I2C device) insieme allora sarà necessario, per ciascuno definire l'indirizzo di riferimento e questo si fa agendo su una delle tre coppie di jumpers (etichettati con A0, A1, A2 e che sono accanto al trimmer) mettendoli in corto (unendo i due punti). Se è l'unico adattatore non si fa nulla.

Collegamenti

Adattatore con PCF8574 Arduino R4 Arduino R4 o R3
VCC 5V 5V
GND GND GND
SCL SCL A5 (pin anaologico)
SDA SDA A4 (pin anaologico)

NOTA al primo caricamento potrebbe capitare di:

  • aver invertito qualche filo, non succede nulla al più si vedranno dei caratteri strani sul display.
  • altra cosa importante regolare il contrasto perché se non si vedesse nulla il problema potrebbe essere questo * altro motivo per non vedere nulla o avere il display spento potrebbe essere la assenza del ponticello sui due pin laterali.
  • infine, se avete sbagliato indirizzo al primo parametro nella istanziazione della libreria il display rimarrà bianco.

Sketch

Determinare l'indirizzo I2C
Per scrivere sul display occrre un indirizzo di memoria da fornire nello sketch e potrebbe variare da 0x27 a 0x3F (il default dovrebbe essere 0x27, sostanzialmente le posizioni decimali da 1 a 126). Questa informazione dovrebbe esser fornita nelle istruzioni ma non è un problema in quanto si può procedere per tentativi con uno "scanner" software come nel seguente:

// -------------------- SCANNER ! ------------------------
// Codice PREZIOSO nel caso il canale I2C e condiviso 
// ovvero SCL e SDA sono condivisi tra più dispositivi !!!
#include <Wire.h>
 
void setup() {
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
void loop() {
  int nDevices = 0;
 
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("Scanning...");
 
  for (byte address = 1; address < 127; ++address) {
    //Serial.print(address);
    //Serial.print(", ");
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();
 
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println("  !");
      Serial.print("Ovverosia alla pos decimale: ");
      Serial.println(address, DEC);
 
      ++nDevices;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  } else {
    Serial.println("done\n");
  }
  delay(10000); // Wait 5 seconds for next scan
}

Sketch semplice
La libreria installlata in questo esempio è la libreria dal repository Arduino "LiquidCrystal_I2C":

Libreria Arduino Liquid Crystal I2C.jpg

L'ho un po' complicato per capire se l'elaborazione continua indipendentemente da eventuali errori di visualizzaizone, quindi si usa la seriale al solo scopo di produrre un output certo.

#include <LiquidCrystal_I2C.h>
 
int i = 0;
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
 
void setup() {
  Serial.begin(9600);
 
  lcd.init();
  lcd.clear();         
  lcd.backlight();      // Make sure backlight is on
 
  // Print a message on both lines of the LCD.
  lcd.setCursor(2,0);   //Set cursor to character 2 on line 0
  lcd.print("Hello world!");
 
  lcd.setCursor(2,1);   //Move cursor to character 2 on line 1
  lcd.print("LCD Tutorial");
 
  while (!Serial);
  Serial.println("Conteggio...");
}
 
void loop() {
  Serial.println(i);
  delay(1000);
  if (i == 1) {    
    lcd.clear();
 
    lcd.setCursor(0,0);
    lcd.print("Conteggio...");
  }
 
  lcd.setCursor(0,1);
  lcd.print(i);
 
  i++;
}

Esempio con il testo scorrevole

#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27,16,2);
 
void setup() {
  lcd.init();
  lcd.clear();         
  lcd.backlight();      // Make sure backlight is on
 
  // Print a message
  lcd.print("Giuseppe AINO...");
  delay(1000);  // pause to read the message initially
}
 
void loop() {
  lcd.scrollDisplayLeft();   // scroll everything to the left by one position
  delay(300);                // small delay for visible scrolling speed
}

Dedicati

Arduino Rev4 WiFi

Matrice di LED

Materiale:

Arduino Rev4 matrix-closeup.jpg

Per poter programmare la matrice di LED incorporata occorrerà includere innanzitutto una libreria, la Arduino_LED_Matrix.h, nella sezione setup() va inizializzato il device e poi nella sezione di loop() si carica una matrice di byte ogniuno corrispondente ad un LED da accendere o spegnere o più semplicemente un vettore di 3 esadecimali a 32 bit.
C'è una Web application di Arduino che si può usare per comporre la matrice di punti e si chiama "ledmatrix-editor.arduino.cc LED Matrix Editor" questa genera un file con un vettore di questi array, è un .h da importare al file principale dello sketch .ino.

Arduino LED Matrix Editor.jpg

Esempio di file .h con dei disegni per comporre una animazione:

const uint32_t animation[][4] = {
	{
		0x10828838,
		0x84480002,
		0x9c39429c,
		66
	},
	{
		0x10829446,
		0x24022041,
		0x8090060,
		66
	},
	{
		0x8f15f,
		0xa36c1681,
		0xf8204402,
		66
	},
	{
		0x4625f,
		0xa36c1681,
		0xf8204204,
		66
	}
};

File .ino :

//Per l'animazione della matrice di LED:
//#include <ArduinoGraphics.h>
#include <Arduino_LED_Matrix.h>
#include "MieAnimazioni1.h"
 
 //Inizializzazione oggetto per matrice di LED
ArduinoLEDMatrix matrix;
 
void setup() {
  // start matrice:  
  matrix.begin();
}
 
void loop() {
  matrix.loadFrame(animation[0]); //Aino
  delay(2000);
  matrix.loadFrame(animation[1]); //Cuore
  delay(500);
  matrix.loadFrame(animation[2]); //Alieno1
  delay(500);
  matrix.loadFrame(animation[3]); //Alieno2
  delay(500);
  matrix.loadFrame(animation[1]); //Cuore
  delay(500);
}

Visualizzazione codice C++

Modalità 1

while (!Serial)
while (!Serial)

Mappa e Link


Arduino indice | Arduino | Arduino Progetti


C++ Info fondamentali | Dizionario Elettronica | Dizionario


Parole chiave:

Author