Archivi categoria: arduino

Arduino: stampare più funzioni sulla serial plotter

L’attività di progetto di questa mattina: progettazione di dispositivi elettronici che rispondono a diverse necessità per la salute umana: cura della persona, disabilità, sicurezza sul lavoro, strumenti medici/laboratorio, accessibilità dei luoghi pubblici, ecc…

Con mio piacere ne è nata un’intensa attività di ricerca che ha coinvolto l’intero gruppo classe. Molte le necessità e tra queste ne evidenzio uno, semplice, che riguarda la programmazione, che in più occasioni gli studenti affrontano durante le sperimentazioni e di cui mi sono reso conto di non avere documentato adeguatamente, ovvero: il plot di più funzioni su uno stesso piano cartesiano con Arduino.

Avevo mostrato in più occasioni come effettuare il plot di grandezze variabili nel tempo utilizzando la Serial Plotter dell’IDE di Arduino, uno degli ultimi articoli si riferisce alla realizzazione di uno strumento per la rilevazione di vibrazioni, un semplice sismografo realizzato con un sensore piezoelettrico.

Alcuni studenti questa mattina, si stavano cimentando nella progettazione di un guanto da utilizzare per la movimentazione di un braccio robot industriale della hyundai con l’obiettivo di simulare la movimentazione a distanza di sostanze chimiche pericolose. Nelle prime attività di ricerca si è manifestata la necessità di visualizzare su tre grafici diversi le componenti X, Y, Z dell’accelerazione fornite da un accelerometro connesso ad Arduino.

Come sicuramente saprete l’avvio della Serial Plotter avviene, così come per la Serial Monitor dal menù Tools. Ricordo che Serial Monitor e Serial Plotter non possono essere avviate contemporaneamente.

La Serial Plotter prende i valori che giungono dalla seriale (connessione USB) e li grafica su un piano cartesiano. I dati numerici vengono anche visualizzati nella parte in alto a sinistra della finestra della Serial Plotter.

I valori massimi e minimi rappresentati sull’asse Y vengono regolati automaticamente, mentre la dimensione dell’asse X è fissato a 500 punti e l’aggiornamento del grafico avviene ogni qual volta nel vostro sketch viene eseguita una Serial.println().

Ricordate inoltre di fissare il Baud Rate del Serial Plotter in modo che corrisponda a quello che avete indicato nel codice.

Per tracciare contemporaneamente forme d’onda è possibile agire in due modi:

inserendo uno spazio tra due istruzioni di stampa

1Serial.print(temperatura);
2Serial.print(" ");
3Serial.println(umidita);

oppure inserendo una tabulazione tra due istruzioni di stampa

1Serial.print(temperatura);
2Serial.print("\t");
3Serial.println(umidita);

In questo caso le due grandezze, temperatura e umidità, saranno rappresentate da due funzioni separate e tracciate contemporaneamente sullo stesso piano cartesiano.

A titolo di esempio consideriamo il mio post in cui mostravo come utilizzare un DHT11 e visualizzeremo sulla Serial Plotter le due grandezze fisiche temperatura ed umidità. Di seguito schema di collegamento, sketch e grafici.

1// Prof. Maffucci Michele
2// Visualizzazione della pressione e dell'umidità rilevata da un DHT11
3// sulla Serial Plotter
4// 16.09.2021
5 
6// Libreria DHT
7#include "DHT.h"
8 
9// Pin digitale di arduino connesso al DHT
10#define DHTPIN 2
11 
12// tipo del sensore: DHT 11
13#define DHTTYPE DHT11
14 
15DHT dht(DHTPIN, DHTTYPE);
16 
17void setup() {
18  Serial.begin(9600);
19  dht.begin();
20}
21 
22void loop() {
23  // Attesa di 1 millisecondo prima di fornire la misura.
24  delay(1);
25 
26  // Lettura dell'umidità
27  float h = dht.readHumidity();
28  // Lettura della temperatura in gradi Celsius
29  float t = dht.readTemperature();
30 
31  // Verifica se le si presenta un errore di lettura (e riprova nuovamente)
32  if (isnan(h) || isnan(t)) {
33    Serial.println(F("Impossibile leggere dal sensore DHT!"));
34    return;
35  }
36 
37  // Stampa del valore dell'umidità
38  Serial.print(h);
39  Serial.print(' ');
40  // Stampa del valore della temperatura
41  Serial.println(t);
42}

Il plot delle due grandezze è:

Per completezza realizziamo un semplice sketch che permette di rappresentare 3 funzioni sinusoidali sfasate di 90 gradi una rispetto all’altra con ampiezze diverse:

1// Prof. Maffucci Michele
2// Visualizzazione di tre funzioni siusoidali
3// di ampiezza diversa e sfasate di 90 gradi
4// 16.09.2021
5 
6void setup() {
7  Serial.begin(9600);
8}
9 
10void loop() {
11 
12  // M_PI è la macro definita nell'header math.h
13  // che definisce il pi greco che ha il valore di:
14  // 3.14159265358979323846
15  for(int i = 0; i < 360; i += 2) {
16    float ValoreY1 = 1 * sin(i * M_PI / 180);
17    float ValoreY2 = 2 * sin((i + 90)* M_PI / 180);
18    float ValoreY3 = 4 * sin((i + 180)* M_PI / 180);
19 
20    Serial.print(ValoreY1);
21    Serial.print(' ');         // deve essere stampato spazio ' ' o  tab '\t' tra due valori.
22    Serial.print(ValoreY2);
23    Serial.print(' ');         // deve essere stampato spazio ' ' o  tab '\t' tra due valori.
24    Serial.println(ValoreY3);  // l'ultimo valore deve avere un ritorno a capo
25 
26    delay(1);
27  }
28}

Buon Coding a tutti 🙂

Arduino: misuratore di distrazione dovute all’uso di uno smartphone

Uno dei progetti che ho assegnato ai miei studenti in questo anno scolastico che volge al termine, è stato quello di progettare e realizzare un sistema di automazione in grado di valutare il comportamento sedentario di una persona quando lavora a computer. Al sistema sono stati aggiunti  appositi segnali di allarme che hanno l’obiettivo di invogliare la persona ad effettuare esercizio fisico.
Gli allievi hanno progettare il dispositivo non solo da un punto di vista elettronico, ma anche dal punto di vista dell’usabilità e del design.
I progetti realizzati hanno avuto sviluppi molto interessanti, nelle foto in allegato trovare una versione addirittura dotata di caricatore per smartphone dotato inoltre di un doppio controllo: presenza persona (mediante sensore PIR) e rilevazione prelievo smartphone mediante sensore LDR. Come accade spesso i migliori progetti sviluppati durante il PCTO vengono utilizzati per sviluppare le future attività di laboratorio per l’anno scolastico successivo.

Una variante all’attività sopra segnalata è un misuratore di distrazione, l’idea nasce da una serie di necessità:

1. far percepire fisicamente la quantità di interruzioni e quindi distrazioni durante un’attività di studio dovute alle continue notifiche ricevute sugli smartphone;
2. usare concetti elettronici ed informatici non estremamente complessi ed adatti a chi inizia ad utilizzare un microcontrollore;
3. far si che nell’attività di laboratorio sia presente una componente di educazione civica.

Da ciò è nato il “misuratore di distrazioni” che proporrò per la realizzazione ad un gruppo di colleghi che stanno seguendo il mio corso: Le buone pratiche del Making e dell’Internet delle Cose (IOT avanzato) organizzato dal Liceo da Vinci – Floridia (SR), sarà il progetto della settimana.

Il sistema sarà dotato di pochi componenti:

  • Arduino
  • Ldr
  • Display 16×2
  • Pulsante

Il tutto si presenta come una semplice scatola su cui può essere poggiato il telefono, un LDR posto sulla base di appoggio rileverà la variazione di luce quando si solleva lo smartphone. Il display indicherà il numero di volte che il telefono è stato preso e quindi il numero di volte che la persona ha interrotto il suo lavoro o studio. Le distrazioni potranno essere ridotte inserendo un coperchio che nasconde il display dello smartphone.

Ovviamente si potrà migliorare il sistema, ad esempio mostrando la quantità di minuti trascorsi dall’ultima distrazione, o ancora il numero di minuti totali si distrazione, il progetto potrà essere migliorata a piacimento. Poiché durante il corso dovrò parlare anche di IoT si aggiungerà la possibilità di invio messaggi di avvertimento via Telegram nel caso si raggiunga un limite fissato di distrazioni.

Per rendere la costruzione del dispositivo semplice e veloce ho utilizzato del foam core in modo che non ci sia l’obbligo di utilizzo di una stampante 3D o di una macchina a taglio laser per la realizzazione dell’oggetto.

Rendo quindi disponibile i sorgenti grafici in formato svg per stampare su foglio di carta adesiva le parti della scatola. I fogli adesivi verranno poi incollati sui pannelli foam ed ogni parte sarà tagliata a mano con un cutter e successivamente incollati con colla vinilica.

Buon making a tutti 🙂

Il mio articolo di presentazione del corso: Laboratori STEAM con Arduino sul sito Tecnica della scuola


On-line oggi il mio articolo sul sito Tecnica della Scuola che presenta il corso: Laboratori STEAM con Arduino. Potete raggiungerlo direttamente dalla home page del sito oppure seguendo il link allegato.
Per chi fosse interessato sono ancora aperte le iscrizioni, inoltre ai molti che mi hanno scritto chiedendomi se è dedicato ai soli insegnanti rispondo che:

il corso è di base ed è costruito pensando agli insegnanti che si approcciano all’uso di Arduino, quindi ne verrà introdotto l’uso in ambito didattico anche per i colleghi di materie non tecniche, ma è aperto a tutti, quindi anche ai non docenti.

Ricordo inoltre che durante il corso verranno svolte molte attività utilizzando dei simulatori, ma è preferibile dotarsi di un kit Arduino che vi permetterà di mettere in pratica immediatamente quanto appreso.

Tutti i consigli sui materiali e dove acquistarli verranno indicati durante il corso.

Per maggiori informazioni seguire il link.

Vi aspetto quindi al mio corso 🙂

Prove tecniche per la realizzazione di un sismografo con Arduino

Recentemente ho realizzato una breve lezione sull’uso del sensore piezoelettrico con Arduino e durante le prossime lezioni di sistemi elettronici, per le classi 3′, vedremo come sfruttare questo sensore per la realizzazione di un semplice sismografo per la rilevazione delle oscillazioni del pavimento dei corridoi della scuola, durante l’attività aggiungeremo la regolazione della sensibilità e la visualizzazione del grafico delle oscillazioni su un display oled, il passo successivo sarà quello di realizzare un sismografo con un pendolo.

Anteprima dell’attività di laboratorio:

Buon Making a tutti 🙂

Arduino: Sensore Piezoelettrico

Per effettuare una misura dinamica di pressione o allungamento o vibrazione di superfici è possibile utilizzare sensori che si basano su quello che viene comunemente chiamato “effetto piezoelettrico”, la parola “piezoelettrico” deriva dalla parola greca “piezein” che significa premere. La piezoelettricità è la proprietà di alcuni cristalli, che se sottoposti all’azione di una forza esterna esterna, provoca in essi una migrazione di cariche elettriche. Con l’utilizzo di un apposito circuito elettronico, la migrazione di cariche elettriche può essere tradotta una differenza di potenziale.

L’effetto piezoelettrico è un effetto reversibile, ciò vuol dire che una volta che abbiamo applicato una variazione meccanica sul cristallo si ottiene una variazione di cariche e in maniera analoga quando viene fornita una carica elettrica al sensore, questo si allungherà o si comprimerà.

Quando applichiamo al cristallo una forza meccanica le cariche elettriche si spostano accumulandosi sulle facce opposte del cristallo:

I materiali piezoelettrici utilizzati possono essere naturali o di sintesi dopo polarizzazione:

Materiali naturali

  • Quarzo cristallino (SiO2)
  • sale di Rochelle o sale di Seignette (tartrato di Sodio e Potassio)
  • Tormalina

Materiali di sintesi

  • Piezoceramici
    • Titanio Zirconato di Piombo (PZT)
    • Titanio di Bario (BaTiO3)

L’effetto piezoelettrico può essere sfruttato per:

  • generare energia elettrica
  • in campo medicale: ecografi
  • sensori di vibrazione per allarmi
  • sensori di impatto
  • sonar (in campo militare)
  • viene utilizzato negli accendini
  • per gli orologi
  • per rilevare variazioni meccaniche
  • produrre suoni, come nelle chitarre elettriche
  • messa a fuoco di strumenti ottici
  • sensori in capo ambientale per il radio tracking
  • ecc…

Esempio tipico è quello dei cicalini piezoelettrici, conosciuti anche come buzzer, che vengono utilizzate in molte delle sperimentazioni con Arduino, infatti sottoponendo a tensione elettrica e ad una determinata frequenza il materiale piezoelettrico all’interno del buzzer, viene posta in oscillazione e questo muovendo l’aria, dall’apposita apertura collocata sul buzzer, permette di percepire il suono.

Nelle sperimentazioni con Arduino è tipico usare sensori piezoelettrici economici che generalmente hanno forma circolare. Questi sensori non hanno gradi di precisioni elevati e sono utilizzati prevalentemente per rilevare vibrazioni. Per capire come sono realizzati questi sensori immaginate ad un sandwich in in cui l’elemento piezoelettrico, costituito da piombo-zirconato è inserito tra due piastre metalliche. Il loro utilizzo in circuito con microcontrollori è particolarmente semplice anche perché funzionano con le tensioni e le correnti che si hanno direttamente dai pin di uscita di questi circuiti elettronici.

Nel caso abbiate necessità di consultare i dati tecnici di diverse tipologie di dispositivi piezoelettrici vi rimando al questi due datasheet:

Realizziamo ora un circuito che ci permette, mediante il sensore piezoelettrico e Arduino, la rilevazione di vibrazioni e urti. Colleghiamo il sensore sulla breadboard e dalla breadboard ad Arduino, in questo modo eviteremo di far vibrare il sensore quando tocchiamo Arduino per effettuare i collegamenti.

Colleghiamo il filo rosso del sensore ad un ingresso analogico di Arduino, ad esempio A0 mentre il filo nero lo colleghiamo. In parallelo al sensore bisognerà inserire una resistore con resistenza da 1MOhm, ciò è necessario perché un piezo è un componente con caratteristiche capacitive e la resistenza in parallelo permette di assorbire le cariche che vengono accumulate sulla capacità.

Il circuito proposto è estremamente semplice ed è riportato di seguito:

Esempio 1

1/*
2 * Prof. Maffucci Michele
3 * data: 22.01.2021
4 * Lettura sensore piezoelettrico
5 *
6 * Esempio 1: stampa dei valori sulla serial monitor
7 * e visualizzazione del grafico sulla serial Plot
8 *
9 * Si ricorda che la Serial Plotter e la Serial Monitor
10 * non possono essere usati contemporaneamente
11 *
12 */
13 
14 
15void setup(){
16   // Inizializzazione della serial monitor
17  Serial.begin(9600);
18}
19 
20void loop(){
21  // val contiene il valore letto dal sensore 
22  int val = analogRead(A0);
23  Serial.println(val);
24  delay(20);
25}

Se si selezione Serial Plotter dal menù Tools:

si avrà la visualizzazione del grafico degli urti provocati sul sensore:

Come si può notare i valori sull’asse delle ordinate è compreso tra 0 e 1023.

Esempio 2

Arduino, come già spiegato nelle mie slide: Alfabeto di Arduino – Lezione 4, non è in grado di leggere direttamente valori di tensione, bisognerà utilizzare il convertitore analogico/digitale (ADC) integrato in esso per convertire una tensione elettrica in un valore numerico. L’ADC di Arduino è a 10 bit, quindi potrà mappare valori compresi tra 0V e 5V in valori numerici compresi tra 0 e 1023. (1024 valori), pertanto si avrà una risoluzione di 5/1024 = 4,88 mV.

Per ottenere la tensione elettrica partendo dai valori restituiti dall’ADC, sarà sufficiente prendere il valore restituito dall’analogRead() e moltiplicarlo per la tensione unitaria corrispondente ad una unità 5/1024 = 4,88 mV. Traduciamo questo in codice per visualizzare la tensione elettrica sulla Serial Plotter.

1/*
2 * Prof. Maffucci Michele
3 * data: 22.01.2021
4 * Lettura sensore piezoelettrico
5 *
6 * Esempio 2: stampa dei valori della tensione elettrica
7 * sulla Serial Monitor e Serial Plotter
8 * resitituita dal sensore nell'intervallo 0V - 5V
9 *
10 * Si ricorda che la Serial Plotter e la Serial Monitor
11 * non possono essere usati contemporaneamente
12 *
13 */
14 
15void setup(){
16   // Inizializzazione della serial monitor
17  Serial.begin(9600);
18}
19 
20void loop(){
21  // val contiene il valore letto dal sensore 
22  int val = analogRead(A0);
23  // tensione contiene il valore di tensione elettrica
24  float tensione = val *(5.0/1024);
25  Serial.println(tensione);
26  delay(20);
27}

Esercizio 1

Realizziamo un interruttore on/off, possiamo utilizzare gli esempi già disponibili all’interno dell’IDE di Arduino e che in altre occasioni ho utilizzato su questo sito.  L’idea è quella di realizzare un sistema antirimbalzo software (debounce) e attivare l’on o l’off su un LED se l’intensità della forza meccanica impressa è superiore ad un valore di soglia che impostiamo nel codice.

Esercizio 2

Collegare 10 LED ad Arduino ed utilizzare un sensore piezoelettrico per accendere una quantità di LED proporzionale alla forza impressa sul sensore.

Esercizio 3

Realizziamo un dimmer, un sistema in grado di regolare l’intensità luminosa di un LED. La regolazione dell’intensità luminosa sarà fatto toccando il sensore piezoelettrico. Il doppio tocco veloce (in un intervallo di tempo prestabilito da voi) inverte la modalità di variazione dell’intensità luminosa (aumentare/diminuire), nel caso non si riesca a realizzare lo sketch con il doppio tocco veloce, utilizzare un pulsante esterno per invertire la modalità intensità luminosa prodotta.

Esercizio 4

Utilizzando la stessa logica di funzionamento dell’esercizio 2, utilizzare ora una striscia LED per misurare l’intensità della forza meccanica con cui sollecitiamo il sensore piezoelettrico.

Buon Coding a tutti 🙂