54
ARDUINO Ing. Francesco Giurlanda [email protected]

ARDUINO - unipi.it · 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à

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • ARDUINO

    Ing. Francesco [email protected]

  • 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à venduteFondatori: 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).

  • 5

    ARDUINO 3/3

    Una vasta comunità di sviluppo

    www.arduino.cc

  • 6

    ARDUINO UNO

  • 7

    ARDUINO Mega 2560

  • 8

    ARDUINO BT

  • 9

    ARDUINO Nano

  • 10

    ARDUINO Mini

  • 11

    ARDUINO LilyPad

  • 12

    DIY

  • 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

  • 14

    Elementi sulla scheda

  • 15

    Moduli d'espansione (SHIELD)

  • 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

  • 17

    Collegamento e Arduino board

  • 18

    GUI

  • 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

  • 21

    Ciclo di sviluppo

  • 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

  • 26

    Bread Board

    Connessioni

  • 27

    Es. 1 – LED lampeggiante

  • 28

    Es. 1 – LED lampeggianteint 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}

  • 29

    Es. 2 – LED on/off con pulsante

    pulldown

    ArduinoPin 11

  • 30

    Es. 2 – LED on/off con pulsanteint ledPin = 12; // LEDint switchPin = 11; // SWITCH int ledState = LOW; // Stato del LED on/offvoid 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/offvoid 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

  • 34

    PWM

  • 35

    Es. 4 – Dissolvenza LED

  • 36

    Es. 4 – Dissolvenza LEDint ledPin = 11; // LEDvoid setup() { }

    void loop() {

    for(int fadeValue = 0 ; fadeValue = 0; fadeValue -=5) {

    analogWrite(ledPin, fadeValue); delay(30);

    } }

  • 37

    Es. 5 – Interruttore luminoso

    ArduinoPin A0

    pulldown

  • 38

    Es. 5 – Interruttore luminoso

    int ledPin = 12; // LEDint sensorPin = 0; // Fotoresistenzaint val = 512; // Sogli accensione LEDvoid setup() {

    pinMode(ledPin, OUTPUT);}

    void loop() {

    if(analogRead(sensorPin) > val){digitalWrite(ledPin, HIGH);

    }else {digitalWrite(ledPin, LOW);

    }}

  • 39

    Sensori resistivi

  • 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 )

  • 41

    Comunicazione Seriale EIA RS-232

    Arduino non è una vera periferica USB

  • 42

    Es. 6 – Lettura di intensità luminosa

    pulldwon

    Arduino Pin A0

    USBPC

  • 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

  • 45

    Es. 7 – Controllo luci da PC

    PCUSB

  • 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

  • 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

  • 48

    I2C & ARDUINO● Funzione integrata nel chip

    ATmegaXXX● Lib. Wire● Pin A4 → SDA● Pin A5 → SCK

  • 49

    Dispositivi I2C

    Touch sensor EEPROM

    Trasmettitori RF

    LCD display

    Bussola

    Sensore di Temperatura & Umidità

    Molti altri.(giroscopio, accelerometro,

    Motori...)

  • 50

    Es. 8 – Com. I2C tra due Arduino

    I2C Master I2C Slave

  • 51

    Es. 8 – Com. I2C tra due Arduino//I2C MASTER

    #include

    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

    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)● ...

  • 54

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54