26
ELECTRONICS LAB [WITH ARDUINO] Daniele Costarella Teatro Carlo Gesualdo / Casina Del Principe – Avellino – 28 > 31 agosto 2013 Salvatore Carotenuto >>> DAY #3

Electronics LAB [with Arduino] | DAY 3

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Electronics LAB [with Arduino] | DAY 3

ELECTRONICS LAB [WITH ARDUINO]

Daniele Costarella

Teatro Carlo Gesualdo / Casina Del Principe – Avellino – 28 > 31 agosto 2013

Salvatore Carotenuto

>>> DAY #3

Page 2: Electronics LAB [with Arduino] | DAY 3

Rights to copy

Electronics LAB [with Arduino]28 > 31 agosto 2013 2

Attribution – ShareAlike 3.0 Unported

You are free:● to Share - to copy, distribute and transmit the work● to Remix – to adapt the work

Under the following conditions:

Attribution – You must attribute the work in the manner specified by the authors.

Share Alike – If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.

Your fair use and other rights are in no way affected by the above.To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/.

Page 3: Electronics LAB [with Arduino] | DAY 3

Il programma di oggi

ambient and human interaction:● sensori di luminosità;● sensori di temperatura;● sensori di prossimità;● comunicazione seriale;● audio input;● la libreria Cap-Sense per il touch detection;

effetti di luce in base a stimoli esterni:● VU meters;● realtime sound generation;

3Electronics LAB [with Arduino]28 > 31 agosto 2013

Page 4: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 4

Sensori di luminosità / colore

Programmable Color Light-to-Frequency Converter Modulehttp://www.elecfreaks.com/store/programmable-color-lighttofrequency-converter-module-p-258.html?zenid=3ceplft7hf1shglnamuta9cp02

Page 5: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 5

Sensori di temperatura

MCP9700http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022289

Page 6: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 6

Sensori di prossimità / distanza

Distance Sensing With Ultrasonic Sensor and Arduinohttp://www.tautvidas.com/blog/2012/08/distance-sensing-with-ultrasonic-sensor-and-arduino/

Page 7: Electronics LAB [with Arduino] | DAY 3

Elementi di programmazione

28 > 31 agosto 2013 Electronics LAB [with Arduino] 7

Il ciclo while e do/while

Simbolo Spiegazione

while (condizione) { // … < codice da ripetere > // … }

Esegue un blocco di codice fin tanto che la condizione test è vera.

do { // … < codice da ripetere > // … }while (condizione)

Esegue un blocco di codice fin tanto che la condizione test è vera,con la differenza, però, che il ciclo viene eseguito almeno una volta.La condizione, infatti, viene testata a fine ciclo.

Page 8: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 8

Comunicazione seriale: pilotiamo un LED “a comando”

//Flussi 2013 DAY 3: Comunicazione seriale

int LED = 12;// stringa per contenere il comando ricevutoString command = ""; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { command = ""; // azzera la stringa // finchè ci sono caratteri disponibili... while(Serial.available()) { char c = Serial.read(); // legge un carattere... command.concat(c); // ...e lo concatena alla stringa delay(10); // attende 10 msec } // controlla se sono stati letti dei caratteri if(command != "") parseCommand(); // interpreta il comando ricevuto } [ Continua … ]

Page 9: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 9

Comunicazione seriale: pilotiamo un LED “a comando”

// in questa funzione interpretiamo il comando ricevutovoid parseCommand() { if( command == "ON" ) // se abbiamo ricevuto "ON"... { digitalWrite(LED, HIGH); Serial.println("LED ON!"); } else { if( command == "OFF" ) // se abbiamo ricevuto "OFF"... { digitalWrite(LED, LOW); Serial.println("LED OFF!"); } else { // se siamo qui, significa che il comando // non è tra quelli ammessi Serial.println("Uh?!?"); } } }

Page 10: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 10

Audio input: mettiamo “le orecchie” al nostro Arduino

Semplice preamplificatore con Amplificatore Operazionale LM358 (o equivalenti)

Page 11: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 11

Audio input: mettiamo “le orecchie” al nostro Arduino

Page 12: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 12

Audio input: mettiamo “le orecchie” al nostro Arduino. Ecco il codice:

/* FLUSSI 2013 Arduino CLAP Sensor

Questo sketch permette di accendere un LED quando viene rilevato un suono di una certa intensità, come un battito di mani */

// LED collegato al pin 12int LED = 12;

void setup() { pinMode(LED, OUTPUT); // avvia il collegamento seriale Serial.begin(9600); }

[ Continua … ]

Page 13: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 13

Audio input: mettiamo “le orecchie” al nostro Arduino. Ecco il codice:

void loop() { // leggiamo l'output del sensore collegato sul pin A0 int sensorValue = analogRead(A0);

Serial.println(sensorValue);

// controlliamo se il livello del suono rilevato // supera una certa soglia. // Nota: questa soglia va calibrata in base al // livello del segnale in uscita dal preamplificatore, // e all'intensità del rumore che vogliamo rilevare if (sensorValue > 580) { // accendiamo il LED per 500 msec digitalWrite(LED, HIGH); delay(500); } else { digitalWrite(LED, LOW); } delay(50); }

Page 14: Electronics LAB [with Arduino] | DAY 3

Elementi di programmazione

28 > 31 agosto 2013 Electronics LAB [with Arduino] 14

Arduino: le librerie ?!?!??

Page 15: Electronics LAB [with Arduino] | DAY 3

Elementi di programmazione

28 > 31 agosto 2013 Electronics LAB [with Arduino] 15

Arduino: le librerie

Una libreria, in Informatica, è un insieme di funzioni o strutture datipredisposte per essere collegate a un programma software attraversoopportuno collegamento.

Il termine libreria nasce da un'errata traduzione dell'inglese library(letteralmente, biblioteca), ma ormai è così diffuso nel vocabolariodei professionisti da essere accettato quale esatta traduzione.

Anche l'IDE di Arduino supporta l'uso delle librerie. Grazie ad esse, possiamo estendere rapidamente le funzionalità del nostro softwareutilizzando, appunto, le funzioni presenti nelle librerie, scritte da altrepersone della community di Arduino.

Allo stesso modo, possiamo creare delle nostre librerie e metterle adisposizione di tutta la community.

Page 16: Electronics LAB [with Arduino] | DAY 3

Elementi di programmazione

28 > 31 agosto 2013 Electronics LAB [with Arduino] 16

Arduino: le librerie

Sulla sezione playgrounddel sito ufficiale Arduinopossiamo trovare tuttele librerie per gli usipiù disparati

http://playground.arduino.cc//Main/LibraryList

Page 17: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 17

La libreria CapSense

Un corpo umano che si avvicina al sensore capacitivo introduce una variazione di capacità nel circuito.

Il microcontrollore è in grado di misurare tale variazione, ed è quindi possibile un'interazione.

Page 18: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 18

La libreria CapSense: installazione

Come per le altre librerie per Arduino, l'installazione di CapSense consiste semplicemente nello scaricare da internet un archivio compresso e decomprimerlo nella directory libraries presente nella directory di default degli sketches.

Per conoscere il path di questa directory, basta selezionare File → Preferences nell'IDE di Arduino

Page 19: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 19

La libreria CapSense: montiamo il circuito...

Page 20: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 20

...e scriviamo il codice

#include <CapacitiveSensor.h>

//CapSense Library Demo Sketch

// LED sul pin 13#define LED 13

// resistore da 1 megaohm tra i pin 4 e 2// nota: aumentando il valore del resistore, è// possibile aumentare la distanza di rilevamento// pin 2: sensor pinCapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);

void setup() { // imposta il pin del LED come uscita digitale pinMode(LED, OUTPUT); // // disattiva l'autocalibrazione sul canale 1 cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // // inizializza la comunicazione seriale Serial.begin(9600); } [Continua...]

Page 21: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 21

...e scriviamo il codice

void loop() { long start = millis(); long total = cs_4_2.capacitiveSensor(30);

// check on performance in milliseconds ????? Serial.print(millis() - start);

// stampa il valore del sensore sulla porta seriale Serial.print(total); Serial.print("\t");

// accende o spegne il LED in base al valore rilevato digitalWrite(LED, (total > ????) ? HIGH : LOW); // ritardo necessario per la porta seriale delay(10); }

Page 22: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 22

Effetti di luce in base a stimoli esterni: costruiamo un semplice VU-Meter

Page 23: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 23

Effetti di luce in base a stimoli esterni: costruiamo un semplice VU-Meter

//Flussi 2013 DAY 3: il VU-Meter

#define INPUT_PIN 0 // audio input pin#define NUMERO_LED 0 // numero led sul circuito

#define INPUT_MAX 1024 // massimo valore ammesso in input// soglia per singolo LED#define STEP_LED INPUT_MAX / NUMERO_LED

// definiamo i pin utilizzati per i LEDint led[] = { 2, 3, 4, 5, 6, 7, 8, 9 };

int inputLevel = 0; // livello del segnale in ingresso

int i; // variabile usata per i cicli

void setup(){// definiamo tutti i pin dei LED come outputfor (i = 0; i < NUMERO_LED; i++)

{pinMode(led[i], OUTPUT);}

}

Page 24: Electronics LAB [with Arduino] | DAY 3

Human and Ambient Interaction

28 > 31 agosto 2013 Electronics LAB [with Arduino] 24

Effetti di luce in base a stimoli esterni: costruiamo un semplice VU-Meter

void loop(){// legge il livello dell'inputinputLevel = analogRead(INPUT_PIN);

// accende o spegne i LED a seconda del livello lettofor (i = 0; i < NUMERO_LED; i++)

{if(inputLevel > (STEP_LED * i))

digitalWrite(led[i], HIGH);else

digitalWrite(led[i], LOW);}

}

Page 25: Electronics LAB [with Arduino] | DAY 3

Realtime sound generation

28 > 31 agosto 2013 Electronics LAB [with Arduino] 25

La libreria MOZZI

http://sensorium.github.io/Mozzi/

Page 26: Electronics LAB [with Arduino] | DAY 3

FINE... HAPPY HACKING!