ARDUINO
Ing. Francesco Giurlanda
[email protected]
Cos'è ARDUINO?
Il progetto nasce ad Ivrea, nel 2005.
Obiettivo: realizzare un sistema
di prototipizzazione economico.
Al Maggio del 2011 più
di 300.000 unità vendute
Fondatori: Massimo Banzi e
David Cuartielles
2
ARDUINO 1/3
Una piattaforma hardware
Open Source di basso
costo e grande versatilità
Ideale per interagire con
l'ambiente attraverso
sensori ed attuatori
3
ARDUINO 2/3
Una ambiente software per
la programmazione del
dispositivo, funzionante su
tutti i sistemi operativi (Mac,
Linux e Windows).
4
ARDUINO 3/3
Una vasta comunità di
sviluppo
www.arduino.cc
5
ARDUINO UNO
6
ARDUINO Mega 2560
7
ARDUINO BT
8
ARDUINO Nano
9
ARDUINO Mini
10
ARDUINO LilyPad
11
DIY
12
Caratteristiche tecniche
●
Microcontroller
ATmega168, ATmega328 o ATmega2560
●
Operating Voltage
5V
●
Input Voltage (recommended) 7-12V
●
Input Voltage (limits)
6-20V
●
Digital I/O Pins
14 (of which 6 provide PWM output)
●
Analog Input Pins
6
●
DC Current per I/O Pin
40 mA
●
DC Current for 3.3V Pin
50 mA
●
Flash Memory
32 KB (ATmega328) of which 0.5 KB used by
bootloader
●
SRAM
2 KB (ATmega328)
●
EEPROM
1 KB (ATmega328)
●
Clock Speed
16 MHz
13
Elementi sulla scheda
14
Moduli d'espansione (SHIELD)
15
Arduino Software
●
●
●
L'ambiente prende
spunto dall'editor GUI
di Processing
(www.processing.org)
Sketch: programma
scritto per girare su
Arduino.
Disponibile per
Mac, Win e Linux
16
Collegamento e Arduino board
17
GUI
18
Test
●
●
●
●
Carico uno sketch di
esempio
Compilalo
(verifica da errori)
Caricare il programma
su Arduino
Esecuzione sketch
19
Status messages
Dipende dalla complessità dello sketch
●
●
●
Upload corretto
Errore sulla selezione
della porta USB
Errore sulla selezione
della piattaforma
20
Ciclo di sviluppo
21
Linguaggio di programmazione
●
Linguaggio simile al C
#include …
#define …
// vars declaration
//...
void setup(){
}
void loop(){
}
22
Tipi di dato
●
●
Tipi base:

1 byte: boolean, [unisigned] char, byte

2 byte: [unsigned] int, word

4 byte: [unsigned] long, float, double
Tipi derivati:


Array:
char message[6];
int vals[] = {2, 3, 4};
Classi
23
Funzioni più utilizzate
●
pinMode(): configura un pin come INPUT o OUTPUT
●
digitalRead(): legge lo stato di un pin HIGH/LOW
●
digitalWrite(): imposta lo stato di un pin
HIGH/LOW
●
analogRead(): legge da un pin analogico
●
analogWrite(): imposta un valore ”analogico”
●
delay(): attende un intervallo di tempo
●
millis(): ritorna il valore corrente del timer
24
INPUT/OUTPUT digitali
●
13 pin INPUT/OUTPUT digitali
●
Erogano una corrente max di 40mA
●
Anche i 6 pin analogici possono essere utilizzati
come pin digitali
25
Bread Board
Connessioni
26
Es. 1 – LED lampeggiante
27
Es. 1 – LED lampeggiante
int ledPin =
12;
void setup()
{
// LED connected to digital pin 13
pinMode(ledPin, OUTPUT);
//pin 12 in modalità OUTPUT
}
void loop()
{
digitalWrite(ledPin, HIGH);
// LED on
delay(1000);
// attesa di un secondo
digitalWrite(ledPin, LOW);
// LED off
delay(1000);
// attesa di un secondo
}
28
Es. 2 – LED on/off con pulsante
Arduino
Pin 11
pulldown
29
Es. 2 – LED on/off con pulsante
int ledPin = 12;
int switchPin = 11;
int ledState = LOW;
// LED
// SWITCH
// Stato del LED on/off
void setup()
{
pinMode(ledPin, OUTPUT);
//pin 12 in modalità OUTPUT
pinMode(switchPin, INPUT); //pin 11 in modalità INPUT
digitalWrite(ledPin, LOW);
}
void loop()
{
if(digitalRead(switchPin))
{
ledState = !ledState;
digitalWrite(ledPin, ledState);
delay(500);
}
}
30
Interrupts
●
2 pin su Arduino UNO (2, 3)
●
6 pin su Arduino Mega (2, 3, 18, 19, 20, 21)
●
Funzioni:
attachInterrupt(interrupt, func, mode)
detachInterrupt(interrupt)
●
Sezioni critiche:
noInterrupts()
interrupts()
●
Mode: LOW, CHANGE, RISING, FALLING
31
Es. 3 - LED on/off con pulsante
int ledPin = 12;
int ledState = LOW;
// LED
// Stato del LED on/off
void setup()
{
pinMode(ledPin, OUTPUT);
//pin 12 in modalità OUTPUT
attachInterrupt(0, change_state, RISING);
}
void loop()
{
digitalWrite(ledPin, ledState);
noInterrupts();
//sezione critica
interrupts();
}
void change_state(){
ledState = !ledState;
}
32
INPUT/OUTPUT analogico
●
INPUT


●
Atmega contiene un convertitore analogico-digitale
(A/D) a 6 canali
Risoluzione 10bit (analogRead(...) 1024 valori)
OUTPUT

Pulse-Width Modulation (PWM)

analogWrite(...) valori tra 0 e 255

Frequenza 490Hz
33
PWM
34
Es. 4 – Dissolvenza LED
35
Es. 4 – Dissolvenza LED
int ledPin =
11;
void setup()
}
{
// LED
void loop()
{
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
{
analogWrite(ledPin, fadeValue);
delay(30);
}
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
{
analogWrite(ledPin, fadeValue);
delay(30);
}
}
36
Es. 5 – Interruttore luminoso
Arduino
Pin A0
pulldown
37
Es. 5 – Interruttore luminoso
int ledPin = 12;
int sensorPin = 0;
int val = 512;
// LED
// Fotoresistenza
// Sogli accensione LED
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
if(analogRead(sensorPin) > val){
digitalWrite(ledPin, HIGH);
}else {
digitalWrite(ledPin, LOW);
}
}
38
Sensori resistivi
39
Comunicazione Seriale
EIA RS-232
●
●
Arduino può utilizzare la connessione USB per
comunicare con il PC (lib. Serial)

Serial.begin(): prepara all'utilizzo di Serial

Serial.print(): invio di dati

Serial.read(): ricezione dati
Comunicare con altri dispositivi
(sensori/attuatori che comunicano attraverso
protocollo EIA RS-232 )
40
Comunicazione Seriale
EIA RS-232
Arduino non è una vera periferica USB
41
Es. 6 – Lettura di intensità
luminosa
Arduino
Pin A0
pulldwon
PC
USB
42
Es. 6 – Lettura di intensità
luminosa
int photocellPin = 0;
int photocellReading;
void setup() {
Serial.begin(9600);
}
void loop() {
photocellReading = analogRead(photocellPin);
Serial.print("Analog reading = ");
Serial.println(photocellReading);
delay(100);
}
43
Es. 6 – Lettura di intensità
luminosa
Serial Monitor
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
Analog
reading
reading
reading
reading
reading
reading
reading
reading
reading
reading
reading
reading
reading
reading
=
=
=
=
=
=
=
=
=
=
=
=
=
=
940
938
932
882
882
878
840
623
502
421
409
412
412
415
44
Es. 7 – Controllo luci da PC
USB
PC
45
Es. 7 – Controllo luci da PC
int val;
void setup() {
Serial.begin(9600);
for(int i = 2; i < = 11; i++)
pinMode(i, OUTPUT);
}
void loop() {
val = Serial.read();
if(val >= '0' && val <= '9'){
val = val – '0' + 2;
// Conversione da codifica ASCII a num. Pin
ledsoff();
digitalWrite(val, HIGH);
}
}
void ledsoff() {
for(int i = 2; i < = 11; i++)
digitalWrite(i, LOW);
}
46
Comunicazione Seriale
2
IC
●
Inter Integrated Circuit (I2C): un sistema di
comunicazione seriale bifilare utilizzato tra
circuiti integrati
●
Un master, uno o più slave
●
Fino a 127 dispositivi, max data rate 1Mbps
●
2
Molti dispositivi integrano I C
47
2
I C & ARDUINO
●
Funzione integrata nel chip
ATmegaXXX
●
Lib. Wire
●
Pin A4 → SDA
●
Pin A5 → SCK
48
2
Dispositivi I C
Touch sensor
EEPROM
Bussola
Trasmettitori RF
Molti altri.
(giroscopio, accelerometro,
Motori...)
LCD display
Sensore di
49
Temperatura & Umidità
2
Es. 8 – Com. I C tra due Arduino
I2C Master
I2C Slave
50
2
Es. 8 – Com. I C tra due Arduino
//I2C MASTER
#include <Wire>
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
Wire.begin();
}
void loop()
{
digitalWrite(ledPin, HIGH);
Wire.beginTransmission(4);
Wire.send(HIGH);
Wire.endTransmission();
delay(1000);
digitalWrite(ledPin, LOW);
Wire.beginTransmission(4);
Wire.send(LOW);
Wire.endTransmission();
delay(1000);
}
// join i2c bus (address optional for master)
// trsmette al device #4
// invia un byte
// fine trasmissione
// trsmette al device #4
// invia un byte
// fine trasmissione
51
2
Es. 8 – Com. I C tra due Arduino
//I2C SLAVE
#include <Wire>
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
Wire.begin(4);
Wire.onReceive(receiveEvent);
}
void loop()
{
delay(100);
}
// join i2c bus with address #4
// register event
// funzione eseguita quando si ricevono dati dal master
// questa funzione è registrata come evento
void receiveEvent(int howMany)
{
digitalWrite(ledPin, Wire.receive());
}
52
Librerie
●
EEPROM
●
Ethernet
●
Firmata (comunicazioni seriali con applicazioni sul PC)
●
LiquidCrystal (visualizzazione su LCD)
●
SD
●
Servo, Stepper (controllo di motori)
●
SoftwareSerial
●
Wire (TWI/I2C)
●
...
53
54
Scarica

ARDUINO