Programmazione in movimento 2 - Le periferiche

Termometro

  • Come sensore di temperatura ho scelto un Dallas DS18B20
  • Questo sensore, a differenza del più comune LM35, è un sensore digitale.
  • L'interfaccia è molto semplice, anche se non standard. Utilizza un solo filo di dato bidirezionale, infatti si chiama OneWire.
  • Il datasheet lo trovate all'indirizzo: https://datasheets.maximintegrated.com/en/ds/DS18B20-PAR.pdf
  • Per usarlo però non è necessario implementare tutta la comunicazione OneWire.

Termometro

  • Si possono scaricare due librerie che gestiscono la comunicazione e le conversioni

Librerie

Librerie

  • Una libreria non è altro che un file in C++, con la sua intestazione .h ed alcuni file di corredo che contengono informazioni per l'IDE
  • Una libreria può anche contenere altri file .cpp o .h.
  • Comunque tutti i file di una libreria devono stare all'interno di una directory con il nome del file .cpp o .h principali, senza estensione.
  • Questa directory dovrà essere all'interno della directory libraries, che si trova nella directory dei nostri sketch, in genere sketchbook

Librerie

  • Per installare le nostre librerie occorrerà quindi scompattarle, creare una directory con il nome corretto, copiarvi i file e inserire questa directory in libraries

Esempio con il termometro

  • Nell'immagine a sinistra si vede come collegare il sensore di temperatura.
  • Dato che abbiamo una basetta di breakout con già il sensore, la resistenza e un connettore a tre piedini, collegheremo questa basetta alla breadboard ed elimineremo la resistenza.
  • Ora, dato che abbiamo installato le nostre librerie, potremo iniziare il nostro sketch richiamandole:
    #include <OneWire.h>
    #include <DallasTemperature.h>

Esempio con il termometro

  • Ora dovremo creare un'istanza della classe che gestisce il bus 1-Wire:
    OneWire oneWire(ONE_WIRE_BUS);
  • E della classe che gestisce il sensore:
    DallasTemperature dm18b20(&oneWire);
  • Nella funzione setup, dopo aver inizializzato alla solita maniera la seriale, inizializzeremo anche il sensore:
    dm18b20.begin();
  • Nella funzione loop quindi richiederemo la lettura delle temperature:
    dm18b20.requestTemperatures();

Esempio con il termometro

  • E per finire leggeremo il valore della temperatura che sarà ritornato dalla funzione:
    dm18b20.getTempCByIndex(0)
  • Faccio notare che 1-wire è un bus, quindi possono essere connessi più sensori di temperatura (o altri sensori 1-wire) che potranno essere letti variando l'indice (0 nel nostro caso) tra parentesi.

Bus I2C

  • Il Bus I2C (I Quadro Ci o I Due Ci - Inter Integrated Circuit) dal 1992 è un bus seriale standard di connessione tra circuiti integrati
  • Elettricamente prevede due soli segnali: un dato ed un clock.
  • Logicamente prevede uno o più master ed uno o più slave che comunicano
  • Una volta acquisito il bus, un master seleziona uno slave utilizzando il suo ID a 7 bit, questo consente di avere sino a 127 slave su un bus

Bus I2C

  • Arduino prevede la gestione hardware della comunicazione I2C, utilizzando i piedini A4 (SDA) e A5 (SDL).
  • La gestione software del bus I2C è fatta tramite la libreria wire, che è una libreria standard che non va installata, ma va comunque richiamata.

Bussola

Esempio con bussola

  • Eseguiremo i collegamenti come mostrato (il rettangolo a destra è la bussola, di fatto inserita sulla breadboard)

Ponte H

Gestione motori

Sensore a ultrasuoni

Interfaccia bluetooth con HC05

[any material that should appear in print but not on the slide]