Electronics LAB [with Arduino] | DAY 2

  • Published on
    30-Aug-2014

  • View
    567

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Transcript

  • ELECTRONICS LAB [WITH ARDUINO] Daniele Costarella Teatro Carlo Gesualdo / Casina Del Principe Avellino 28 > 31 agosto 2013 Salvatore Carotenuto >>> 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/.
  • 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
  • La tecnica PWM 28 > 31 agosto 2013 Electronics LAB [with Arduino] 4 Rimontiamo il seguente circuito:
  • 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 }
  • La tecnica PWM 28 > 31 agosto 2013 Electronics LAB [with Arduino] 6 Il duty cycle Periodo TON TOFF Tempo Ampiezza
  • La tecnica PWM 28 > 31 agosto 2013 Electronics LAB [with Arduino] 7 Il duty cycle Duty Cycle 50% Duty Cycle 75% Duty Cycle 25%
  • 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
  • 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)
  • 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)
  • La tecnica PWM 28 > 31 agosto 2013 Electronics LAB [with Arduino] 11 Il nuovo circuito: utilizziamo i pin PWM dedicati
  • 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% }
  • 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%;
  • La tecnica PWM 28 > 31 agosto 2013 Electronics LAB [with Arduino] 14 Solo per i LED?
  • La tecnica PWM 28 > 31 agosto 2013 Electronics LAB [with Arduino] 15 Esempio: controlliamo un motore
  • 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).
  • 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.
  • 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 }
  • 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 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 // } Esempio: esegue un blocco di codice per 100 volte
  • Giochi di luce 28 > 31 agosto 2013 Electronics LAB [with Arduino] 21 LED fading #define LED 9 // LED collegato al pin 9 int 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); } }
  • Giochi di luce 28 > 31 agosto 2013 Electronics LAB [with Arduino] 22 LED fading #define LED 9 // LED collegato al pin 9 int 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); } }
  • Giochi di luce 28 > 31 agosto 2013 Electronics LAB [with Arduino] 23 LED RGB
  • Giochi di luce 28 > 31 agosto 2013 Electronics LAB [with Arduino] 24 LED RGB: montiamo il circuito
  • 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); }
  • 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); }
  • 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)
  • Giochi di luce 28 > 31 agosto 2013 Electronics LAB [with Arduino] 28 LED chaser
  • 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); }
  • 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); }
  • 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!
  • Giochi di luce 28 > 31 agosto 2013 Electronics LAB [with Arduino] 32 Pilotare pi LED: meglio usare uno Shift Register
  • 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
  • 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); }
  • 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); }
  • FINE... PER OGGI