LEZIONI di ARDUINOArduino è una piattaforma elettronica open source basata su software e hardware facili da usare. È pensata per chiunque voglia costruire progetti interattivi
•LA SCHEDA DI Arduino UNO•COLLEGAMENTO E COMUNICAZIONE TRA ARDUINO E IL PC•LA BREADBOARD•ALCUNI DISPOSITIVI•SINTASSI UTILE:•PROGETTI:
Pin connettore DIGITAL (PWM ~)Ciascuno dei 14 pin digitali presenti sulla Arduino Uno può essere utilizzato indifferentementecome un ingresso o un'uscita, utilizzando le funzioni pinMode(), digitalWrite(), e digitalRead().Le uscite operano a 5 volt e ogni pin può fornire o ricevere un massimo di 40 mA ed è dotato diuna resistenza pull-up (sconnessa di default) del valore di 20-50 kΏ. Inoltre, alcuni pin hannofunzioni specializzate:•Pin: 0 (RX) e 1 (TX): possono essere utilizzati per ricezione (RX) e trasmissione (TX) dei datiseriali TTL. Questi sono collegati ai pin corrispondenti della porta USB-TTL del processoreATmega8U2.•Pin 2 e 3: possono essere configurati come trigger per eventi esterni, come ad esempio ilrilevamento di un fronte di salita o di discesa di un segnale in ingresso.•Pin 3, 5, 6, 9, 10 e 11: possono essere configurati via software con la funzione analogWrite()per generare segnali PWM con risoluzione di 8 bit. Tramite un semplice filtro RC è possibileottenere tensioni continue di valore variabile.•Pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK): possono essere programmati per realizzareuna comunicazione SPI, utilizza un’apposita libreria SPI.•Pin 13 è connesso a un LED interno alla scheda, utile per segnalazioni di diagnostica.Quando il livello del pin è HIGH, il LED è acceso, quando il livello del pin è LOW, è spento.•GND; è il contatto di massa (GND).AREF. Tensione di riferimento per gli ingressi analogici. Utilizzato con analogReference().
Pin AnalogiciLa Uno R3 ha 6 ingressi analogici etichettati da A0 ad A5, ognuno dei quali fornisce 10 bit di risoluzione (inpratica 1024 valori diversi). Per impostazione predefinita possono misurare una tensione di 5V riferita amassa, anche se è possibile cambiare l'estremità superiore del loro intervallo utilizzando il pin AREF e lafunzione analogReference(). Inoltre, come per i pin digitali alcuni piedini hanno funzionalità specifiche:I pin A4 (SDA) e A5 (SCL). permettono di realizzare una comunicazione nello standard I2C a due fili, inabbinamento alla libreria Wire. Tutte le tensioni sono disponibili sui pin del CONNETTORE POWER •Vin; restituisce la tensione applicata dall'alimentatore al plug e può essere usato per alimentare altri circuiti che dispongano già di un regolatore di tensione (ad esempio gli shield applicati al modulo); •GND; è il contatto di massa (GND). •5 V; fornisce i 5 volt prelevati dall'uscita del regolatore interno ed è utile per alimentare altri circuiti compatibili con i 5 volt; •3.3V; questo pin fornisce i 3,3 volt ricavati dal regolatore corrispondente e consente di alimentare circuiti compatibili con tensioni di 3,3 volt (la massima corrente prelevabile e di 150 mA); •Reset. Portando questa linea a livello basso permette di resettare il microcontrollore. Generalmente utilizzato per aggiungere un pulsante di reset sugli shields esterni. La funzione corrispondente può essere attivata anche tramite il pulsante presente sulla scheda Arduino; IOREF, consente agli shield di adattarsi alla tensione fornita dalla scheda
Ora collegate Arduino al PC tramite cavo USB
Dopo aver collegato Arduino al PC tramite cavo USB seguite questi passaggi per far Comunicare il PC con ARDUINO: TASTO DESTRO SU Pannello di Controllo
Vi appare Arduino Uno (COMX). Segnatevi la portaCOM (Nel mio caso COM14) pochè vi servirà perselezionarla sugli strumenti di ARDDUINO (Porta).
A QUESTO PUNTO SI APRE L’IDE DI ARDUINO CLICCANDO SU QUESTA ICONA
Prima di proseguire, dalla barra dei menù dell’IDE andate inStrumenti -> Porta seriale -> COM (e selezionate la porta COMutilizzata da Arduino uno)
Una volta trovata la porta COM e installato l’IDEArduino, quest’ultimo si presenterà così:
A questo punto si verifica l’esattezza del programmaSe tutto è corretto si carica il programma per eseguirlo
In caso di errore Nella figura c'è un piccolo programmino scritto nell'IDE e contenente un errore. E' stato ordinato di compilare il programma e si vedono i messaggi che il Debugger manda al programmatore per individuare l'errore. Sono evidenziati sia la sezione del programma in cui esso è stato trovato, sia la riga di programma, sia il tipo di errore.
La Breadboardè una basetta adatta alla realizzazione di circuiti di test. I componenti elettronici si inserisconoad incastro senza bisogno di saldature, e con la stessa facilità si tolgono. La Breadboard èfacile da utilizzare una volta imparate le sue caratteristiche. Su entrambi i lati superiore edinferiore , corrono due file di contatti: una fila è contrassegnata da una riga rossa ed il+ -simbolo , l'altra da una riga blu ed il simbolo . Come intuibile queste due file sonoconnesse rispettivamente al positivo ed al negativo dell' alimentazione elettrica.I contatti più interni, invece, sono organizzati \"per colonna\" e cioè ogni foro appartenente allacolonna è in contatto elettrico con gli altri della stessa , mentre le colonne non sono in contattoelettrico tra loro. Ne consegue che se vogliamo ricavare l'alimentazione elettrica possiamoutilizzare uno qualunque dei fori appartenenti alle righe laterali esterne , mentre se vogliamoinserire dei componenti, li dovremo inserire nella parte centrale della Breadboard e i loropiedini non potranno stare sulla stessa colonna ma su colonne separate. DISPOSIZIONE CONDUTTORI ALL`INTERNO DELLA BREADBOARD
Resistenza DIODO LED SENSORE MAGNETICO SENS. ULTRA SUONI Potenziometrointerruttore pulsante I valori provenienti dal potenziometro si destinano ai piedini analog di arduino, che li trasforma in valori da 0 a 1023.
Resistenza Potenziometro I valori provenienti dal potenziometro si destinano ai piedini analog di arduino, che li trasforma in valori da 0 a 1023.
Vediamo un po’ di sintassi utile:Comando Significato // Commento monoriga es.: // Il mio primo programma per Arduino /* Apertura commento multiriga; es.:/* Questo è il mio primo programma per Arduino*/ */ Chiusura commento Multiriga; es.: vedi sopra void dichiarazione di funzione senza ritorno, ossia la funzione esegue delle operazioni ma non restituisce alcunsetup() valore dopo l’elaborazioneloop() La funzione void setup() sarà la prima ad essere eseguita dopo ogni accensione o reset di Arduino. La funzione void loop() viene eseguita ciclicamente (Loop) ed è la sezione dedicata all'acquisizione, alla int elaborazione, ed alla restituzione dei dati elaborati dichiarazione di variabile di tipo integer (intero); utilizzato anche per dichiarare le funzioni che restituiscono valori interipinMode(pin,mode) funzione di configurazione di un piedino Arduino, in modo che sia utilizzabile come INPUT o come OUTPUTdigitalWrite(pin,level) invia un comando di output sul piedino selezionato (pin) di tipo digitale, pe cui 0 o 1; in sostituzione dello 0 e dell’1 si possono utilizzare le costanti LOW (0) e HIGH (1)delay(second) funzione utile per introdurre un dalay (attesa) tra una istruzione e la successiva, il parametro second è esperesso in millesimi di secondo. La sintassi colorataDa notare assolutamente le parole chiave del linguaggio evidenziate dai colori del testo. I nomi delle funzioniSETUP e LOOP sono scritti in color arancione. Provate a modificarli cambiando solo un carattere o inserendouna maiuscola al posto di una minuscola: vedrete che l'arancione scompare. Questo modo di visualizzare leparole chiave del linguaggio viene molto comodo al programmatore: se scrivo una parola chiave e non la vedodiventare arancione significa che qualcosa non va, probabilmente ho sbagliato a scrivere.
Le parentesi graffe sono molto importanti: sono i caratteri convenzionali che il \"C\" usa per indicare l'inizio e la fine dei blocchi di codice {LE PARENTESI GRAFFE}{}
PROGETTI CON Arduino UNO•INTERMITTENZA DI UN LED•VARIAZIONE CICLICA DELLA LUMINOSITA DEL LED (PWM)
// INTERMITTENTEint ledPin = 12; // con questa istruzione si assegna al pin 12 il compito di faraccendere il ledvoid setup() // punto di inizio del loop di programma che si ripeteciclicamente{pinMode (ledPin, OUTPUT); // definisce la porta 12 come porta di output}void loop() { // punto di inizio del loop di programma che si ripeteciclicamentedigitalWrite (ledPin, HIGH); // attiva la porta 12: la mette cioe’ in stato HIGH eaccende il leddelay (1000); // aspetta un secondo (1000 millisecondi)digitalWrite (ledPin, LOW); // disattiva la porta 12: la mette cioe’ in stato LOW espegne il leddelay (1000); // aspetta un secondo (1000 millisecondi) e ricomincia il loop}
Come funziona il PWM di Arduino?Quando utilizziamo la funzione PWM, Arduino commuta l'uscita molto velocemente,(488hz sui pin 3,9,10 e 11, 976hz sui pin 5 e 6). In elettrotecnica, alla presenza di un segnale sotto forma di onda rettangolare, Il ciclo di lavoro o ciclo di lavoro utile detto duty cycle D (diuti saicol), è il rapporto tra la durata del segnale \"alto\" e il periodo totale del segnale, e serve a esprimere per quanta porzione del periodo il segnale è a livello alto (intendendo con l’aggettivo alto, il livello \"attivo\").Con riferimento all'immagine qui sopra, il ciclo di lavoro è: D= τ/T, dove τ τ {\displaystyle {\tau }} è la porzione diperiodo a livello alto e T è il periodo totale.Il risultato del rapporto è sempre un numero compreso tra 0 e 1. Nel caso in cui si abbia un duty cycle pari a \"0\" o \"1\"si è alla presenza di segnali continui. Se il duty cycle ha valore zero, significa (vedi la formula sopra) che τ è zero equindi si ha un livello basso per tutto il periodo (segnale continuo a livello basso). Se il duty cycle ha valore uno,significa che τ e T hanno stesso valore, quindi per tutto il periodo il segnale è alto (segnale continuo a livello alto).Spesso il duty cycle è indicato sotto forma di percentuale (D%): per ottenere la percentuale basta moltiplicare per 100il risultato del rapporto τ/T. La percentuale esprime più chiaramente la quantità di segnale alto (se D=0,4, D% = 40%,quindi significa che per il 40% del periodo totale il segnale è a livello alto). In particolare, se D=0,5 (D%=50%) significache per metà del periodo totale il segnale è alto, per l'altra metà è basso: siamo quindi in presenza di un'onda quadra. Se la nostra uscita PWM alimenta un led, ad ogni valore di D (duty cycle), corrisponde un certo livello di luminosità. Si osservi che maggiore è la durata dell'impulso a 5 volt rispetto a quello a 0 volt, maggiore sarà la luminosità del led.
VARIAZIONE CICLICA DELLA LUMINOSITA DEL LED (PWM)/* Riporto lo sketch relativo al circuito proposto che ciclicamente fa alzare eabbassare la luminosità del LED, per effetto del PWM */int i = 0; // numero interovoid setup() {pinMode(9, OUTPUT); // pin a cui è collegato il LED}void loop() { for (i = 0; i < 255; i++ ) /* il ciclo \"for\" permette di incrementare la variabile \"i\"dal valore \"0\"al valore \"255\" incrementando di 1 ad ogni ciclo*/{ analogWrite(9, i); /* il comando \"analogWrite\" è la funzione per scrivere unsegnale PWM in uscita, verrà scritto il valore di \"i\" modificato nella funzioneprecedente, quindi ad ogni ciclo del loop il led si accenderà un po' di più, finoa raggiungere la massima luminosità. */ delay(20); } for (i = 255; i > 0; i-- ) /* questo ciclo \"for\" permette di diminuire la variabile\"i\" dal valore \"255\"al valore \"0\" scalando di 1 ad ogni ciclo*/{ analogWrite(9, i); /* il comando \"analogWrite\" è la funzione per scrivereun segnale PWM in uscita, verrà scritto il valore di \"i\" modificato nella funzioneprecedente, quindi ad ogni ciclo del loop il led si accenderà un po' di meno,fino a raggiungere il minimo della luminosità. */ delay(20); }}// BUON LAVORO
LED RGB COLORI IN DISSOLVENZA/* Uso di un led RGB Spegnimento graduale del LED Verde */const int VERDE = 9; // pin a cui collegare i piedini del LED RGBconst int BLU = 10;const int ROSSO = 11;const int delayTime = 20; // tempo di transizione colorevoid setup() { pinMode(VERDE, OUTPUT); // imposta il pin digitale come output pinMode(BLU, OUTPUT); pinMode(ROSSO, OUTPUT); // si impostano ad HIGH i pin VERDE, BLU, ROSSO // inizialmente il led RGB sarà spento digitalWrite(VERDE, HIGH); digitalWrite(BLU, HIGH); digitalWrite(ROSSO, HIGH);}int ValVerde; // definizione di variabili globalivoid loop() { // spegnimento graduale del verde ValVerde = 255; // coordinate RGB del rosso: 0, 255, 0 for( int i = 0 ; i < 255 ; i += 1 ){ ValVerde -= 1; /* ad ogni ciclio la differenza 255 - ValVerde AUMENTA provocando un graduale spegnimento del verde */ analogWrite( VERDE, 255 - ValVerde ); // attesa di 20 ms per percepire il colore delay( delayTime ); }}
CONTROLLIAMO UN LED CON UN PULSANTE Realizza un programma che permette di accendere una luce quando premi un pulsante e quando viene nuovamente premuto il pulsante spegne la luce, comportamento analogo a quello che si ha per un impianto di illuminazione. RELE PASSO PASSO// accendi il led appena è premuto il pulsante mantenendolo acceso quando si rilascia// premendo una seconda volta il pulsante si spegne il led#define LED 8 // LED collegato al pin digitale 13#define BUTTON 7 // pin di input dove è collegato il pulsanteint val = 0; // si userà val per conservare lo stato del pin di inputint vecchio_val = 0; // si userà vecchio_val per conservare lo stato del pin di input al passo precedenteint stato = 0; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led accesovoid setup() { pinMode(LED, OUTPUT); // imposta il pin digitale come output pinMode(BUTTON, INPUT); // imposta il pin digitale come input}void loop() { val = digitalRead(BUTTON); // legge il valore dell'input e lo conservaif ((val == HIGH) && (vecchio_val == LOW)){// controlla se è accaduto qualcosa stato = 1 - stato; } vecchio_val = val; // ricordiamo il valore precedente di val if (stato == 1) { digitalWrite(LED, HIGH); // accende il led } else { digitalWrite(LED, LOW); //spegne il led pulsante }}
PotenziometroIl potenziometro è una resistenza variabile,i più comuni sono quello rotatorio e quello lineare. Ilrotatorio, il tipo che usiamo noi, permette girando una manopola di variare la resistenza. In pratica ilpotenziometro è dotato di 3 fili. Due di questi sono connessi alle estremità di una resistenza elettrica,mentre il terzo è collegato ad un cursore, collegato ad un perno rotante, in grado di muoversi da unestremo all'altro della resistenza. I due fili collegati alle estremità della resistenza vanno connessi unoal polo positivo di alimentazione (5 Volt) e l'altro a massa (0 Volt). Sul terzo filo sarà presente unatensione compresa tra zero Volt e la tensione massima (5 Volt), a seconda della posizione in cui sitrova. Ecco quindi che ruotando la manopola possiamo variare a nostro piacimento la tensionepresente sul terzo filo.Arduino UNO dispone di 6 ingressi analogici, selezionabili da software, che risultanocollegati all’unico convertitore ADC (ADC = convertitore analogicodigitale) disponibilenel microcontrollore ATmega328. Sono in grado di leggere una tensione analogicacompresa tra 0V (Vmin) e 5V (Vmax)La risoluzione dell’ADC è di 10-bit (2^10 = 1024 stati) In altre parole, la tensione piùpiccola riconosciuta dal bit meno significativo che il convertitore (Arduino UNO) riesceadiscriminare vale:VLSB = (Vmax – Vmin) / 1024 = (5 – 0) / 1024 = 4,88 mV
REGOLATORE DELLA LUMINOSITÀ DI UN LED// REGOLATORE DELLA LUMINOSITÀ DI UN LEDint pinpot = A0; //qui inseriamo l’ingresso dal potenziometroint pinled = 9; //qui inseriamo il ledint valpot = 0; //dice che all'accensione di Arduino i valori sono 0int valled = 0;void setup() {Serial.begin (9600); // inizializza il collegamento serialepinMode(pinled, OUTPUT);}void loop() {valpot = analogRead(pinpot); // legge il valore analogico del potenziometroSerial.print(\"Valore letto dal potenziometro:\");Serial.println(valled); // Stampa il valore letto sul monitor serialevalled = map(valpot, 0, 1024, 0, 255);analogWrite(pinled, valled);delay(1000); // aspetta 1000 millisecondi}
SENSORI OTTICI FotoresistoreLa fotoresistenza è una resistenza il cui valore è dipendente dalla luce incidente.Nei due casi estremi:Fotoresistenza completamente oscurata (al buio totale) offre una resistenza > 1000000ΩFotoresistenza esposta alla luce solare diretta offre una resistenza < 1000 Ω
INTERRUTTORE CREPUSCOLARE
// INTERRUTTORE CREPUSCOLAREint FotoPin = A0; // variabile in cui viene inserito il valore analogico (da 0 a 1023)int FotoValue;int ledPin1 = 12; // definisce la porta 12 come porta di outputvoid setup() {pinMode(ledPin1, OUTPUT);}void loop() {Serial.begin (9600); // inizializza il collegamento serialeFotoValue = analogRead(FotoPin); // legge il valore fornito dalla fotoresistenzaSerial.print(\"Valore letto dal foto resistore:\");Serial.println(FotoValue);if (FotoValue< 300) {digitalWrite(ledPin1, HIGH); // accende il led se il valore della fotoresistenza e' alta} else {digitalWrite(ledPin1, LOW); // in caso contrario lo spegne il led}delay(100);}
COMANDO DI TRE LED DA TASTIERAIn questo tutorial vediamo come accendere e spegnere un Led tramite la tastiera del nostro computer.Questo sketch può risultare utile per tutti coloro che vogliono crearsi una postazione di controllo dalproprio pc per gestire qualsiasi supporto elettronico come luci, motori, pompe d’acqua per annaffiare,ecc...Per questo esperimento si digiterà dalla tastiera quando sullo schermo è visualizzata la barra delmonitor seriale:1 led rosso che si comanda con il tasto r invio,1 led giallo che si comanda con il tasto g invio e1 led verde che si comanda con il tasto v invio, con il tasto s invio spegne il led acceso
COMANDO DI TRE LED DA TASTIERA case 'v': // Se il tasto premuto è uguale a “v”// Comando di tre led da tastiera di cui ne funziona uno per volta digitalWrite(ledpin_3,1); // allora scrivi sul Pin Digitale ledpin_1 il valore, Led 3 acceso// attraverso i tasti: r; g; v; il tasto s spegne ciò che è acceso digitalWrite(ledpin_2,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 2 spento digitalWrite(ledpin_1,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 1 spentoint ledpin_1 = 8; // 1° LED collegato al pin digitale 4 break; // termina l’operazione.int ledpin_2 = 9; // 2° LED collegato al pin digitale 7int ledpin_3 = 10; // 3° LED collegato al pin digitale 12 case 's': // Se il tasto premuto è uguale a “s”char tastiera=0; // dichiara una variabile per leggere i comandi provenientidalla tastiera: digitalWrite(ledpin_3,0); // allora scrivi sul Pin Digitale ledpin_1 il valore, Led 3 acceso digitalWrite(ledpin_2,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 2 spento digitalWrite(ledpin_1,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 1 spentovoid setup() { break; // termina l’operazione.pinMode(ledpin_1, OUTPUT); // led al pin 8pinMode(ledpin_2, OUTPUT); // led al pin 9 default: // se il valore non e presente nei vari controlli allora viene ignorato.pinMode(ledpin_3, OUTPUT); // led al pin 10 virgola. // N.B: alla fine del termine default ci sono i due punti e non il punto eSerial.begin(9600); // istruzione che permette ad Arduino di comunicare con il Serial.flush();computer // istruzione che serve per svuotare il buffer, } //che è una zona di memoria temporanea usata // tramite il cavo USB. In modo che digitando le lettere // per l'entrata o l'uscita dei dati seriali in arrivo dal PC. // sulla tastiera saranno lette dal programma.} }void loop() {tastiera = Serial.read(); //legge il comando proveniente dal pc (tramite seriale).switch (tastiera){ // controlla se il valore digitato è uguale a un valore //predefinito che dichiariamo subito dopo:case 'r': // Se il tasto premuto è uguale ad “r”digitalWrite(ledpin_1,1); // allora scrivi sul Pin Digitale ledpin_1 il valore, Led 1acceso.digitalWrite(ledpin_2,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 2spentodigitalWrite(ledpin_3,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 3spentobreak; // termina l’operazione.case 'g': // Se il tasto premuto è uguale a “g”digitalWrite(ledpin_2,1); // allora scrivi sul Pin Digitale ledpin_1 il valore, Led 2accesodigitalWrite(ledpin_1,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 1spentodigitalWrite(ledpin_3,0); // allora scrivi sul Pin Digitale ledpin_0 il valore, Led 3spentobreak; // termina l’operazione.
COMUNICAZIONE BIDIREZIONALE DA E VERSO ARDUINOTramite le istruzioni impartite agendo sulla tastiera del PC accenderemo i LED del Semaforo, e utilizzeremo il monitor del PCper dare delle informazioni sullo stato del nostro programma, dichiarando per iscritto quale dei LED è stato acceso.// COMUNICAZIONE BIDIREZIONALEint comando=0;void setup() { Serial.begin(9600); // inizializza la comunicazione seriale alla velocità di 9600 baud pinMode(8, OUTPUT); // usa il pin 8 come OUTPUT pinMode(9, OUTPUT); // usa il pin 9 come OUTPUT pinMode(10, OUTPUT); // usa il pin 10 come OUTPUT Serial.println(\"Attendo un comando\"); // Scrivi via seriale il messaggio di inizializzazioneavvenuta }void loop(){if (Serial.available() > 0) // Se c'è un dato sulla seriale { comando=Serial.read(); // Leggi dalla seriale switch (comando) {case 'r': // Se scrivi \"r\" digitalWrite(8, HIGH); Serial.println(\"Ho acceso il LED rosso\"); break; case 'g': // Se scrivi \"g\" digitalWrite(9, HIGH); Serial.println(\"Ho acceso il LED giallo\"); break; case 'v': // Se scrivi \"v\" digitalWrite(10, HIGH); Serial.println(\"Ho acceso il LED verde\"); break; default: // Se scrivi qualcosa di diverso da \"r\" o \"g\" o \"v\" Serial.println(\"LED spenti\"); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } }}
MISURATORE DI DISTANZA AD ULTRASUONIFornendo un impulso positivo della durata di 10 µs al pin di ingresso“Trigger”, il sensore genera un treno d'impulsi (otto) ad ultrasuoni a40 kHz, questi impulsi vengono inviati, tramite la capsulatrasmittente, verso l'ostacolo, la capsula ricevente rileva l'eco sul pindi uscita “Echo”, dove sarà presente un impulso di durata da 150 µs (2cm) a 25 ms (4,5 m) proporzionale alla distanza dell'oggetto.Se non rileva alcun ostacolo entro i 4,5 m, produce un impulso didurata di circa 38 ms. La formula per calcolare la distanza in cm è:impulso in µs diviso 58, mentre in pollici è: impulso in µs diviso 148. Alimentazione: 5 Vdc Consumo: meno di 2 mA Angolo di rilevamento: non più di 15° Distanza di rilevamento: da 2 cm a 450 cm Elevata precisione: fino a 0,3 cm Trigger (ingresso): 10us TTL impulse Echo (uscita): segnale PWM TTL Dimensioni (mm): 45,5 x 20,5 x 15,3
MISURATORE DI DISTANZA AD ULTRASUONI//MISURATORE DI DISTANZA AD ULTRASUONIfloat cm; // variabile in cui verrà inserita la distanza dall'ostacolo, in centimetrivoid setup(){Serial.begin(9600); // inizializza la porta di comunicazione con il monitor serialepinMode(12, OUTPUT); // definisce la porta digitale 12 (il trigger) come porta di outputpinMode(11, INPUT); // definisce la porta digitale 11 (l'echo) come porta di input}void loop(){digitalWrite(12, LOW); //disattiva il lancio del fascio di ultrasuoni (qualora fosse attivo)delayMicroseconds(2); // attende 2 microsecondidigitalWrite(12, HIGH); // attiva il lancio del fascio di ultrasuonidelayMicroseconds(10); // attende 10 microsecondi (il tempo richiesto dal modulo HC-SR04)digitalWrite(12, LOW); // disattiva il lancio del fascio di ultrasuonicm = pulseIn(11, HIGH) / 58.0; // rileva il segnale di ritorno e lo converte in centimetri// (il divisore 58.0 e' una costante sperimentalmente verificata)Serial.print(\"DISTANZA cm: \");Serial.print(cm); // visualizza la distanza sul monitor serialeSerial.println();delay(500); // attende 2 secondi prima di rilanciare il ciclo}
MISURATORE DI DISTANZA E TEMPO//MISURATORE DI DISTANZA AD ULTRASUONIstatic int trigger = 12; //Definizione dei pinstatic int echo = 11; //variabili utilizzate per calcolare la distanzalong durata; //tempo che impieghera' il suono a percorrere una certa distanzalong distanza; //la distanza che ha percorso il suonovoid setup() {Serial.begin(9600); //abilito la comunicaizone seriale per rendermi conto di cio' che accade pinMode(trigger, OUTPUT); //settiamo il funzionamento dei pin pinMode(echo, INPUT); digitalWrite(echo, LOW); //metto a LOW l'ingresso del PIN echo digitalWrite(trigger, LOW); // e del PIN trigger durata = 0; //inizializzo le variabili distanza = 0;}void loop() { digitalWrite(trigger, HIGH); //Invio un impulso HIGH sul pin del trigger delayMicroseconds(10); //lo lascio al valore HIGH per 10 microsecondidigitalWrite(trigger, LOW); //lo riporto allo stato LOW //ottengo il numero di microsecondi per i quali il PIN echo e' rimasto allo stato HIGHdurata = pulseIn(echo, HIGH); //per fare questo utilizzo la funzione pulseIn()distanza = durata / 29 / 2; // La velocita' del suono e' di 340 metri al secondo, o 29 microsecondi al centimetro. // il nostro impulso viaggia in andata e ritorno, quindi per calcolalre la distanza // tra il sensore e il nostro ostacolo occorre fare:Serial.print(\"Durata : \"); //invio i dati alla porta seriale cosi' da poterli vedere con il Monitor Seriale Serial.print(durata); Serial.print(\" - Distanza : \"); Serial.println(distanza);}
SENSORE DI PARCHEGGIO/*SENSORE DI PARCHEGGIO; questa realizzazione, fa accedere una serie di 3 LED asseconda della distanzada un ostacolo, inoltre è possibile essere informati della distanza tra l’ostacolo e il sensore attraverso ilmonitor seriale. */int triggerPort = 9;int echoPort = 10;int rosso = 7;int giallo = 6;int verde = 5;void setup() {pinMode( triggerPort, OUTPUT );pinMode( echoPort, INPUT );pinMode( rosso, OUTPUT );pinMode( giallo, OUTPUT );pinMode( verde, OUTPUT );Serial.begin( 9600 );Serial.println( \"Sensore ultrasuoni: \");}void loop() {digitalWrite( triggerPort, LOW ); //porta bassa l'uscita del triggerdigitalWrite( triggerPort, HIGH ); //invia un impulso di 10microsec su triggerdelayMicroseconds( 10 );digitalWrite( triggerPort, LOW );long duration = pulseIn( echoPort, HIGH );long r = 0.034 * duration / 2;Serial.print( \"durata: \" );Serial.print( duration );Serial.print( \" , \" );Serial.print( \"distanza: \" );if( duration > 38000 ) Serial.println( \"fuori portata\"); //dopo 38ms è fuori dalla portata del sensoreelse { Serial.print( r );Serial.println( \"cm\" );}if( r <= 30) digitalWrite(rosso, HIGH); //accende led rossoif( r > 30) digitalWrite(giallo, c); //accende led gialloif(r>100) digitalWrite(giallo, LOW), digitalWrite(verde, HIGH); //spegne led giallo e accende led verdeif(r>150) digitalWrite(verde, LOW); //spegne led verdedelay( 150 ); //aspetta 150 millisecondidigitalWrite(rosso, LOW);digitalWrite(giallo, LOW);digitalWrite(verde, LOW);}// buon lavoro
SENSORE TOUCH CAPACITIVO// SENSORE TOUCH CAPACITIVO#include <CapacitiveSensor.h>int led=13;CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);void setup(){ pinMode(led, OUTPUT); cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); /* Serve perimpostare il tempo di auto calibrazione del sensore, ponendola funzione in questo modo viene disattivata l’auto calibrazionedel sensore */}void loop(){long total1 = cs_4_2.capacitiveSensor(30);if (total1>100){digitalWrite(led,HIGH);}else{digitalWrite(led,LOW);} delay(10);}
Search
Read the Text Version
- 1 - 37
Pages: