Categoria: Elettronica


Lezione 1

By lapinig,

Operazioni di OUTPUT

Partiamo dalle più semplici operazioni gestibili con un microcontrollore come quello utilizzato nella scheda Arduino.

Esercitazione 1: Lampeggio Verde/Rosso

Con la piattaforma TinkerCad realizziamo questo circuito

Il funzionamento richiesto deve essere il seguente (con temporizzazioni fisse di 0,5 sec ovvero 500 msec):

  1. Si deve accendere il solo Led Verde
  2. Quindi si accende anche il Led Rosso insieme al Verde
  3. Si spenge il Led Verde (ma rimane acceso il Rosso)
  4. Si spegne anche il Led Rosso
  5. Il ciclo si ripete all’infinito

Il codice completo lo trovate qui (utilizzatelo solo dopo aver provato da soli).

Esercitazione 2: Semaforo semplificato a due vie

Come seconda prova propongo questo circuito

Immaginiamo di dover realizzare la gestione di una sequenza semaforica costituita da due gruppi di luci (rosso/giallo/verde) presenti in un incrocio di due vie. Per semplificare le due direzioni NS (Nord-Sud) e EW (Est-Ovest) hanno le stesse luci a coppie ossia il Rosso Nord si accenderà insieme al Rosso Sud, il Verde Nord insieme al Verde Sud, ecc.

Chiaramente quando nella direzione NS è acceso il colore Verde oppure Giallo, nella direzione ortogonale EW dovrà obbligatoriamente essere acceso il colore Rosso. Per questa ragione prendiamo in considerazione solo le sequenze di accensione dei colori Verde e Giallo, il Rosso opposto sarà acceso di conseguenza.

Le temporizzazioni richieste, inizialmente, sono di 5 secondi per il Verde e di 2 secondi per il Giallo. In seguito verrà chiesto di differenziare la tempistica per una delle due direzioni.

Il funzionamento richiesto è il seguente:

  1. Si accende il Verde nella direzione NS per 5 secondi (e quindi il Rosso EW)
  2. Si accende il Giallo nella direzione NS per 2 secondi (e quindi rimane acceso il Rosso EW)
  3. Si accende il Verde nella direzione EW per 5 secondi (e quindi anche il Rosso NS)
  4. Si accende il Giallo nella direzione EW per 2 secondi (e quindi rimane acceso il Rosso NS)
  5. Si ripete la sequenza dall’inizio

Nota: Le luci non indicate dovranno essere spente in ogni singolo punto, consiglio quindi di pilotare TUTTE le volte TUTTE le uscite, alcune saranno accese mentre altre spente.

Il codice completo lo trovate qui (utilizzatelo solo dopo aver provato da soli).

Esercitazione 3: Lampeggio “Real Time”

Come ultima prova di questa lezione propongo questo circuito

La funzione richiesta questa volta sembra molto semplice:

  1. Il Led Verde deve lampeggiare con un ritmo di 2 sec. ON / 2 sec. OFF
  2. Il Led Rosso deve lampeggiare con un ritmo di 0,5 sec. ON / 0,5 sec. OFF
  3. Il tutto ripetuto all’infinito

A prima vista, ripeto, potrebbe sembrare molto semplice da realizzare. In realtà è impossibile (o quasi) da ottenere con le tecniche viste finora, cioè con semplici sequenze lineari di istruzioni. Impossibile no, perchè prendendo il programma della prima esercitazione e modificandolo, con un numero di righe di istruzione circa 4-5 volte più grande si può ottenere il risultato richiesto. Ma se vi dicessi che va aggiunto un terzo Led, lampeggiante anch’esso e magari con un numero di volte che sta in rapporto di numero primo con gli altri ?

Il codice completo lo trovate qui (utilizzatelo solo dopo aver provato da soli).

I più attenti fra voi avranno notato un terzo Led di colore Blù che non è stato citato nel testo e non è utilizzato. A cosa serve? A complicare ancora di più le richieste:

  1. Ad ogni 5 lampeggi del Led Rosso il Led Blu si deve accendere per 1 secondo e quindi spengersi.

Il codice completo lo trovate qui (utilizzatelo solo dopo aver provato da soli).

Riepilogo dei contenuti delle esercitazioni:

  1. Le righe che iniziano con il simbolo // sono commenti e sono ignorate dal compilatore in linguaggio C. Usatele per chiarire i punti critici.
  2. Nel software della piattaforma Arduino la funzione setup() viene eseguita per prima ed una sola volta. Usatela per impostare le condizioni iniziali della macchina.
  3. Nel software della piattaforma Arduino la funzione loop() viene richiamata in continuo (in loop appunto) dopo la funzione setup() e non ha mai termine (solo con lo spengimento della macchina).
  4. La funzione pinMode() serve per impostare la modalità di funzionamento del piedino del microcontrollore della scheda di Arduino: INPUT o OUTPUT. Abbiamo visto per adesso solo la seconda possibilità.
  5. La funzione digitalWrite() serve per impostare un valore digitale su di un piedino di Arduino. Scrivendo HIGH o 1 sul pin saranno presenti 5 volt ed eventuali componenti connessi verranno “accesi”, mentre scrivendo LOW o 0 sul pin saranno presenti 0 volt ed eventuali componenti connessi verrano “spenti”. Il piedino deve essere definito come OUTPUT in precedenza.
  6. La dichiarazione #define non è una funzione del linguaggio C (manca infatti della coppia di parentesi tonde), ma bensì una direttiva o comando del preprocessore del linguaggio C. In pratica si può utilizzare per definire delle costanti utilizzate nel nostro programma. In realtà è molto più potente.
  7. La funzione if() esegue un controllo, in genere fra variabili utilizzate nel programma, per determinare se eseguire un pezzo di codice oppure (else) un altro pezzo di codice. La parte che segue subito la funzione if(), contenuta nella prima coppia di parentesi graffe, viene eseguita se il risultato del controllo è vero (true), altrimenti (else) viene eseguita la parte contenuta nella seconda coppia di parentesi graffe. Notare che, mentre la prima parte è obbligatoria la parte con else e seconda coppia di parentesi può anche mancare.

Alla prossima lezione

Corso Microcontrollori (Arduino)

By lapinig,

Queste pagine saranno utilizzate per fornire i materiali necessari per poter seguire il modulo 11.2 Microcontrollori (Arduino) del Corso AUTOMA20 di ITS PRIME, tenuto dal sottoscritto.

A causa delle ormai note ragioni questo modulo si terrà, almeno in questa parte iniziale, con didattica a distanza e, pertanto, utilizzeremo supporti di virtualizzazione delle esercitazioni di laboratorio per poter comprendere meglio la programmazione dei microcontrollori.

Verrà utilizzata la piattaforma TinkerCad (TM) fornita gratuitamente da AutoDesk (TM) sul sito https://www.tinkercad.com.

Qui potete trovare i primi consigli per registrarvi e poter così accedere a questa piattaforma.

Per comprendere i circuiti che verranno di volta in volta realizzati (virtualmente per adesso) occorre sapere che cos’è una BreadBoard.

Lezione 1: Esempi di OUTPUT

Gualtiero Lapini

Led Bianchi per illuminazione

By lapinig,

Progetto per illuminazione interni


In questo progetto proviamo ad utilizzare i LED bianchi di alta potenza…

Visto le grandi correnti in gioco, a volte maggiori di 100 mA, non possiamo utilizzare il classico metodo di collegamento: sorgente di alimentazione, resistenza in serie di limitazione di corrente, diodo led, ritorno verso massa. In questo caso avremmo una enorme dissipazione di potenza sulla resistenza in serie, inoltre una piccola variazione della tensione di alimentazione potrebbe provocare una variazione di corrente nel circuito oltre i limiti del LED, causandone quindi la distruzione.DX1 W3 865 L30

I LED di alta potenza devono essere pilotati a corrente costante: cioè decidiamo quanta corrente far circolare in essi in base alla emissione luminosa desiderata.

Prendiamo un componente disponibile sul mercato vicino a noi per comodità. Io ho trovato questo LED in un negozio di elettronica vicino a me:  DX1-W3-865-L30 prodotto dalla OSRAM.

copertina_datasheet_dx1

Dal datasheet fornito dal produttore ricaviamo tutte le informazioni che ci necessitano per il progetto.

Intanto visualizziamo la copertina contenente un veloce riepilogo delle caratteristiche del prodotto. In questo caso nella serie DX1 sono presenti quattro varianti principali che si diversificano per la quantità di luce emessa e per il raggio di ampiezza di illuminazione (in realtà si dovrebbe più propriamente parlare di “cono” visto che siamo nel mondo reale in 3 dimensioni).

dati_caratteristici_dx1

Il modello da me acquistato (865-L30) è composto da un unico elemento LED della potenza di 1,2 W a cui corrisponde una corrente di funzionamento normale di 350 mA con un angolo di emissione di 30° (quindi molto direzionale), per una intensità luminosa di 210 cd (candele) che corrisponde ad una luce molto forte. La tensione tipica ai capi del LED non è indicata poiché questo componente va pilotato a corrente costante.

maximum_ratings_dx1

Nel datasheet fornito dal produttore sono indicati anche i valori massimi (Maximum Ratings) da NON superare per evitare il danneggiamento del componente stesso. In questo caso ci serve conoscere il range di temperatura ambiente entro cui far lavorare il componente e la corrente massima che può circolare. Nell’esempio riportato la corrente massima è di 500 mA.