36
ELECTRONICS LAB [WITH ARDUINO] Daniele Costarella Teatro Carlo Gesualdo / Casina Del Principe – Avellino – 28 > 31 agosto 2013 Salvatore Carotenuto >>> DAY #2

Electronics LAB [with Arduino] | DAY 2

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Electronics LAB [with Arduino] | DAY 2

ELECTRONICS LAB [WITH ARDUINO]

Daniele Costarella

Teatro Carlo Gesualdo / Casina Del Principe – Avellino – 28 > 31 agosto 2013

Salvatore Carotenuto

>>> DAY #2

Page 2: Electronics LAB [with Arduino] | DAY 2

Rights to copy

Electronics LAB [with Arduino]28 > 31 agosto 2013 2

Attribution – ShareAlike 3.0 Unported

You are free:● to Share - to copy, distribute and transmit the work● to Remix – to adapt the work

Under the following conditions:

Attribution – You must attribute the work in the manner specified by the authors.

Share Alike – If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.

Your fair use and other rights are in no way affected by the above.To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/.

Page 3: Electronics LAB [with Arduino] | DAY 2

Il programma di oggi

La tecnica PWM:● controllo di LED;● controllo di piccoli carichi;

Effetti luminosi:● LED fading;● i LED RGB;● sequence generators;

3Electronics LAB [with Arduino]28 > 31 agosto 2013

Page 4: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 4

Rimontiamo il seguente circuito:

Page 5: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 5

Cosa succede se facciamo lampeggiare molto velocemente il LED?

// Modulazione di larghezza di impulso (PWM) #define LED 13 // LED sul pin 13 void setup() { pinMode(LED, OUTPUT); // imposta il pin come output } void loop() { digitalWrite(LED, HIGH); // accende il LED delay(10); // aspetta 10 millisecondi digitalWrite(LED, LOW); // spegne il LED delay(10); // aspetta 10 millisecondi }

Page 6: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 6

Il duty cycle

Periodo

TON

TOFF

Tempo

Am

piez

za

Page 7: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 7

Il duty cycle

Duty Cycle 50%

Duty Cycle 75%

Duty Cycle 25%

Page 8: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 8

Facciamo alcuni esperimenti

1. 10ms acceso e 10ms spento

2. 5 ms acceso e 15ms spento

3. 75 ms acceso e 5ms spento

Page 9: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 9

I pin PWM dedicati

il PWM è una tecnica per ottenere risultati analogici con mezzi digitali

Funzione Spiegazione

analogWrite(pin, valore)

Scrive un valore analogico (una forma d'onda PWM) sul pin passato come parametro.Parametri: pin: il pin da usare valore: compreso tra 0 (sempre spento) e 255 (sempre acceso)

Page 10: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 10

Il duty cycle

Duty Cycle 50% - analogWrite(pin, 128)

Duty Cycle 75% - analogWrite(pin, 192)

Duty Cycle 25% - analogWrite(pin, 64)

Page 11: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 11

Il nuovo circuito: utilizziamo i pin PWM dedicati

Page 12: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 12

Cosa succede se facciamo lampeggiare molto velocemente il LED?

// Modulazione di larghezza di impulso (PWM) #define LED 9 // LED sul pin 9 (PWM) void setup() { pinMode(LED, OUTPUT); // imposta il pin come output } void loop() { analogWrite(LED, 128); // duty cycle al 50% }

Page 13: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 13

Facciamo alcuni esperimenti, ora però con i pin dedicati

1. LED acceso allo 0%;

2. LED acceso al 25%;

3. LED acceso al 50%;

4. LED acceso al 75%;

5. LED acceso al 100%;

Page 14: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 14

Solo per i LED?

Page 15: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 15

Esempio: controlliamo un motore

Page 16: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 16

Transistor

● Il motore DC utilizza più potenza di quella che Arduino è in grado di erogare.

● Se connettiamo il motore direttamente ai pin di Arduino, rischiamo di danneggiare la scheda.

● Utilizziamo, allora, un piccolo transistor (Es. PN2222) come switch che, utilizzando una piccola corrente da Arduino è in grado di pilotare correnti più elevate (motore).

Page 17: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 17

Transistor

● Il transistor ha tre terminali. La maggior parte della corrente fluisce dal Collettore all'Emettitore. Ciò avviene se “accendiamo” il transistor, ossia se facciamo fluire una corrente nella Base.

● Il resistore connesso a D3 limita la corrente di Base. Se connettiamo il motore direttamente ai pin di Arduino, rischiamo di danneggiare la scheda.

● Il diodo è inserito per la protezione del circuito.

Page 18: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 18

Esempio 1: rampa

// Modulazione di larghezza di impulso (PWM) #define MOTOR 3 // controllo motore sul pin 3 void setup() { pinMode(MOTOR, OUTPUT); // imposta il pin come output } void loop() { analogWrite(MOTOR, 64); // motore al 25% delay(1000); // aspetta 1 secondo analogWrite(MOTOR, 128); // motore al 50% delay(1000); // aspetta 1 secondo analogWrite(MOTOR, 192); // motore al 75% delay(1000); // aspetta 1 secondo analogWrite(MOTOR, 255); // motore al 100% delay(1000); // aspetta 1 secondo }

Page 19: Electronics LAB [with Arduino] | DAY 2

La tecnica PWM

28 > 31 agosto 2013 Electronics LAB [with Arduino] 19

Esempio 2: variamo la velocità manualmente

// Esempio 2: DC Motor int motorPin = 3; void setup() { pinMode(motorPin, OUTPUT); Serial.begin(9600); while (! Serial); Serial.println("Velocità [da 0 a 255]: ");} void loop() { if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed <= 255) { analogWrite(motorPin, speed); } }}

Page 20: Electronics LAB [with Arduino] | DAY 2

Elementi di programmazione

28 > 31 agosto 2013 Electronics LAB [with Arduino] 20

Il ciclo for

Simbolo Spiegazione

for (valore_iniziale, test, incremento) { // … < codice da ripetere > // … }

Esegue un blocco di codice per un certo numero di volte, ossia finchè la condizione test è vera.

for (i = 0; i<100; i++) { // … < codice da ripetere > // … }

Esempio: esegue un blocco di codice per 100 volte

Page 21: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 21

LED fading

#define LED 9 // LED collegato al pin 9int fadeValue = 0; // valore del fade

void setup() { pinMode(LED, OUTPUT); // imposta il pin come output }

void loop() { // esegue un ciclo da 0 a 254 (fade in) for (fadeValue = 0 ; fadeValue < 255; fadeValue++) { //impostiamo la luminosità del LED analogWrite(LED, fadeValue); delay(10); } // // esegue un ciclo da 255 a 1 (fade out) for(fadeValue = 255 ; fadeValue > 0; fadeValue--) { //impostiamo la luminosità del LED analogWrite(LED, fadeValue); delay(10); } }

Page 22: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 22

LED fading

#define LED 9 // LED collegato al pin 9int fadeValue = 0; // valore del fade

void setup() { pinMode(LED, OUTPUT); // imposta il pin come output }

void loop() { // esegue un ciclo da 0 a 254 (fade in) for (fadeValue = 0 ; fadeValue < 255; fadeValue++) { //impostiamo la luminosità del LED analogWrite(LED, fadeValue); delay(10); } // // esegue un ciclo da 255 a 1 (fade out) for(fadeValue = 255 ; fadeValue > 0; fadeValue--) { //impostiamo la luminosità del LED analogWrite(LED, fadeValue); delay(10); } }

Page 23: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 23

LED RGB

Page 24: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 24

LED RGB: montiamo il circuito

Page 25: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 25

LED RGB: lo sketch

//Flussi 2013 DAY 2: RGB LED

int redPin = 11;int greenPin = 10;int bluePin = 9; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); }

void loop() { setColor(255, 0, 0); // red delay(1000); setColor(0, 255, 0); // green delay(1000); setColor(0, 0, 255); // blue delay(1000); setColor(255, 255, 0); // yellow delay(1000); setColor(80, 0, 80); // purple delay(1000); setColor(0, 255, 255); // aqua delay(1000); }

Page 26: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 26

LED RGB: lo sketch

// continua

void setColor(int red, int green, int blue){ analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); }

Page 27: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 27

LED RGB: cose da fare

● Variare il ritardo

● Altri effetti di luce (YouTube, Google)

Page 28: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 28

LED chaser

Page 29: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 29

LED chaser: lo sketch

int LED1 = 12;int LED2 = 11;int LED3 = 10;int LED4 = 9;int LED5 = 8;

void setup(){ pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT);}

Page 30: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 30

LED chaser: lo sketch

void loop(){ digitalWrite(LED1,HIGH); delay(100); digitalWrite(LED1,LOW); delay(25); digitalWrite(LED2,HIGH); delay(100); digitalWrite(LED2,LOW); delay(25); digitalWrite(LED3,HIGH); delay(100); digitalWrite(LED3,LOW); delay(25); digitalWrite(LED4,HIGH); delay(100); digitalWrite(LED4,LOW); delay(25); digitalWrite(LED5, HIGH); delay(100); digitalWrite(LED5, LOW); delay(25);}

Page 31: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 31

LED chaser: cose da fare

● Variare il ritardo

● Pilotare più LED

● Largo alla fantasia!

Page 32: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 32

Pilotare più LED: meglio usare uno Shift Register

Page 33: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 33

Pilotare più LED: lo Shift Register 74HC595

● Si può pensare allo Shift Register come un oggetto in grado di conservare 8 bit in memoria

● Per scrivere tali valori utilizziamo i pin Data e Clock del chip

Page 34: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 34

Pilotare più LED: meglio usare uno Shift Register

/*Flussi 2013 DAY 2: 8 LED e uno Shift Register*/ int latchPin = 5;int clockPin = 6;int dataPin = 4; byte leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT);}

Page 35: Electronics LAB [with Arduino] | DAY 2

Giochi di luce

28 > 31 agosto 2013 Electronics LAB [with Arduino] 35

Pilotare più LED: meglio usare uno Shift Register

void loop() { leds = 0; updateShiftRegister(); delay(500); for (int i = 0; i < 8; i++) { bitSet(leds, i); updateShiftRegister(); delay(500); }} void updateShiftRegister(){ digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH);}

Page 36: Electronics LAB [with Arduino] | DAY 2

FINE... PER OGGI