Archive for aprile, 2011

Avarage

venerdì, aprile 1st, 2011

In questo tutorial costruiamo un circuito in cui collegare un qualsiasi sensore al pin analogico 0, leggiamo 10 valori e ne calcoliamo la media.

Il codice da scrivere è il seguente:

#define NUMREADINGS 10  //10 valori da leggere
#define inputPin 0 //Sensore collegato al pin analogico 0
int readings[NUMREADINGS];  //Letture dal input analogico
int index = 0;  //Indice della lettura corrente
int total = 0;  //Totale letture
int average = 0;  //Media

void setup()
{
     Serial.begin(9600);
     for (int i = 0; i < NUMREADINGS; i++)
         readings[i] = 0;  //Mette tutti 0 nell'array
}

void loop()
{
     total -= readings[index];  //Sottrae l'ultima lettura
     readings[index] = analogRead(inputPin);  //Legge i valori provenienti dal sensore e li salva nell'array
     total += readings[index];  //Aggiunge la lettura al totale
     index = (index + 1);  //Incrementa l'indice
 
     if (index >= NUMREADINGS)
        index = 0;  //Alla fine dell'array resetta l'indice a 0
 
     average = total / NUMREADINGS;  //Calcola la media
     Serial.println(average); //Stampa la media
}

Analisi codice:

1- i++; equivale a dire i:   i = i + 1;

2- i–; equivale a dire i: i = i -1;

3- x += y; equivale a dire x = x + y;

4- x -= y; equivale a dire x = x – y;

5- x *= y; equivale a dire x = x * y;

6- x /= y; equivale a dire x = x / y;


				

Serial

venerdì, aprile 1st, 2011

Serial è una libreria (ossia un insieme di funzioni) usata per fare comunicare arduino e il computer attraverso specifici comandi. Sulla scheda sono presenti due led con la scritta RX e TX che lampeggiano a seconda delle istruzioni scritte nel nostro programma. Il primo indica la ricezione mentre il secondo la trasmissione di dati. E possibile vedere la ricezione e/0 la trasmissione di dati nell’IDE di arduino, per vederli bisogna scrivere un apposito programma, fare l’upload su arduino e cliccare su Serial monitor dell ide:

Ora vediamo i due comandi principali:

1-begin(): La sintassi è Serial.begin(velocità), in pratica consente di impostare la velocità di trasmissione di dati seriali in bit/s (baud). Le velocità per la comunicazione sono: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 o 115200 solitamente si usa la 9600, bisogna solo controllare come è stata impostata la porta COM in Windows.

2-print(): La sintassi è Serial.print(valore, formato), serve a stampare a video un messaggio o una variabile in un determinato formato. Vediamo un paio di esempi:

Serial.print(78) scrive “78”
Serial.print(1.23456) scrive “1.23”
Serial.print(byte(78)) scrive “N” (78 è il valore ASCII)
Serial.print(‘N’) scrive “N”
Serial.print(“Hello world.”) scrive “Hello world.”
Serial.print(78, BYTE) scrive “N”
Serial.print(78, BIN) scrive “1001110”
Serial.print(78, OCT) scrive “116”
Serial.print(78, DEC) scrive “78”
Serial.print(78, HEX) scrive “4E”
Serial.print(1.23456, 0) scrive “1”
Serial.print(1.23456, 2) scrive “1.23”
Serial.print(1.23456, 4) scrive “1.2346”

Un’altra funzione simile a print è Serial.println() serve sempre a stampare a video, la differenza tra le due e che la prima scrive sempre sulla stessa riga mentre la seconda va a capo ogni volta. Le regole di sintassi di Serial.println() sono le stesse di Serial.print().

Knock

venerdì, aprile 1st, 2011

In questo tutorial usiamo un componente piezoelettrico per rilevare il suono. Un componente piezoelettrico non è altro che un dispositivo elettronico che può sia essere utilizzato per riprodurre i toni sia per rilevare i toni. Un esempio é questo:

Nel nostro tutorial collegheremo il Piezo in uno dei pin di ingresso analogici. Una cosa da ricordare è la loro polarità, hanno di solito un filo rosso e uno nero che indica come collegarlo alla scheda. Colleghiamo il nero a GND e il rosso in un pin analogico, infine dovremo anche collegare una resistenza nel range dei megaohm in parallelo all’elemento piezoelettrico.

Il circuito da fare è il seguente:

La resistenza in parallelo al piezo e nel range dei megaohm mentre la resistenza in serie al led è sempre la solita. Il filo rosso della resistenza di X megaohm và collegata al pin analogico 0.

Ora dobbiamo scrivere il seguente codice:

#define ledPin 13  //Led connesso al pin 13
#define knockSensor 0  //Sensore connesso al pin analogico 0
byte val = 0;  //Variabile per salvare il valore del sensore
int statePin = LOW;  //Variabile usato per salvare l'ultimo stato del led
int THRESHOLD = 100;  //Valore di soglia per decidere quando un suono è stato rilevato da un colpo o non

void setup()
{
     pinMode(ledPin, OUTPUT);  //Dichiaro il ledPin come OUTPUT
     Serial.begin(9600);  //Uso la porta seriale
}

void loop()
{
     val = analogRead(knockSensor);  //Legge il valore del sensore e lo salva
     if (val >= THRESHOLD)
     {
         statePin = !statePin; //Inverte lo stato del pin
         digitalWrite(ledPin,statePin);  //Accende o spegne il led
         Serial.println("Knock!");  //Invia al terminale la scritta
         delay(10);
     }
}

In pratica questo programma serve a rilevare un suono, per esempio potremmo incollare il piezo alla porta e ogni volta che qualcuno bussa, il programma scriverà sul serial monitor la parola Knock! e accenderà un led.

Analisi del codice:

1-Serial(): Per questa funzione ho realizzato un tutorial a parte raggiungibile qui.