Riepilogo circuito, script e setup avanzato per l’elettronica hi-Storia
In questa lezione verrà riepilogato in breve tutto il processo e verranno affrontati degli approfondimenti per modificare il progetto
Circuito
Ai fini del test, verranno visualizzati 5 sensori, ma nel tuo circuito puoi inserire il numero di sensori previsto per il tuo dispositivo.
Ricordati di posizionare di seguito tutti i PIN ricevitori, partendo dal PIN digitale 2.
Il PIN trasmettitore 13 è in comune con tutti i sensori, quindi vanno messi sulla stessa riga della breadboard (i punti della riga sono tutti connessi tra loro)
Codice
#include <CapacitiveSensor.h>
// indichiamo il PIN utilizzato come trasmettitore per tutti i sensori capacitivi
const int commonpin = 13;
// indichiamo il numero di sensori capacitivi inseriti.
//Cambia questo valore in base alle tue esigenze
const int numbersensors = 5;
// Attenzione, questo valore è specifico per ogni dispositivo!
// Accordarsi con il team di hi-Storia così da ricevere il tuo ID
// e mettere il rete il tuo dispositivo con gli altri dispositivi creati in Italia
const String idaudio = "SBR012015A";
CapacitiveSensor* capSensor[numbersensors];
int traccia=0;
int tracciattiva=-1;
boolean handshake=false;
char inputval;
int threshold = 500;
void setup() {
Serial.begin(9600);
//inizializzazione dei sensori capacitivi
int i = 0;
// creo un ciclo, eseguendolo un numero di volte pari al numero di sensori
while(i < numbersensors){
// questo controllo lo eseguo perche' possiamo utilizzare anche PIN superiori al 13
// con questo controllo superiamo il 13, andiamo al 14 e non incrementando la variabile i
// cosi' da eseguire il controllo per il numero di sensori indicati in numbersensors
if(i!=commonpin){
// nella versione con bluetooth, PIN0 e PIN1 sono utilizzati per la trasmissione dati
//quindi li lasciamo liberi, partendo dal PIN2 (0+2 nella prima iterazione del ciclo while)
capSensor[i] = new CapacitiveSensor(commonpin,i+2);
i++;
}
}
}
void loop() {
// HANDSHAKE
//se NON abbiamo stabilito una connessione con l'app PC (o smarthphone)
if(!handshake){
// inviamo al PC o allo smarthphone un segnale contente il carattere "Z".
// diciamo: il dispositivo è connesso, ma è dormiente!
Serial.write('Z');
// se è stabilita una connessione
if (Serial.available()) {
// salviamo su una variabile il messaggio che ci arriva dal PC (o smartphone)
inputval = Serial.read();
// se riceviamo il carattere "H", vuol dire che il PC ci ha riconosciuto: sveglia!
if (inputval == 'H') {
//il dispositivo diventa operativo
handshake=true;
}
delay(10);
}
delay(500);
}else{
//se il dispositivo è collegato ed abbiamo stabilito una connessione con l'app PC (o smarthphone)
//CAPACITIVE
long sensorValue;
// variabile per capire se abbiamo toccato due sensori. lo imposto a 0, cioe' nessun tocco
int tocco= 0;
// dichiaro la variabile i fuori dal for cosi' la riusera' nel print finale
int i;
for(i=0;i < numbersensors;i++){ // catturo i valori di output di ogni sensore capacitivo sensorValue = capSensor[i]->capacitiveSensor(30);
//per verificare il funzionamento di tutti i sensori, de-commenta la riga successiva
//Serial.println(sensorValue);
if(sensorValue > threshold){
//tocco diventa 1.
// se rimane 1, vuol dire che dentro il ciclo for abbiamo toccato un solo sensore.
// se aumenta, vuol dire che piu' di un sensore ha passato la soglia
tocco++;
traccia=i;
}
}
// fine del ciclo for per la cattura dei valori di output
// alla fine del ciclo analizzo i tocchi
//se ho toccato almeno 1 sensore
if(tocco>0) {
//se ho toccato 1 ed un solo sensore
if(tocco==1){
// invio l'ID del sensore attivato solo se in precedenza avevo toccato un altro sensore
if(traccia!=tracciattiva){
Serial.write(traccia+1);
tracciattiva=traccia;
}
}else{
//invio il carattere 90 che l'app player interpreta come segnale del tocco contemporaneo due sensori
Serial.write(90);
}
}
//ultima verifica: vediamo se riceviamo altri segnali dall'app PC (o smartphone)
if (Serial.available()) {
inputval = Serial.read();
// se arriva il segnale con il carattere chiocciola
if (inputval == '@') {
// vuol dire che dobbiamo resettare il dispositivo
handshake=false;
}
// se arriva il segnale con il carattere cancelletto
if (inputval == '#') {
// restituisco l'ID del dispositivo
Serial.println(idaudio);
}
}
delay(50);
}
}
Ricorda che in questo script va personalizzato il numero di sensori utilizzati, modificando const int numbersensors (in questa demo impostato su 5).
Puoi scaricare questo codice completo in formato .ino per IDE Arduino o Eclipse.
Mappatura degli ID
Una volta che hai collegato il circuito agli attivatori, dovrai mappare gli ID relativi ad ogni elemento architettonico, ad esempio
Puoi trovare il files per il data-entry al seguente documento Google:
https://docs.google.com/spreadsheets/d/1NDPLg9XuxUCDE_l8DNLX7-iMqCQSB5p3tymm6ZC8Lag/edit?usp=sharing
Per visualizzare gli output dei sensori, ricorda che dovrai temporaneamente caricare uno script in cui sostituirai
Serial.write(traccia+1);
con
Serial.println(traccia+1);
e all’avvio dovrai dare come input, nel monitor seriale dell’Arduino IDE, il carattere H (maiuscolo)
Approfondimenti
Coming soon