Halloween Pumpkin

Buon Halloween Pumpkin !!!

L’halloween pumpkin è il progetto che ho realizzato per questo 2018 in occasione della festività di origine celtica coincidente con il 31 ottobre .. oggi.

Il progetto Halloween Pumpkin 3D lo hai letto già lunedì in cui ho descritto la parte di stampa 3D e di progettazione in openSCAD.

Trovi i file del progetto condiviso su thingiverse come richiesto dalla licenza sotto cui è stato rilasciato il progetto originale da cui sono partito. La licenza CC-Attribution-Non Commercial-Share Alike con cui pubblico anche tutti i miei articoli.

La realizzazione del circuito halloween pumpkin

Nel precedente articolo hai letto come realizzare la zucca in 3D in arancione e collocarvi all’interno il sensore PIR:

Halloween Pumpkin

in modo che al passaggio di una persona in corrispondenza della zucca essa cominci a lampeggiare ed emettere suoni sinistri dal modulo JQ6500.

Ecco lo schema elettrico del progetto:

Halloween pumpkin schema

Tra i componenti hai individuato i neopixel, rappresentati come strip ma nella realtà, come sai, si tratta di un ring 16 neopixel ( anello di led a 16 elementi neopixel ) e il micro controllore AtTiny85.

L’anello di neopixel è connesso al pin 4 del micro attraverso una resistenza da 330ohm.

Il modulo JQ6500 è collegato al pin 0 dell’Attiny e puoi collegarlo ad uno dei 5 pin di segnale del modulo in funzione di quale brano vuoi sia riprodotto.

Il sensore mini PIR è collegato al pin 2 del micro controllore che utilizzi come INPUT per ricevere il segnale di avvio della sequenza luminosa e sonora.

Nello schema manca il DC-DC converter in quanto puoi utilizzare 4 pile tipo AA ricaricabili ed evitarlo, io ho utilizzato delle AA alcaline da 1,5v ciascuna che nella somma restituiscono 6v.

Elenco dei materiali

I materiali e componenti che ti occorrono per la realizzazione del progetto sono indicati nella BOM pubblicata nel precedente articolo, di seguito l’insieme delle parti che compongono la halloween pumpkin:

Halloween Pumpkin components

include le 3 viti M3x45 brunite necessarie ad assemblare il supporto per lo speaker al porta pile ed alla base della zucca.

Montaggio e connessioni

Il montaggio e le connessioni dell’halloween pumpkin sono abbastanza semplici, io ho utilizzato una basetta millefori su sui ho saldato il micro controllore, la resistenza ed un condensatore da 47uF:

Halloween Pumpkin 3D attiny85 neopixel

Sulla base nera monti il supporto per il JQ6500 e lo speaker:

Halloween Pumpkin audio support

e colleghi al JQ6500 prima il pin di controllo da 1 a 5 in funziona del brano che desideri pubblicare:

HalloweenPumpkin audio pin

poi collega lo speaker e l’alimentazione del modulo dalla parte opposta:

HalloweenPumpkin audio connection

come visibile in figura.

Il brano caricato nella Halloween Pumpkin

Il brano audio che puoi utilizzare per ottenere il medesimo effetto del video è il seguente

halloween_pumpkin.mp3

che dovrai caricare nel JQ6500 usando quanto descritto negli articoli dedicati a questo mp3 player

Lo sketch

ed ecco lo sketch del progetto:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define pinPIR 2
#define pinLED 4
#define pinSPK 0

#define NUMPIXELS      16

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, pinLED, NEO_GRB + NEO_KHZ800);

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code

  pinMode( pinPIR,INPUT );
  pinMode( pinSPK,OUTPUT );
  
  pixels.begin(); // This initializes the NeoPixel library.
  pixels.setBrightness(127);
  // circle start
  for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); delay(50); }
  // circle stop
  for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0)); pixels.show(); delay(50); }
  
  digitalWrite(pinSPK,1);
  delay(15000);
}

void loop() {
  if ( digitalRead(pinPIR) == 1) {
      digitalWrite(pinSPK,0);
      delay(200);
      digitalWrite(pinSPK,1);

      //Halloween Light
      for(byte j=0; j<4; j++){
        pixels.setBrightness(127); 
        for(byte j=0; j<255; j++){ for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i,j,j,j); } pixels.show(); delay(4); }
        
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(255,255,255)); pixels.show(); } delay(150);
        for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0));       pixels.show(); } delay(150);
        
        for(byte j=255; j>0; j--){ for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i,j,j,j); } pixels.show(); delay(3); }
      }

      delay( 2000 );
  } else {
    for(byte i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0)); pixels.show(); }  
  }
}

che come leggi è una sequenza di accensioni e spegnimenti programmati e calibrati.

Le linee 01-04: includi la libreria Adafruit_NeoPixel e la avr/power.h essendo l’attiny85 un micro controllore in architettura AVR;

linee 06-08: definisci i 3 pin a cui sono connessi rispettivamente il sensore PIR, i Led ed il modulo JQ6500;

linea 10: imposti il numero di neopixel da gestire;

linea 12: inizializzi l’istanza pixels della libreria neopixel che userai per comunicare con il neopixel ring;

linee 16-18: imposti il clock prescale per i neopixel;

linee 21-22: imposta la modalità corretta per ciascun pin rimasto, i led sono impostati alla linea 12;

linea 24: inizializzi la comunicazione con i neopixel;

linea 25: imposti la luminosità dei led a 127;

linea 27: il ciclo for parte da 0 fino al numero massimo di led impostati e per ciascuno imposta la massima luminosità ( 255 ) con un delay di 50 millisecondi tra l’accensione di un led e quello successivo;

linea 29: il ciclo for è identico alla linea 27 ma spegne tutti i led con la stessa modalità con cui sono stati accesi;

linea 31: imposta HIGH ( 1 ) il pin a cui è collegato il JQ6500;

linea 32: attende 15 secondi prima di passare al loop(), tale sistema fa in modo che la prima attivazione della sequenza audio possa terminare essendo di lunghezza 10 secondi circa;

La funzione Loop() dello sketch

la funzione loop(9 dello sketch halloween pumpkin inizia alla linea 36 con il check sul pin del sensore PIR per verificare che esso sia a livello logico alto, ossia abbia rilevato il passaggio di una persona;

le linee 37-39: porta l’uscita connessa al pin del JQ6500 prima bassa ( 0 ) e poi alta ( 1 ) dopo 200 millisecondi per simulare la pressione del contatto che attiva il brano corrispondente;

linea 42: imposta un ciclo da 0 a 3 ( <4 ) della sequenza indicata nelle parentesi graffe;

linea 43: imposta la luminosità dei led a 127;

linea 44: imposta due cicli for annidati in cui il primo ciclo, più esterno, parte da 0 ed arriva a 255; il secondo ciclo parte da 0 al numero massimo dei led al fine di ottenere l’accensione in dissolvenza dei 16 led contemporaneamente con una delay di 4 secondi ( 4 * 255 = 1020 millisecondi = 1,02 secondi circa );

linee 46-59: sono tutte identiche in gruppi di due in cui nella prima linea crei un ciclo da 0 al numero massimo di neopixel in cui per ciascun led imposti la massima luminosità ( 255 ) ed attendi 150 millisecondi prima di passare alla linea successiva. La seconda linea fa la medesima cosa e imposta a 0 il valore di tutti i led, spegnendoli per altrettanti 150 millisecondi;

linea 61: crea la dissolvenza da 255 a 0 in modo del tutto analogo a come eseguito per la linea 44, ma in modo inverso;

linea 64: attendi 2 secondi, dopo la sequenza luminosa prima di riprodurre nuovamente l’effetto;

linea 66: in caso di else, ossia di sensore che non rileva presenza umana puoi spegne tutti i led.

Ecco il risultato del Halloween Pumpkin 3D in funzione:

Buon Halloween 2018 !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/halloween-pumpkin.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.