Post on 16-Sep-2018
transcript
2
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
3
ARDUINO 1/3
Una piattaforma hardware Open Source di basso costo e grande versatilità
Ideale per interagire con l'ambiente attraverso sensori ed attuatori
4
ARDUINO 2/3
Una ambiente software per la programmazione del dispositivo, funzionante su tutti i sistemi operativi (Mac, Linux e Windows).
13
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
16
Arduino Software
● L'ambiente prende spunto dall'editor GUI di Processing(www.processing.org)
● Sketch: programma scritto per girare su Arduino.
● Disponibile perMac, Win e Linux
19
Test
● Carico uno sketch di esempio
● Compilalo (verifica da errori)
● Caricare il programmasu Arduino
● Esecuzione sketch
20
Status messages
● Upload corretto
● Errore sulla selezionedella porta USB
● Errore sulla selezione della piattaforma
Dipende dalla complessità dello sketch
22
Linguaggio di programmazione
● Linguaggio simile al C
#include …#define …
// vars declaration//...
void setup(){
}
void loop(){
}
23
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
24
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
25
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
28
Es. 1 – LED lampeggiante
int ledPin = 12; // LED connected to digital pin 13
void setup() {
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
}
30
Es. 2 – LED on/off con pulsanteint ledPin = 12; // LEDint switchPin = 11; // SWITCH int ledState = LOW; // Stato del LED on/off
void setup() { pinMode(ledPin, OUTPUT); //pin 12 in modalità OUTPUT pinMode(switchPin, INPUT); //pin 11 in modalità INPUTdigitalWrite(ledPin, LOW);
}
void loop() {
if(digitalRead(switchPin)){
ledState = !ledState;digitalWrite(ledPin, ledState);
delay(500);}
}
31
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
32
Es. 3 - LED on/off con pulsanteint ledPin = 12; // LEDint ledState = LOW; // 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 criticainterrupts();
}
void change_state(){ledState = !ledState;
}
33
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
36
Es. 4 – Dissolvenza LEDint ledPin = 11; // LED
void setup() { }
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);
} }
38
Es. 5 – Interruttore luminoso
int ledPin = 12; // LEDint sensorPin = 0; // Fotoresistenzaint val = 512; // Sogli accensione LED
void setup() {pinMode(ledPin, OUTPUT);
}
void loop() {
if(analogRead(sensorPin) > val){digitalWrite(ledPin, HIGH);
}else {digitalWrite(ledPin, LOW);
}}
40
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 )
43
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);
}
44
Es. 6 – Lettura di intensità luminosa
Serial Monitor
Analog reading = 940Analog reading = 938Analog reading = 932Analog reading = 882Analog reading = 882Analog reading = 878Analog reading = 840Analog reading = 623Analog reading = 502Analog reading = 421Analog reading = 409Analog reading = 412Analog reading = 412Analog reading = 415
46
Es. 7 – Controllo luci da PCint 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);
}
47
Comunicazione Seriale I2C
● 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● Molti dispositivi integrano I2C
49
Dispositivi I2C
Touch sensor EEPROM
Trasmettitori RF
LCD display
Bussola
Sensore di Temperatura & Umidità
Molti altri.(giroscopio, accelerometro,
Motori...)
51
Es. 8 – Com. I2C tra due Arduino//I2C MASTER
#include <Wire>
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
Wire.begin(); // join i2c bus (address optional for master)
}
void loop()
{
digitalWrite(ledPin, HIGH);
Wire.beginTransmission(4); // trsmette al device #4
Wire.send(HIGH); // invia un byte
Wire.endTransmission(); // fine trasmissione
delay(1000);
digitalWrite(ledPin, LOW);
Wire.beginTransmission(4); // trsmette al device #4
Wire.send(LOW); // invia un byte
Wire.endTransmission(); // fine trasmissione
delay(1000);
}
52
Es. 8 – Com. I2C tra due Arduino//I2C SLAVE
#include <Wire>
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
}
void loop()
{
delay(100);
}
// funzione eseguita quando si ricevono dati dal master
// questa funzione è registrata come evento
void receiveEvent(int howMany)
{
digitalWrite(ledPin, Wire.receive());
}
53
Librerie
● EEPROM● Ethernet● Firmata (comunicazioni seriali con applicazioni sul PC)● LiquidCrystal (visualizzazione su LCD)● SD● Servo, Stepper (controllo di motori) ● SoftwareSerial● Wire (TWI/I2C)● ...