Sistemi 1

Programma di Sistemi della classe terza (aggiornato al 2023)

Numero di ore/settimana: 3 ore
Numero di ore/a.s.: 99 ore

Libro di testo


Modulo 1

ARDUINO DIGITALE

Arduino

Diagrammi di flusso con Flowgorithm

Programmazione di Arduino

Esercizi su Arduino con il pin13

Semafori a 2 e 3 luci

Esercizi con due Led

Esercizi con tre Led

Accensione Led dalla tastiera

Esercizi con il Monitor Seriale

Controllo Led da tastiera

Led e Pulsanti

Esercizi con un pulsante


Modulo 2

ARDUINO ANALOGICO

Pin analogici

Scrittura analogica

Esercizi con un Led e un pulsante

Lettura analogica

Controllo luminosità

Controllo luminosità con più Led

Esercizi con Led, potenziometro e pulsanti

Uso della seriale per la lettura di sensori

Esercizi con la seriale


Modulo 3

IL LINGUAGGIO DI ARDUINO

Rappresentazione dei dati

Assegnamento, espressioni e operatori

Strutture condizionali

Strutture iterative

Funzioni

Dati strutturati: vettori e matrici






Anno scolastico 2017-18

PREPARAZIONE ALLA PROVA DI VERIFICA

Esercizio 1  

Scrivere un programma per ARDUINO per realizzare un dispositivo che conta le persone che entrano in una sala prima dell'inizio di un concerto.

La sequenza delle operazioni è la seguente:

1. si attende l'arrivo di una persona  (pin0=1);

2. si attendono 4 secondi;

3. si attende l'ingresso di una persona  (pin0=0);

4. si incrementa una variabile che rappresenta il numero di persone entrate;

5. se si supera la capienza della sala (1000 persone) ARDUINO accende il cartello luminoso (pin3=1) per bloccare l'acceso di altre persone;

6. si torna al punto 1.

Esercizio 2

Scrivere un programma per ARDUINO per fare lampeggiare 2 led in questo modo:

● se pin0=1 il led lampeggiano alternativamente;

● se pin0=0 il led lampeggiano

insieme.

Esecizio 3

Scrivere un programma per ARDUINO per realizzare il controllo di un forno industriale per il pane dotato di un nastro trasportatore.

La sequenza delle operazioni è la seguente:

1. si attende che una fotocellula, collocata all'ingresso segnali la presenza del panetto di pane da cuocere (pin0=1);

2. si attiva il nastro trasportatore (pin1=1);

3. si attende un tempo di 10 minuti esatti;

4. si disattiva il nastro trasportatore e si torna all'inizio.

Esercizio 4

Un robot dispone di una paletta per le pulizie azionata da  un pistone e dotata di un aspiratore.

Scrivere un programma per ARDUINO che esegue la seguente sequenza:

1. si attende che venga individuato da un sensore un eventuale rifiuto (pin0=1);

2. si aziona la paletta (pin1=1);

3. si aspetta che la paletta sia pronta (2 secondi);

4. si aziona l'aspiratore (pin2=1) per rimuovere il rifiuto;

5. si attende che il rifiuto non venga più rilevato (pin0=0);

6. si disattiva la paletta (pin1=0) e si si spenge l'aspiratore (pin2=0);

7. si torna al punto 1.

Esercizio 5

Scrivere un programma per ARDUINO per gestire un'insegna luminosa.

La sequenza delle operazioni è la seguente:

1. si attende che un pulsante (pin0) venga premuto e rilasciato;

2. si accendono 8 lampade (pin1-pin8) secondo la prima modalità: lampeggio alternato (4 lampade e 4 lampade) ogni secondo;

3. si attende che il pulsante (pin0) venga premuto e rilasciato;

4. si accendono 8 lampade secondo un'altra modalità: lampeggio contemporaneo (8 lampade insieme) ogni 3 secondi;

5. se viene premuto il pulsante collegato al pin0 si torna all'inizio;

6. si torna al punto1.

Esercizio 6

Scrivere un programma per ARDUINO per gestire un'insegna luminosa.

Se il pin3=0 si accendono 4 lampade (pin 4-7) progressivamente in 5 secondi e poi si spengono progressivamente in 1 secondo, se il pin3=1 si accendono 2 lampade (pin 4-5) progressivamente in 3 secondi e poi si accendono 2 lampade (pin 6-7) progressivamente in 2 secondi, poi si spengono improvvisamente.

Il programma si ripete.

Esercizio 7

Scrivere un programma per ARDUINO per gestire tre led in funzione del valore di un potenziometro.

Il led collegato al pin4 si accende se la tensione sul potenziometro è sotto i 2 volt.

Il led collegato al pin5 si accende se la tensione sul potenziometro è tra i 2 volt e i 3,5 volt.

Il led collegato al pin6 si accende se la tensione sul potenziometro è sopra i 3,5 volt.

Esercizio 8

Scrivere un programma per ARDUINO che accende cinque led come con la seguente sequenza: rosso (1 secondo), giallo (0,25 secondi), verde (1,5 secondi), blu (3 secondi), arancione (6 secondi) se il pin4=0.

Se il pin4=1 i led di accendono con la solita sequenza ma il tempo è dimezzato.

Esercizio 9

Scrivere un programma per un Arduino collegato a due led (pin 9 e 10) e un pulsante (pin 4)

1) il programma accende i due led se viene premuto il pulsante

2) il programma accende un led (pin9) se viene premuto, se viene rilasciato accende un altro led (pin10)

3) il programma fa lampeggiare un led (pin9) se viene premuto, se viene rilasciato fa lampeggiare un altro led (pin10)

Esercizio 10

Scrivere un programma per un Arduino collegato a due led (pin 9 e 10) e un potenziometro (pin A0)

1) il programma accende un led (pin9) se la tensione su A0 è maggiore di 3 V, accende un altro led (pin10)  se la tensione su A0 è maggiore di 2 V

2) il programma fa lampeggiare un led (pin9) se la tensione su A0 è maggiore di 2 V, fa lampeggiare led (pin10) se la tensione su A0 è maggiore di 3 V, fa lampeggiare entrambi i i led se la tensione su A0 è maggiore di 4 V

Esercizio 11

Scrivere un programma per un Arduino collegato a due led (pin 9 e 10) e un pulsante (pin 4)

1)  il programma accende un led (pin9) se viene premuto e rilasciato un pulsante, accende un altro led (pin10)  se viene premuto e rilasciato il pulsante

2)  il programma fa lampeggiare un led (pin9) se viene premuto un pulsante, fa lampeggiare un altro led (pin10)  se viene ripremuto il pulsante

Esercizio 12

Scrivere un programma per un Arduino collegato a tre led (pin 9,10, 11) e un pulsante (pin 4).

1) se il pulsante viene premuto il pulsante, il programma accende un led alla volta per tre volte

2) il programma accende gradualmente un led (pin 10) fino a metà luminosità in 2 secondi, poi attende 1 secondo, poi accende lo stesso led gradualmente fino al massimo in 2 secondi

3) il programma accende gradualmente il led 9 in 2 secondi, poi il led 10 nello stesso tempo, infine il led 11, infine spenge tutti i led

4) il programma attende che il pulsante venga premuto e venga rilasciato e accende e spegne gradualmente il led 9, poi si aspetta che il pulsante venga premuto e poi rilasciato, poi si accende e spegne gradualmente il led 10, poi si aspetta di nuovo che venga premuto e rilasciato il pulsante e si accende e spegne gradualmente il led 11.

Esercizio 13

Scrivere un programma per un Arduino collegato a quattro led (pin 2, 3, 4, 5) e un interruttore (pin 13).

1) se l'interruttore viene chiuso (pin13=1), il programma accende i led 2 e 3, altrimenti accende i led 4 e 5

2) se l'interruttore viene chiuso (pin13=1), il programma accende i led da 2 a 5 in sequenza per 4 volte, altrimenti i led sono spenti

3) l'interruttore viene aperto (pin13=0), il programma accende insieme i led da 2 a 5 progressivamente in 3 secondi, altrimenti (pin13=1) il programma spegne insieme i led da 2 a 5 progressivamente in 3 secondi

Esercizio 14

Scrivere un programma per un Arduino collegato a un led (pin 10), un pulsante (pin 3), un potenziometro (pin A2).

1) il programma fa lampeggiare il led con i seguenti tempi: acceso per 1 s, spento per 2,5 s

2) il programma fa lampeggiare il led con i seguenti tempi: acceso per un tempo uguale alla tensione sul cursore del potenziometro (5V verranno tradotti in 5s, 1 V in 1s), spento per un tempo uguale alla metà della tensione sul cursore del potenziometro

3) il programma attende che il pulsante (pin 3) venga premuto e rilasciato, poi accende il led al valore di luminosità proporzionale alla tensione sul cursore del potenziometro, poi attende che il pulsante venga premuto e rilasciato per spegnere il led

4) il programma attende che il pulsante (pin 3) venga premuto, poi accende progressivamente il led fino a 5 V in 5 s, il led rimane al massimo delle luminosità se il pulsante rimane premuto oltre i 5s, se il pulsante viene rilasciato prima il led viene spento progressivamente con lo stesso tempo e rimane spento fino

Esercizio 15

Un cancello automatico di sola uscita di un parcheggio si deve aprire se l'auto si avvicina e si deve chiudere quando l'auto non è più presente. Il cancello ha una fotocellula che è collegata al pin 2 di Arduino che va a livello logico alto quando è presente l'auto. ll cancello è dotato di due motori collegati ai pin 4,5,6,7 di Arduino, mettendo il livello logico alto sui pin 4 e 6 il cancello si chiude, mettendo iol livello logico alto sui pine 5  e 7 il cancello si apre. Quano i pin sono a zero il cancello sta fermo. Per aprire e  chiudere il cancello ci vogliono 20 s.

DIAGRAMMI DI FLUSSO

Raptor

http://raptor.martincarlisle.com/

Esercizi di preparazione alla prova di verifica

Scrivere un algoritmo rappresentandolo tramite diagramma a blocchi, per la soluzione del seguente problema:

- calcolare l’area del triangolo

Scrivere un algoritmo rappresentandolo tramite diagramma a blocchi, per la soluzione del seguente problema:

- trovare il max di due numeri

Scrivere un algoritmo rappresentandolo tramite diagramma a blocchi, per la soluzione del seguente problema:

- calcolare le radici reali di equazioni di 2° grado

Scrivere un algoritmo rappresentandolo tramite diagramma a blocchi, per la soluzione del seguente problema:

- un sistema per automatizzare la spesa in un supermercato deve contare il numero di prodotti messi nel carrello per una spesa massima di 100€ e segnalare quando si supera 100€

Scrivere un algoritmo rappresentandolo tramite diagramma a blocchi, per la soluzione del seguente problema:

- Leggo gli ingressi e li metto in x e y

- Calcolo la differenza d = x-y e la metto in dif

- Confronto dif con 0

- Se dif  > 0, scrivo “max è x” e metto x in maggiore

- Se dif  < 0, scrivo “max è y” e metto y  in maggiore

Scrivere un algoritmo rappresentandolo tramite diagramma a blocchi, per la soluzione del seguente problema:

- dati in ingresso due numeri positivi x e y visualizza in ordine decrescente la sequenza di numeri interi compresi tra x e y che sono divisibili per per il minore tra x e y.  Ad esempio, se x = 7 e y = 35, la sequenza è  35  28  21  14  7

Dati cento numeri divisi in dieci set nel seguente ordine.

Set 1: 1-10

Set 2: 11-20

Set 3: 21-30

...

Set 10: 91-100

Disegnare un diagramma di flusso che stamperà la somma di ciascun set.

Anno 2014-15

Schema elettronico Arduino 2009

Sito di riferimento di ARDUINO (per le istruzioni selezionare Learning - Reference)

Domande di preparazione alla prova di verifica

1) Quanti pin possono essere programmati come ingressi digitali su Arduino?

2) Quanti pin possono essere programmati come uscite digitali su Arduino?

3) Quanti pin possono essere utilizzati come uscite analogiche su Arduino?

4) Quanti pin possono essere utilizzati come ingressi analogici su Arduino?

5) Qual'è il microcontrollore utilizzato in Arduino 2009?

6) In quanti modi si alimenta Arduino? Quali sono?

7) Come si trasferisce il programma dal PC ad Arduino?

8) Perché il pin 13 è diverso dagli altri pin?

9) Tramite quali dispositivi un robot riceve segnali dall'esterno?

10) Tramite quali dispositivi un robot si muove o muove proprie parti?

11) A che servono i diodi inseriti nel circuito del driver dei motori di un robot?

12) Che significa IR e perché si usano i dispositivi IR?

13) Qual'è il motore utilizzato nei robot minisumo alimentati a batterie?

14) Qual'è il punto debole di questi motori?

15) A che serve il trigger nel dispositivo di ingresso dei segnali di un robot?

16) Che cosa è il catodo di un diodo led?

17) Qual'è il simbolo grafico di diodo led?

18) Come si collega un diodo ad un pin di Arduino? (disegna lo schema con i valori dei componenti)

19) A quale tensione si può alimentare Arduino con una pila?

20) Scrivere il loop() per fare lampeggiare un led con Arduino.

21) Scrivere il loop() per accendere un led a comando da tastiera (tasto 0 = ON, tasto 1=OFF).

22) Scrivere il programma di setup per la seriale.

23) A che serve l'istruzione digitalWrite e quali sono i parametri che servono a farla funzionare?

24) A che serve l'istruzione delay e qual'è il parametro che serve a farla funzionare?

25) A che serve il driver in un robot?

26) Quanti driver servono per pilotare un motore in modo che possa andare avanti e indietro?

27) A che serve l'istruzione #define?

28) Nei programmi di Arduino che differenza c'è tra l'operatore == e l'operatore = ?

29) A che serve la tabella ASCII?

30) Quando di usano la parentesi graffe?

31) Che differenza c'è tra le parentesi graffe e quelle tonde?

32) A che serve l'istruzione Serial.available()?

33) A cosa servono le spazzole nel motore in corrente continua?

34) Quando si usa Arduino nano al posto di Arduino uno?

35) Quando si usa Arduino mega al posto di Arduino uno?

36) Si può alimentare Arduino se non si usa il cavo USB e lo spinotto di alimentazione? Come?

Diagrammi di flusso (accensione led con pulsante)

ESERCITAZIONE

Test uscita ingresso analogico

Test ingresso analogico con potenziometro

PROVA DI VERIFICA

1. Scrivere un programma per ARDUINO per gestire una serranda di un negozio

1) attendere che il commutatore a chiave venga attivato pin7=1;

2) alzare la serranda attivando il motore attraverso il pin9 con una tensione progressiva che sale da 0 al massimo in 10 secondi e impostando la rotazione su “avvolgi” attraverso pin12=1;

3) attendere altri 10 secondi;

4) spegnere il motore;

5) attendere che il commutatore a chiave venga attivato pin7=1;

6) abbassare la serranda attivando il motore attraverso il pin9 con una tensione progressiva che sale da 0 al massimo in 10 secondi e impostando la rotazione su “fai scendere” attraverso pin12=0;

7) spegnere il motore;

8) ritorna al punto 1

2. Scrivere un programma per ARDUINO che gestisce un robot per la gara di minisumo con le seguenti specifiche:

1) attendere che venga premuto un pulsante (pin4 =1);

2) far lampeggiare 5 volte un led collegato al pin5 (la durata complessiva del lampeggio deve essere di 5 secondi);

3) attivare i motori attraverso pin10 e pin9 a metà della loro velocità massima, impostando la direzione avanti su entrambi i motori attraverso i pin 8 e 12;

4) attendere che uno dei 2 sensori analogici (pin4 e pin5) veda il bianco, ovvero il valore letto su uno dei due pin sia inferiore a 450;

5) attivare i motori attraverso pin10 e pin9 al massimo della loro velocità, impostando la direzione indietro su entrambi i motori attraverso i pin 8 e 12, per 2 secondi;

6) ritorna al punto 3.

3. Scrivere un programma per ARDUINO per gestire la porta girevole di una aereoporto:

1) fare lampeggiare il led sul pin3 mentre si attende che il pulsante di apertura venga premuto (pin10=1);

2) attivare l'apertura della porta attraverso un motore collegato al pin9 e impostando il movimento su “apri” attraverso pin2=1;

3) attendere 4 secondi;

4) attivare la chiusura della porta attraverso il motore collegato al pin9 e impostando il movimento su “chiudi” attraverso pin2=0;

5) attendere 4 secondi;

6) spegnere il motore;

7) attivare il messaggio vocale inviando un comando al sintetizzatore vocale attraverso i pin 4=1 e pin5=0;

8) attendere che il sensore di rilevamento dell'impronta digitale venga attivato pin7=1;

9) attendere 2 secondi;

10) attendere che il sensore dia il consenso pin7=0;

11) attivare l'apertura della porta interna attraverso un motore collegato al pin13 e impostando il movimento su “apri” attraverso pin2=1;

12) attendere 4 secondi;

13) attivare l'apertura della porta interna attraverso il motore collegato al pin13 e impostando il movimento su “chiudi” attraverso pin2=0;

14) ritorna al punto 1

Esercizi di ripasso

ESERCIZI DI PREPARAZIONE ALLA PROVA DI VERIFICA DI MARZO

Esercizio 1

Si realizzi il programma per un Arduino che ha due uscite (pin 9 e pin10) e un ingresso (pin4). Se viene premuto (pin 4=1) e rilasciato il pulsante (pin 4=0) i led lampeggoano alternativamente, se il pulsante viene premuto e rilasciato di nuovo i led lampeggiano in contemporanea.

Esercizio2

Si realizzi il programma per un Arduino che ha un uscita (pin 9) e un ingresso (pin4). Il led collegato al pin 9 viene acceso progressivamente in 3 secondi e spento progressivamente in 3 secondi. Questo lampeggio graduale si ripete fino a che viene premuto (pin 4=1) e rilasciato il pulsante (pin 4=0). A questo punto i led lampeggiano alternativamente per 20 secondi e poi il programa si ripete dall'inizio.

Esercizio3

Si realizzi il programma per un Arduino che ha tre uscite (pin 9,12,13) e due ingressi (pin4 e pin11). Il led collegato al pin 13 lampeggia fino a che viene premuto il pulsante (pin 4=1). A questo punto si accendono le due uscite 12 e 9 (quest'ultima al 50%) collegate ad un driver di un motore, ma se viene attivato il sensore (pin11=1) l'uscita 9 si azzera, si attende 10 secondi, si inverte il movimeno del motore (pin12=0 e pin9=50%) fino a che il sensore si disattiva (pin11=0). Poi il programma riparte dall'inizio.

Esercizio4

Si realizzi il programma per un Arduino che ha sette uscite (da pin 0 a pin6) collegati a delle luci che illuminano un percorso pedonale.

Poi ci sono sette ingressi (da pin 7 a pin13) che sono collegati

a dei sensori di presenza. Il programma fa accendere le tre luci piu' vicine al punto in cui il sensore vede una persona. Se la persona entra nel percorso o esce si devono accendere solo le 2 luci piu' vicine all'ingresso o all'uscita.

Esercizio5

Si realizzi il programma per un Arduino che gestisce una cisterna di recupero dell'acqua piovana. Ci sono quattro uscite (da pin 0 a pin3), collegate a tre led e una pompa idraulica che fa partire l'irrigazione di un giardino. Ci sono poi tre ingressi (da pin4 a pin6): un sensore di troppo pieno, un sensore di serbatoio vuoto, un deviatore estate-inverno. Il programma fa accendere la pompa solo se il deviatore e' sulla posizione estate (pin6=1) e il serbatoio non e' vuoto (pin5=1), solo un'ora al giorno tutti i giorni dalle ore 20 alle 21.

Inoltre il programma accebde i led per visualizzare i seguenti stati: troppo pieno, serbatoio vuoto, pompa accesa.

Gestione di un cancello automatico

Si dispone di:

- di un sensore per sentire la presenza dell'auto davanti al cancello,

- di un sensore per ricevere il comando di apertura,

- di un motore per aprire il cancello,

- di un paletto elettromeccanico per bloccare il cancello nelle posizioni chiuso e aperto.

Un microcontrollore controlla il cancello.

Quando un auto si avvicina viene dato il comando di apertura, alza il paletto e

accende il motore che apre il cancello e attende per 30 secondi l'apertura.

Poi fa scendere il paletto per bloccare il cancello nella posizione aperto.

Attende che il sensore non rilevi più l'auto, poi alza il paletto,

Chiude il cancello spengendo il motore, attende 30 secondi, attende una nuova auto.

Esercizi di preparazione alla prova di verifica

Esercizio 1

Scrivere un programma per ARDUINO che accende due led lampeggianti simultaneamente se l'ingresso 4 è a 1 e accede i due led lampeggianti alternativamente se l'ingresso è a 0.

Esercizio 2

Scrivere un programma per un ARDUINO che accende un led se si preme un pulsante (ingresso 0) e si spenge se si preme un altro pulsante (ingresso 1).

Svolgimento

setup()

{

    pinMode(0,INPUT);

    pinMode(1,INPUT);

    pinMode(2,OUTPUT);

}

loop()

{

    while(!digitalRead(0));

    digitalWrite(2,HIGH);

    while(!digitalRead(1));

    digitalWrite(2,LOW);

}

Esercizio 3

Scrivere un programma per un ARDUINO che accende un led se si preme contemporaneamente due pulsanti (ingresso 0 e ingresso 1) e si spenge se si preme uno dei due pulsanti da solo.

Esercizio 4

Scrivere un programma per un ARDUINO che fa lampeggiare un led su pin3 se si preme il pulsante (ingresso 0) e se si un altro pulsante (ingresso 1) fa lampeggiare un led su pin4. Se si preme un altro pulsante su pin2 si spegne tutto.

Svolgimento (da provare, migliorare e/o correggere)

setup()

{

    pinMode(0,INPUT);

    pinMode(1,INPUT);

    pinMode(2,INPUT);

    pinMode(3,OUTPUT);

    pinMode(4,OUTPUT);

}

loop()

{

    int lampeggio=0;

    int led1=0;

    int led2=0;

    while(!digitalRead(0) && !digitalRead(1) && !digitalRead(4));

    if ((digitalRead(0) && !lampeggio) || led1)

    {

        digitalWrite(3,HIGH);

        lampeggio=1;

        led1=1;

    }

    else

    {

        digitalWrite(3,LOW);

        lampeggio=1;

        led1=1;

    }

    if ((digitalRead(1) && !lampeggio) || led2)

    {

        digitalWrite(4,HIGH);

        lampeggio=1;

        led2=1;

    }

    else

    {

        digitalWrite(4,LOW);

        lampeggio=1;

        led2=1;

    }

    delay(500);

    if (digitalRead(2) && lapeggio)

    {

        digitalWrite(3,LOW);

        digitalWrite(4,LOW);

        lampeggio=0;

    }

}

Esercizio 5

Scrivere un programma per ARDUINO che accende tre led come in un semaforo con la seguente sequenza: rosso (1 secondo), giallo (0,25 secondi), verde (1,5 secondi).

Esercizio 6

Scrivere un programma per ARDUINO che scrive 1 o 0 sui pin da 0 a 4 in funzione degli ingressi da 5 a 9. Per esempio se il pin 5 è a 1, allora il pin 0 va a 1.

Esercizio 7

Scrivere un programma per ARDUINO che accende 13 led se si preme un pulsante e spenge tutto se si preme lo stesso  pulsante.

Esercizio 8

Un cancello automatico dispone di due pistoni e di un paletto di blocco.

Scrivere un programma per l'ARDUINO che controlla il cancello.

Il processo è il seguente:

● si attende l’auto segnalata da una fotocellula davanti al cancello (pin0=1)

● si attende che venga premuto un pulsante (pin1=1)

● si attiva la salita del paletto di blocco del cancello (pin3=1)

● si attende 2 secondi

● si attivano i pistoni che fanno aprire il cancello (pin2=1)

● si attende che un microinterrutore segnali che il cancello è aperto (pin4=1)

● si disattivano i pistoni che fanno aprire il cancello (pin2=0)

● si attende 10 secondi

● si verifica che l'auto non sia più presente (pin0=0)

● si attivano i pistoni che fanno chiudere il cancello (pin5=1)

● si attende che un microinterrutore segnali che il cancello è aperto (pin6=1)

● si disattivano i pistoni che fanno chiudere il cancello (pin5=0)

● si attiva la discesa del paletto di blocco del cancello (pin3=0)

● si torna all'inizio

GARA di PROGRAMMAZIONE

SQUADRA1

Il contapersone

Si vuole utilizzare ARDUINO  per realizzare un dispositivo che segnala il superamento della capienza massima di un cinema.

Il processo è il seguente:

● ogni 500 ms ARDUINO fa lampeggiare un led verde collegato al pin2

● un tornello segnala il passaggio di uno spettatore, ARDUINO attende pin0=1, poi attende pin0=0, poi incrementa una variabile che rappresenta il numero di persone entrate

● se si supera la capienza della sala (500 persone) ARDUINO fa lampeggiare a interrupt il led rosso collegato a pin3 (sempre ogni 500 ms)

● si attende il pulsante di reset (pin1=1) per tornare all'inizio del programma

SQUADRA 2

Il contapezzi

Si vuole utilizzare ARDUINO per realizzare un dispositivo contapezzi.

Il processo è il seguente:

● una fotocellula segnala il passaggio di un pezzo sul nastro trasportatore, ARDUINO attende pin0=1, poi attende pin0=0, poi incrementa una variabile che rappresenta il numero di pezzi contati

● viene attivato un ritardo di 250 ms

● ogni 200 ms ARDUINO fa lampeggiare un led verde collegato a pin1

● se si supera i 1000 pezzi ARDUINO fa lampeggiare il led rosso collegato a pin2 (ogni 200 ms)

● si attende il pulsante di reset (pin3=1) per tornare all'inizio del programma

SQUADRA 3

La foratrice

Una cella di foratura dispone di un trapano a colonna dotato di un pistone.

Un ARDUINO controlla il processo di foratura.

Il processo è il seguente:

● si attende che venga premuto il pulsante (pin0=1)

● si controlla che lo sportello di protezione (pin1=1) sia chiuso, se non lo è si torna all'inizio

● si attiva un pistone (pin2=1) che fa scendere il trapano (il trapano torna nella posizione di riposo grazie a una molla)

● si attende la discesa del trapano per 1 secondo

● si accende il motore del trapano (pin3=1)

● si controlla che il pulsante sia premuto e lo sportello sia chiuso, quando non è più verificata una di queste due condizioni si disattiva subito motore e pistone e si riparte dall'inizio

SQUADRA 4

La pressa

Si vuole utilizzare ARDUINO per realizzare il controllo di una pressa.

Il processo è il seguente:

● si attende la pressione dei due pulsanti di attivazione della pressa, posti a una distanza di 1 metro tra di loro, pin1=1 e pin2=1

● si chiude la pressa (pin0=1)

● si attende un tempo di 16 secondi esatti (utilizzare un ritardo di 5 s)

● si disattiva la pressa

● si attende che i pulsanti siano stati rilasciati entrambi e si torna all'inizio

● si attende il pulsante di reset (pin1=1) per tornare all'inizio del programma

SQUADRA 5

Giochi di luci

Si vuole utilizzare un ARDUINO  per realizzare tre giochi di luci.

Il processo è il seguente:

● a interrupt si accendono 12 led secondo tre modalità: lampeggio ogni secondo, lampeggio ogni 3 secondi, lampeggio ogni 6 secondi, in ogni modalità

● nel main si attende la pressione di un pulsante pin0 e al suo rilascio si cambia modalità

CORREZIONE PROVA DI VERIFICA

FILA A

Esercizio 1

Scrivere un programma per ARDUINO per realizzare un dispositivo che conta le persone che entrano in una sala prima dell'inizio di un concerto.

La sequenza delle operazioni è la seguente:

1. si attende l'arrivo di una persona  (pin0=1);

2. si attendono 4 secondi;

3. si attende l'ingresso di una persona  (pin0=0);

4. si incrementa una variabile che rappresenta il numero di persone entrate;

5. se si supera la capienza della sala (1000 persone) ARDUINO accende il cartello luminoso (pin3=1) per bloccare l'acceso di altre persone;

6. si torna al punto 1.

setup()

{

    pinMode(0,INPUT);

    pinMode(3,OUTPUT);

}

loop()

{

    int persone=0;

    while(!digitalRead(0));    // attende arrivo persona

    delay(4000);                   // attende 4 secondi

    while(digitalRead(0));     // attende ingresso persona

    persone++;                      // incrementa conteggio

    if(persone==1000) digitalWrite(3,HIGH);     // segnala capienza massima

}

Esercizio 2

Scrivere un programma per ARDUINO per fare lampeggiare 2 led in questo modo:

● se pin0=1 il led lampeggiano alternativamente;

● se pin0=0 il led lampeggiano insieme.

setup()

{

    pinMode(0,INPUT);

    pinMode(1,OUTPUT);

    pinMode(2,OUTPUT);

}

loop()

{

    if(!digitalRead(0))

    {   

        digitalWrite(1,HIGH);

        digitalWrite(2,HIGH);

        delay(400);

        digitalWrite(1,LOW);

        digitalWrite(2,LOW);

        delay(400);

    }

    if(digitalRead(0))

    {   

        digitalWrite(1,LOW);

        digitalWrite(2,HIGH);

        delay(400);

        digitalWrite(1,HIGH);

        digitalWrite(2,LOW);

        delay(400);

    }

}

Esecizio 3

Scrivere un programma per ARDUINO per realizzare il controllo di un forno industriale per il pane dotato di un nastro trasportatore.

La sequenza delle operazioni è la seguente:

1. si attende che una fotocellula, collocata all'ingresso segnali la presenza del panetto di pane da cuocere (pin0=1);

2. si attiva il nastro trasportatore (pin1=1);

3. si attende un tempo di 10 minuti esatti;

4. si disattiva il nastro trasportatore e si torna all'inizio.

setup()

{

    pinMode(0,INPUT);

    pinMode(1,OUTPUT);

}

loop()

{

    while(!digitalRead(0));   // attende ingresso pane

    digitalWrite(1,HIGH);    // nastro ON

    delay(600000);         // aspetta 10 minuti = 10 x 60 s x 1000 ms

    digitalWrite(1,LOW);  // nastro OFF

}

Esercizio 4

Un robot dispone di una paletta per le pulizie azionata da  un pistone e dotata di un aspiratore.

Scrivere un programma per ARDUINO che esegue la seguente sequenza:

1. si attende che venga individuato da un sensore un eventuale rifiuto (pin0=1);

2. si aziona la paletta (pin1=1);

3. si aspetta che la paletta sia pronta (2 secondi);

4. si aziona l'aspiratore (pin2=1) per rimuovere il rifiuto;

5. si attende che il rifiuto non venga più rilavato (pin0=0);

6. si disattiva la paletta (pin1=0) e si si spenge l'aspiratore (pin2=0);

7. si torna al punto 1.

setup()

{

    pinMode(0,INPUT);

    pinMode(1,OUTPUT);

    pinMode(2,OUTPUT);

}

loop()

{

    while(!digitalRead(0));   // attende rilevamento rifiuto

    digitalWrite(1,HIGH);    // paletta azionata

    delay(2000);         // aspetta 2 secondi

    digitalWrite(2,HIGH);  // aspiratore ON

    while(digitalRead(0));   // attende fine rilevamento rifiuto

    digitalWrite(1,LOW);  // paletta OFF

    digitalWrite(2,LOW);  // aspiratore OFF

}

Esercizio 5

Scrivere un programma per ARDUINO per gestire un'insegna luminosa.

La sequenza delle operazioni è la seguente:

1. si attende che un pulsante (pin0) venga premuto e rilasciato;

2. si accendono 8 lampade (pin1-pin8) secondo la prima modalità: lampeggio alternato (4 lampade e 4 lampade) ogni secondo;

3. si attende che il pulsante (pin0) venga premuto e rilasciato;

4. si accendono 8 lampade secondo la prima modalità: lampeggio contemporaneo (8 lampade insieme) ogni 3 secondi;

5. se viene premuto il pulsante collegato al pin0 si torna all'inizio;

6. si torna al punto1.

setup()

{

    pinMode(0,INPUT);

    for(int i=1; i<=8; i++) pinMode(i,OUTPUT);  // pin da 1 a 8 programmati come uscite

}

loop()

{

    while(!digitalRead(0));   // attende pressione pulsante

    while(digitalRead(0));   // attende rilascio pulsante

    while(!digitalRead(0))   // ciclo attesa pressione pulsante

    {

        for(int i=1;i<=4;i++) digitalWrite(i,HIGH);    // accende lampade

        for(int i=5;i<=8;i++) digitalWrite(i,LOW);    // spegne lampade

        delay(500);         // attesa per visualizzare lampeggio    

        for(int i=1;i<=4;i++) digitalWrite(i,LOW);    // spegne lampade

        for(int i=5;i<=8;i++) digitalWrite(i,HIGH);    // accende lampade

        delay(500);         // attesa per visualizzare lampeggio

    }

    while(digitalRead(0));   // attende rilascio pulsante

    while(!digitalRead(0))   // ciclo attesa pressione pulsante

    {

        for(int i=1;i<=8;i++) digitalWrite(i,LOW);    // spegne lampade

        delay(500);         // attesa per visualizzare lampeggio    

        for(int i=1;i<=8;i++) digitalWrite(i,HIGH);    // spegne lampade

        delay(500);         // attesa per visualizzare lampeggio

    }

    while(digitalRead(0));   // attende rilascio pulsante

    while(!digitalRead(0));   // attende pressione pulsante

}

FILA B

Esercizio 1

Scrivere un programma per ARDUINO per fare lampeggiare 2 led in questo modo:

● se pin0=1 il led lampeggiano insieme;

● se pin0=0 il led lampeggiano alternativamente.

setup()

{

    pinMode(0,INPUT);

    pinMode(1,OUTPUT);

    pinMode(2,OUTPUT);

}

loop()

{

    if(digitalRead(0))

    {   

        digitalWrite(1,HIGH);

        digitalWrite(2,HIGH);

        delay(400);

    }

    if(!digitalRead(0))

    {   

        digitalWrite(1,LOW);

        digitalWrite(2,HIGH);

        delay(400);

    }

    if(digitalRead(0))

    {   

        digitalWrite(1,LOW);

        digitalWrite(2,LOW);

        delay(400);

    }

    if(!digitalRead(0))

    {   

        digitalWrite(1,HIGH);

        digitalWrite(2,LOW);

        delay(400);

    }

}

Esercizio 2

Scrivere un programma per ARDUINO per realizzare un dispositivo che conta le persone che escono da un supermercato.

La sequenza delle operazioni è la seguente:

1. si attende l'arrivo di una persona  (pin0=1);

2. si attendono 4 secondi;

2. si incrementa una variabile che rappresenta il numero di persone uscite;

3. se si supera il numero previsto dalla direzione del supermercato (1.000.000 di persone) ARDUINO accende la sirena (pin3=1) per premiare il milionesimo cliente;

4. si attende che il cliente sia uscito (pin0=0);

5. si torna al punto 1.

setup()

{

    pinMode(0,INPUT);

    pinMode(3,OUTPUT);

}

loop()

{

    int persone=0;

    while(!digitalRead(0));    // attende arrivo persona

    delay(4000);                   // attende 4 secondi

    persone++;                      // incrementa conteggio

    if(persone==1000000) digitalWrite(3,HIGH);     // segnala milionesimo cliente

    while(digitalRead(0));     // attene uscita persona

}

Esercizio 3

Un robot dispone di una paletta per le pulizie azionata da un pistone e dotata di un aspiratore.

Scrivere un programma per ARDUINO che esegue la seguente sequenza:

1. si attende che venga individuato da un sensore un eventuale rifiuto (pin1=1);

2. si aziona la paletta (pin0=1);

3. si aspetta che la paletta sia pronta (2 secondi);

4. si aziona l'aspiratore (pin2=1) per rimuovere il rifiuto;

5. si attende che il rifiuto non venga più rilevato (pin1=0);

6. si disattiva la paletta (pin0=0) e si spenge l'aspiratore (pin2=0);

7. si torna al punto 1.

setup()

{

    pinMode(0,INPUT);

    pinMode(1,OUTPUT);

    pinMode(2,OUTPUT);

}

loop()

{

    while(!digitalRead(0));   // attende rilevamento rifiuto

    digitalWrite(1,HIGH);    // paletta azionata

    delay(2000);         // aspetta 2 secondi

    digitalWrite(2,HIGH);  // aspiratore ON

    while(digitalRead(0));   // attende fine rilevamento rifiuto

    digitalWrite(1,LOW);  // paletta OFF

    digitalWrite(2,LOW);  // aspiratore OFF

}

Esercizio 4

Scrivere un programma per ARDUINO per realizzare un giochi di luci.

La sequenza delle operazioni è la seguente:

1. si attende che il pulsante (pin0) venga premuto e rilasciato;

2. si accendono 12 led (pin1-pin12) secondo la prima modalità: lampeggio alternato (6 led e 6 led) ogni secondo;

3. si attende che il pulsante (pin0) venga premuto e rilasciato;

4. si accendono 12 led secondo la prima modalità: lampeggio contemporaneo (12 led insieme) ogni 3 secondi;

5. se viene premuto il pulsante collegato al pin0 si torna all'inizio;

6. si torna al punto1.

setup()

{

    pinMode(0,INPUT);

    for(int i=1; i<=12; i++) pinMode(i,OUTPUT);  // pin da 1 a 12 programmati come uscite

}

loop()

{

    while(!digitalRead(0));   // attende pressione pulsante

    while(digitalRead(0));   // attende rilascio pulsante

    while(!digitalRead(0))   // ciclo attesa pressione pulsante

    {

        for(int i=1;i<=6;i++) digitalWrite(i,HIGH);    // accende led

        for(int i=7;i<=12;i++) digitalWrite(i,LOW);    // spegne led

        delay(500);         // attesa per visualizzare lampeggio    

        for(int i=1;i<=6;i++) digitalWrite(i,LOW);    // spegne led

        for(int i=7;i<=12;i++) digitalWrite(i,HIGH);    // accende led

        delay(500);         // attesa per visualizzare lampeggio

    }

    while(digitalRead(0));   // attende rilascio pulsante

    while(!digitalRead(0))   // ciclo attesa pressione pulsante

    {

        for(int i=1;i<=12;i++) digitalWrite(i,LOW);    // spegne led

        delay(500);         // attesa per visualizzare lampeggio    

        for(int i=1;i<=12;i++) digitalWrite(i,HIGH);    // spegne led

        delay(500);         // attesa per visualizzare lampeggio

    }

    while(digitalRead(0));   // attende rilascio pulsante

    while(!digitalRead(0));   // attende pressione pulsante

}

Esercizio 5

Scrivere un programma per ARDUINO per realizzare il controllo di un parcheggio aziendale.

La sequenza delle operazioni è la seguente:

1. si attende che il sistema di riconoscimento della targa dell'auto collocato all'ingresso segnali la presenza di un'auto aziendale (pin0=1);

2. si attiva l'apertura della sbarra (pin1=1);

3. si attende un tempo di 3 minuti esatti;

4. si chiude la sbarra e si torna all'inizio.

setup()

{

    pinMode(0,INPUT);

    pinMode(1,OUTPUT);

}

loop()

{

    while(!digitalRead(0));   // attende riconoscimento targa

    digitalWrite(1,HIGH);    // apertura sbarra

    delay(180000);         // aspetta 3 minuti = 3 x 60 s x 1000 ms

    digitalWrite(1,LOW);  // chiusura sbarra

}

COMPITI per la VACANZE di NATALE

Da portare giovedì 9 per il controllo (insieme a tutti gli appunti del primo trimestre).

ESERCIZIO 1 - L'insegna

Si vuole utilizzare un ARDUINO per realizzare il controlo di un insegna luminosa.

Il processo è il seguente:

● si attende il livello logico basso da un sensore di luce (pin0=0), in modo da attivare l'insegna quando è buio

● solo quando è buio si accendono in sequenza le seguenti uscite:

    - pin1 e pin2

    - dopo 0,8 secondi pin3 e pin4

    - dopo 0,8 secondi pin5 e pin6 e si spengono tutte le altre

    - dopo 0,4 secondi pin1 e pin2

    - dopo 0,4 secondi si spengono tutte

    - dopo 0,4 secondi si ritorna all'inizio

Disegnare il diagrama di flusso del programma

Scrivere il programma per ARDUINO

Disegnare e dimensionare lo schema elettronico (il sensore sarà disegnato come un interruttore con la resistenza e non come un deviatore).

ESERCIZIO 2 - Il contapezzi

Si vuole utilizzare ARDUINO per realizzare un dispositivo contapezzi.

Il processo è il seguente:

● una fotocellula segnala il passaggio di un pezzo sul nastro tras portatore, ARDUINO attende pin0=1, poi attende pin0=0, poi incrementa una variabile che rappresenta il numero di pezzi contati

● se si supera i 1000 pezzi ARDUINO fa lampeggiare un led rosso collegato a pin2 altrimenti fa lampeggiare un led verde collegato a pin1

● se si supera i 1000 pezzi il programma attende che la pressione del pulsante di reset (pin3=1), azzera il conteggio e torna all'inizio del programma altrimenti si torna all'inizio del programma

Disegnare il diagramma di flusso del programma

Scrivere il programma per ARDUINO

Disegnare e dimensionare lo schema elettronico (la fotocellula sarà disegnata come un interruttore con la resistenza e non come un deviatore).

ESERCIZIO 3 - Il sumorobot

Si vuole utilizzare ARDUINO per realizzare il controlo di un robot da minisumo.

Il processo è il seguente:

● ARDUINO attende che venga premuto il pulsante di partenza (pin0=1)

● attende 5 secondi

● accende i due motori per andare avanti (pin1=1, pin2=0, pin3=1, pin4=0)

● legge i due sensori di prossimità pin5 e pin6 e opera con la seguente modalità:

    - se pin5=1 (siamo sul bordo bianco) si torna indietro (pin1=0, pin2=1, pin3=0, pin4=1) per 2 secondi e si gira verso destra il robot per altri 2 secondi (pin1=1, pin2=0, pin3=0, pin4=1)

    - se pin6=1 (siamo sul bordo bianco) si torna indietro (pin1=0, pin2=1, pin2=0, pin3=1) per 2 secondi e si gira il verso sinistra il robot per altri 2 secondi (pin1=0, pin2=1, pin2=1, pin3=0)

Disegnare il diagramma di flusso del programma

Scrivere il programma per ARDUINO

Disegnare e dimensionare lo schema elettronico (i sensori di prossimità saranno disegnati come interruttori con la loro resistenza e non come deviatori).

Uso dell'ingresso analogico su Arduino

Macchina per fare il pane

Impianto di illuminazione

Serbatoio dell'acqua

Correzione prova di verifica

FILA A

Scrivere un programma per ARDUINO per gestire l'irrigazione di un orto. L'acqua del pozzo non è sufficiente ad innaffiare tutto l'orto contemporaneamente. L'orto è diviso in 4 zone. L'irrigazione di ogni zona è controllata da una elettrovalvola. Le 4 elettrovalvole fanno passare l'acqua se i pin 0,1,2,3 vanno al livello logico alto.

Per far arrivare l'acqua occorre accendere la pompa che è collegata al pin 5.

L'irrigazione deve durare 10 minuti per ogni zona e deve essere fatta due volte al giorno, alle 7 e alle 20.

Quando viene acceso ARDUINO, attende lo Start tramite il pin 6 da parte di un operatore alle ore 7 e poi non ha più bisogno di altri segnali.

ARDUINO accende durante l'irrigazione il led rosso collegato al pin 7 e durante l'attesa tra un'irrigazione e l'altra accende il led verde collegato al pin 8.

SOLUZIONE

void setup()

{

    pinMode(0,OUTPUT);  // ev 1

    pinMode(1,OUTPUT);    // ev 2

    pinMode(2,OUTPUT);  // ev 3

    pinMode(3,OUTPUT);  // ev 4

    pinMode(5,OUTPUT);  // pompa

    pinMode(6,INPUT);     // start

    pinMode(7,OUTPUT);  // led rosso

    pinMode(8,OUTPUT);  // led verde

}

void loop()

{

    while(!digitalRead(6));

    while(1)

    {

        accendi();

        delay(44400000);

        accendi();

        delay(37200000);

    }

}

accendi()

{

    digitalWrite(8,LOW);

    digitalWrite(0,HIGH);

    digitalWrite(5,HIGH);

    digitalWrite(7,HIGH);

    delay(600000);          // x 4x10 min

    digitalWrite(0,LOW);

    digitalWrite(1,HIGH);

    delay(600000);

    digitalWrite(1,LOW);

    digitalWrite(2,HIGH);

    delay(600000);

    digitalWrite(2,LOW);

    digitalWrite(3,HIGH);

    delay(600000);

    digitalWrite(3,LOW);

    digitalWrite(5,LOW);

    digitalWrite(7,LOW);

    digitalWrite(8,HIGH);

}

FILA B

Scrivere un programma per ARDUINO per gestire il riscaldamento di una palestra. Il sistema di riscaldamento non è in grado di scaldare tutta la palestra contemporaneamente. La palestra è divisa in 4 zone. Il riscaldamento di ogni zona è controllato da una elettrovalvola. Le 4 elettrovalvole fanno passare l'acqua calda nei vari settori se i pin 0,1,2,3 vanno al livello logico alto.

Per produrre l'acqua calda occorre accendere la caldaia che è collegata al pin 5.

Il riscaldamento deve durare 30 minuti per ogni zona e deve essere fatto due volte al giorno, alle 9 e alle 17.

Quando viene acceso ARDUINO, attende lo Start tramite il pin 6 da parte di un operatore alle ore 9 e poi non ha più bisogno di altri segnali.

ARDUINO accende durante il riscaldamento il led rosso collegato al pin 7 e durante l'assenza del riscaldamento accende il led verde collegato al pin 8.

SOLUZIONE

void setup()

{

    pinMode(0,OUTPUT);  // ev 1

    pinMode(1,OUTPUT);    // ev 2

    pinMode(2,OUTPUT);  // ev 3

    pinMode(3,OUTPUT);  // ev 4

    pinMode(5,OUTPUT);  // caldaia

    pinMode(6,INPUT);     // start

    pinMode(7,OUTPUT);  // led rosso

    pinMode(8,OUTPUT);  // led verde

}

void loop()

{

    while(!digitalRead(6));

    while(1)

    {

        accendi();

        delay(32400000);

        accendi();

        delay(50400000);

    }

}

accendi()

{

    digitalWrite(8,LOW);

    digitalWrite(0,HIGH);

    digitalWrite(5,HIGH);

    digitalWrite(7,HIGH);

    delay(1800000);     // 30 min = 60 x 1000 ms x 30

    digitalWrite(0,LOW);

    digitalWrite(1,HIGH);

    delay(1800000);

    digitalWrite(1,LOW);

    digitalWrite(2,HIGH);

    delay(1800000);

    digitalWrite(2,LOW);

    digitalWrite(3,HIGH);

    delay(1800000);

    digitalWrite(3,LOW);

    digitalWrite(5,LOW);

    digitalWrite(7,LOW);

    digitalWrite(8,HIGH);

}

NTX

CONTROLLO ON/OFF per LINE-FOLLOWER

CONTROLO MORBIDO per LINE-FOLLOWER

task main()

{

    int LetturaNero;

    LetturaNero=SENSOR_1;

    while(1)

    {

        OnFwd(OUT_B, SENSOR_1)

        OnFwd(OUT_A, 48-SENSOR_1)

    }

}