1. ELECTRONICS LAB [WITH ARDUINO]
Daniele Costarella
Teatro Carlo Gesualdo / Casina Del Principe – Avellino – 28 > 31 agosto 2013
Salvatore Carotenuto
>>> DAY #3
2. 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/.
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
4. Human and Ambient Interaction
28 > 31 agosto 2013 Electronics LAB [with Arduino] 4
Sensori di luminosità / colore
Programmable Color Light-to-Frequency Converter Module
http://www.elecfreaks.com/store/programmable-color-lighttofrequency-converter-module-p-258.html?zenid=3ceplft7hf1shglnamuta9cp02
5. Human and Ambient Interaction
28 > 31 agosto 2013 Electronics LAB [with Arduino] 5
Sensori di temperatura
MCP9700
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en022289
6. Human and Ambient Interaction
28 > 31 agosto 2013 Electronics LAB [with Arduino] 6
Sensori di prossimità / distanza
Distance Sensing With Ultrasonic Sensor and Arduino
http://www.tautvidas.com/blog/2012/08/distance-sensing-with-ultrasonic-sensor-and-arduino/
7. 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.
8. 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 ricevuto
String 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 … ]
9. 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 ricevuto
void 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?!?");
}
}
}
10. 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)
11. Human and Ambient Interaction
28 > 31 agosto 2013 Electronics LAB [with Arduino] 11
Audio input: mettiamo “le orecchie” al nostro Arduino
12. 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 12
int LED = 12;
void setup()
{
pinMode(LED, OUTPUT);
// avvia il collegamento seriale
Serial.begin(9600);
}
[ Continua … ]
13. 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);
}
15. 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 dati
predisposte per essere collegate a un programma software attraverso
opportuno collegamento.
Il termine libreria nasce da un'errata traduzione dell'inglese library
(letteralmente, biblioteca), ma ormai è così diffuso nel vocabolario
dei 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 software
utilizzando, appunto, le funzioni presenti nelle librerie, scritte da altre
persone della community di Arduino.
Allo stesso modo, possiamo creare delle nostre librerie e metterle a
disposizione di tutta la community.
16. Elementi di programmazione
28 > 31 agosto 2013 Electronics LAB [with Arduino] 16
Arduino: le librerie
Sulla sezione playground
del sito ufficiale Arduino
possiamo trovare tutte
le librerie per gli usi
più disparati
http://playground.arduino.cc//Main/LibraryList
17. 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.
18. 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
19. Human and Ambient Interaction
28 > 31 agosto 2013 Electronics LAB [with Arduino] 19
La libreria CapSense: montiamo il circuito...
20. 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 pin
CapacitiveSensor 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...]
21. 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);
}
22. 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
23. 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 LED
int 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 output
for (i = 0; i < NUMERO_LED; i++)
{
pinMode(led[i], OUTPUT);
}
}
24. 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'input
inputLevel = analogRead(INPUT_PIN);
// accende o spegne i LED a seconda del livello letto
for (i = 0; i < NUMERO_LED; i++)
{
if(inputLevel > (STEP_LED * i))
digitalWrite(led[i], HIGH);
else
digitalWrite(led[i], LOW);
}
}
25. Realtime sound generation
28 > 31 agosto 2013 Electronics LAB [with Arduino] 25
La libreria MOZZI
http://sensorium.github.io/Mozzi/