effetto fuoco + dissolvenza tutto in uno?!?!

Buongiorno a tutti, dopo qualche anno ho ripreso in mano un mio vecchio pallino mai potuto sviluppare. Sono nuovissimo anche se la mia richiesta e la vostra risposta risalgono a qualche anno fa. Ora però mi ci sono messo e sta funzionando tutto, grazie mille. Dal punto di vista elettrico/elettronico sono riuscito ad accendere quello che mi interessa, ed il progetto parte da questo che mi aveva mandato un vecchio iscritto

per vedere se funzionava o "simulato moltissimo non trovando gli integrati in Tinkercard" tipo questo

ma come dicevo ora questo funziona. Sto provando ora a progettare la programmazione, sto studiando l'IDE ma mi sto incasinando. Cosa voglio fare?

  • un paio di effetti fuoco presi da un bellissimo progetto libero in rete che ho caricato
  • qualche lampadina con effetto dissolvenza

questo più o meno per il test

cosa devo ottenere? Le lampadine che fanno giorno/notte mentre, per esempio, il fuoco è sempre acceso.
Ma c'è la possibilità di avere "due linee di programmazione"? Trovo difficoltà a gestire i loop del fuoco insieme alle dissolvenze della luce. Faccio un disastro con i delay??? E' possibile fare uan cosa del genere con un solo Arduino?
ma soprattutto.. .sono riuscito a spiegarmi?

ciao
Emanuele :wink:

edi1973:
Ma c'è la possibilità di avere "due linee di programmazione"? Trovo difficoltà a gestire i loop del fuoco insieme alle dissolvenze della luce. Faccio un disastro con i delay??? E' possibile fare uan cosa del genere con un solo Arduino?

Non so se ho capito bene, ma comunque sia la risposta alla prima e alla terza domanda è "si" :smiley: , per la seconda è invece chiaro che NON devi usare i delay ma la funzione millis().

Ora, se tu stai cercando di "unire" più programmini trovato in rete, la cosa diventa un poco più cdifficile se non hai una certa pratica di programmazione, per cui il mio suggerimento è quello di iniziare da un prototipo "semplice" (come il tuo schema "fuocodissolvenza") dove un LED rappresenta le lampadine per giorno e notte, e gli altri led sono per simulare l'effetto fuoco (per questo vedi qualche spunto QUI, era un mio progettino per il presepe... :wink: ). A quel punto se la cosa ti soddisfa, puoi passare alle lampadine e relativo driver 12V. Se invece hai qualche problema o difficiltà posta qui il tuo codice e vediamo di darti una mano.

Docdoc, interessante il fuo effetto fuoco, è possibile sostituire la parte del delay con i millis per non bloccare il resto del codice?
Come devo fare?
Grazie

docdoc:
Non so se ho capito bene, ma comunque sia la risposta alla prima e alla terza domanda è "si" :smiley: , per la seconda è invece chiaro che NON devi usare i delay ma la funzione millis().

mi sembrava impossibile infatti :smiley:

docdoc:
Ora, se tu stai cercando di "unire" più programmini trovato in rete, la cosa diventa un poco più cdifficile se non hai una certa pratica di programmazione, per cui il mio suggerimento è quello di iniziare da un prototipo "semplice" (come il tuo schema "fuocodissolvenza") dove un LED rappresenta le lampadine per giorno e notte, e gli altri led sono per simulare l'effetto fuoco

no no scusa. Forse ho scritto troppo di fretta. Non sono a secco di programmazione, sono un ex programmatore, ora molto più SQL, ma non a secco di C per esempio. Comunque il tuo suggerimento è ottimo tant'è vero che è quello che pensavo anche io. Comunque ho fatto qualche modifica, ho preso qualcosa in rete solo per capire come fanno gli altri ed abbassare i tempi di apprendimento. Ora va meglio, mooooolto meglio grazie alla tua semplice ma per me vitale dritta del Millis
[/quote]

docdoc:
(per questo vedi qualche spunto QUI, era un mio progettino per il presepe... :wink: ). A quel punto se la cosa ti soddisfa, puoi passare alle lampadine e relativo driver 12V. Se invece hai qualche problema o difficiltà posta qui il tuo codice e vediamo di darti una mano.

questa versione sembra andare benino

// Example Fading LED with analogWrite and millis()
// See baldengineer.com/fading-led-analogwrite-millis-example.html for more information
// Created by James Lewis
 
const byte lamp1 = 5;
const byte lamp2 = 3;

int Giallo_1 = 11;   
int Rosso = 10;
int Giallo_2 = 9;
 
// define directions for LED fade
#define UP 0
#define DOWN 1
 
// constants for min and max PWM
const int minPWM = 0;
const int maxPWM = 255;
 
// State Variable for Fade Direction
byte fadeDirection = UP;
 
// Global Fade Value
// but be bigger than byte and signed, for rollover
int fadeValue = 0;
 
// How smooth to fade?
byte fadeIncrement = 5;
 
// millis() timing Variable, just for fading
unsigned long previousFadeMillis;
unsigned long prevFireMillis;
 
 
void setup() {
  // put pwmLED into known state (off)
  analogWrite(lamp1, fadeValue); 
  
}
 
void doTheFade(unsigned long thisMillis,int lamp,int fade_lamp) {
  // is it time to update yet?
  // if not, nothing happens
  if (thisMillis - previousFadeMillis >= fade_lamp) {
    // yup, it's time!
    if (fadeDirection == UP) {
      fadeValue = fadeValue + fadeIncrement;  
      if (fadeValue >= maxPWM) {
        // At max, limit and change direction
        fadeValue = maxPWM;
        fadeDirection = DOWN;
      }
    } else {
      //if we aren't going up, we're going down
      fadeValue = fadeValue - fadeIncrement;
      if (fadeValue <= minPWM) {
        // At min, limit and change direction
        fadeValue = minPWM;
        fadeDirection = UP;
      }
    }
    // Only need to update when it changes
    analogWrite(lamp, fadeValue);  
 
    // reset millis for the next iteration (fade timer only)
    previousFadeMillis = thisMillis;
  }
}
 
void fire() {

    analogWrite(Giallo_1, random(120)+135);   
	analogWrite(Rosso, random(120)+135);      
	analogWrite(Giallo_2, random(120)+135);
    delay(random(100));

}

void loop() {
  // get the current time, for this time around loop
  // all millis() timer checks will use this time stamp
  unsigned long currentMillis = millis();
    
  doTheFade(currentMillis,lamp1,50);
  doTheFade(currentMillis,lamp2,10);
  fire();
}

però ho provato a mettere il Millis() nel fuoco e, come ha detto manolomao diventa un casino. Visto la tua disponibilità, che ne dici? Può andare e lascio? A quel punto posso inserire le lampadine. Ieri ho provato, oltre che teoricamente come provo per praticità su tinkercard, direttamente con i pezzi e devo dire che solo fuoco o solo dissolvenze con le lampadine venivano proprio carine. Stasera provo questa.
Comunque sia a parte tutto quello che ho scritto, di base il riassunto è

GRAZIE tantissimo per tutto,
ciao
Emanuele

Più o meno si, non l'ho provato ma penso possa andare, ma per togliere il delay prova questa versione della funzione fire() (tra l'altro questo algoritmo lo feci per rendere più realistico possibile il fuoco, con più giallo che rosso, ti consiglio di provare questo, cambiando eventualmente i valori del random):

...
unsigned long fireTime = 0;
void fire()
{
  if ( millis() - fireTime >= 0 )
  {
    if ( int(random(0, 5) > 0) )
      analogWrite(Rosso, int(random(0,120)));
    else
      analogWrite(Rosso, 0);
    analogWrite(Giallo_1, int(random(50,255)));
    analogWrite(Giallo_2, int(random(50,255)));
    fireTime = millis() + int(random(40,120));
  }
}

Fine settimana di studio e di pratica. Ho ripreso dopo molto tempo il saldatore in mano ed ho cominciato a mettere tutto su piastra. (Le foto non te le faccio vedere altrimenti mi critichi le saldature :slight_smile: solo che dopo 20 anni non potevo fare di meglio, a quest'età servirebbero anche gli occhiali :o)
Dopo aver preparato integrato e morsetti, mi sono fermato un attimo per un dubbio, più per essere preciso che per il funzionamento che dovrebbe comunque andare. Da "manuale" come vanno collegati i LED?
PIN Arduino --> resistenza --> LED --> GND?
oppure
PIN Arduino --> resistenza --> LED --> 5V?
anche perchè, nel primo caso, a che voltaggio esce? Ho cercato di leggere tanto ma no ho trovato e purtroppo avevo tolto di mezzo il progetto ed il tester e fino a stasera non lo riprendo sotto mano.
Tra l'altro ho solo resistenza da 470 Ohm, pensavo, meglio 3, ma se ne metto un paio in parallello miglioro in lucentezza giusto?
ciao
Emanuele

Puoi usare entrambe le modalità di connessione, la prima accende il leg con il pin settato a HIGH, mentre la econda lo accende se il pin è settato a LOW.
In entrambe i casi la tensione è +5V (supponendo che stai usando una scheda Arduino tipo UNO o similare che lavora a 5V).
Il calcolo della resistenza va effettuato considerando i led che colleghi, ogni colore ha una caduta di tensione differente (Es. rosso mediamente 1,8V, giallo 1,9V, Blu 3V) e che solitamente i led si pilotano fornendo fino a 20mA.
Se ipotizziamo un rosso (5-1,8)/0,02=viene fuori una resistenza minima di 160ohm. Se hai solo le 470, mettendole in parallelo ottieni 235 ohm otterrai una corrente di circa 14mA, quindi più luminosità e dovrebbe rientrare nei parametri operativi del led ipotizzato.

fabpolli:
In entrambe i casi la tensione è +5V (supponendo che stai usando una scheda Arduino tipo UNO o similare che lavora a 5V).

ho Arduino Due, per quello ero in dubbio. Nel primo caso escono 5 Volt o 3.3 Volt?

fabpolli:
Se ipotizziamo un rosso (5-1,8)/0,02=viene fuori una resistenza minima di 160ohm. Se hai solo le 470, mettendole in parallelo ottieni 235 ohm otterrai una corrente di circa 14mA, quindi più luminosità e dovrebbe rientrare nei parametri operativi del led ipotizzato.

per il calcolo si, me lo ricordo dai tempi della scuola, ma nono ho capito. 14mA, più luminosità con due da 470 invece che una giusto? o invece dei 20mA con 160 Ohm?

grazie
Emanuele

Se hai Arduino due non puoi proprio collegarci direttamente il led, le porte di Arduino due lavorano a 3.3V ma NON sono in grado di erogare abbastanza corrente, solo alcuni pin possono raggiungere il valoe massimo di 15mA ma solo alcuni e essendo un valore limite è sempre bene starne allalarga (un 20% in meno si consiglia di solito).
Lavorando i pin a 3.3V la tensione in uscita di tali pin è appunto 3.3V. Nel tuo caso dovrai per forza pilotare i led tramite un transistor

Per la seconda domanda, più corrente == led più luminoso, corrente che attraversa il led più vicina possibile al suo limite massimo == vita breve del led più la resistenza non è precisa più corri il rischio di far passare più corrente del dovuto.
Quindi si, parallelo da 470 più lumiosità che non con una sola.
E, non è il tuo caso, ma è sempre bene ricordare visto che su internet si trova tanti articoli spazzatura, nessuna resistenza impilca cheil led si trasforma in una supernova luminosissima per una razione di secondo e poi se ne va allegramente nel paradiso dei semiconduttori :slight_smile:

NOOOOOOO :'(
Tutto è nato da un acquisto di qualche anno fa ad una fiera. Non capendoci niente io, il fierista mi ha venduto Arduino Due con ULN2803A (vedi questo mio vecchio post discussione su ULN2803A ) con il progetto che mi hanno postato quindi sto riuscendo a farlo funzionare. Pensavo però di utilizzare le 8 uscite dell'integrato per le luci e fare l'effetto fuoco con le rimanenti PWD. Così da avere più pin da utilizzare. A questo punto invece devo utilizzare solo quelle 8?
Una domanda allora, le prove le sto facendo con i led diretti sui pin, rischio quindi di bruciare tutto? Mi è andata bene perchè non ho collegato tutto insieme?
Per avere più punti come potrei fare allora? Un paio di Led (bianco e ultravioletto) vorrei metterli fissi (pensavo in Digital :() e le altre 4 (o 5) PWD per effetto fuoco.. Un altro integrato? Dei relè? ...
che brutta notizia che mi hai dato ;D
ciao
Emanuele

Si rischi di bruciare i pin, non sono esperto della due ma se sei fortunato i pin che hai usato sopportano fino a 15mA quindi ti è andata bene.Se l'ULN è alimentato a 12V e/o hai già usato tutte le sue uscite non ti resta che usaren un altro e pilotarlo di conseguenza o usare dei transistor singoli uno per ogni pin che pilota qualcosa anche in PWM. Per la scelta del tipo di transistor dovrai per forza di cose sapere cosa andrai ad alimentare, quanta corrente assorbità, la tensione di lavoro e sceglierne uno (BC337, IRL540, ecc.)

fabpolli:
Si rischi di bruciare i pin, non sono esperto della due ma se sei fortunato i pin che hai usato sopportano fino a 15mA quindi ti è andata bene.Se l'ULN è alimentato a 12V e/o hai già usato tutte le sue uscite non ti resta che usaren un altro e pilotarlo di conseguenza o usare dei transistor singoli uno per ogni pin che pilota qualcosa anche in PWM. Per la scelta del tipo di transistor dovrai per forza di cose sapere cosa andrai ad alimentare, quanta corrente assorbità, la tensione di lavoro e sceglierne uno (BC337, IRL540, ecc.)

Scusami approfitto della tua gentilezza e competenza. Riprovo a mettere il link di prima ULN e ti confermo che è alimentato a 12 V.
Vediamo se ho capito. Da quello che dici, incrociato con questo schema Arduino Due riassumo dicendo che non posso usare

  • pin 2 e pin 13 anche se PWD (o si visto che passo dall'integrato?
    e che posso usare (calcolando la giusta resistenza 5 Volt ( o 3?) - Tensione di caduta e 15ma con R=V/I) tutti i digital tranne 22-43-52
    giusto?
    grazie ancora
    Emanuele

Allora puoi usare il PWM anche se passi dall'ULN ma in output avrai i 12V, i pin ANCHE se POTREBBERO supportare FINO a 15mA io eviterei di usarli per pilotare i led prelevando costantemente 15mA, capisco che il Natale è alle porte, una manciata di BC337 su Amazon costano tanto ma arrivano in un giorno e ti evitano di buttare la due nel cestino

Magari la bella scheda allegata può essere utile ...
... notare che i 15mA MAX (quindi occorre stare almeno al massim al 70%) sono in "source", ma solo 9mA in "sink". Insomma, meglio NON usarli per pilotare direttamente LED o quant'altro, ma sempre usare dei "driver".

Guglielmo

ArduinoDue.pdf (570 KB)

fabpolli:
Allora puoi usare il PWM anche se passi dall'ULN ma in output avrai i 12V, i pin ANCHE se POTREBBERO supportare FINO a 15mA io eviterei di usarli per pilotare i led prelevando costantemente 15mA, capisco che il Natale è alle porte, una manciata di BC337 su Amazon costano tanto ma arrivano in un giorno e ti evitano di buttare la due nel cestino

No no, non è una questione di costi, ci mancherebbe !!!! Se vedi la mia età dal nick non sono più un ragazzino e non mi serve di risparmiare 5 euro :smiley: era per far fronte alla mia ignoranza e per "capire se avevo capito". Teoricamente quindi ci sono, si POTREBBERO pilotare ma è meglio di no. Calcolo le resistenza su 12V per quelle che passano dall'ULN e poi per i BC337 posso anche prenderli il mio problema è collegarli :wink:
potrebbe andare questo trovato in rete?

per ogni uscita che non passa per l'integrato metto un BC337 e collegandoli tutti ai 12V calcolo le resistenze opportune?
ciao
Emanuele

P.S. non riesco a far visualizzare le immagini, le allego.. :confused:

L'emettitore del transistor deve essere collegato a massa!
N.B.: nel disegno pratico che hai allegato il positivo e il negativo di Arduino Uno stanno in cortocircuito!

[OT]

edi1973:
P.S. non riesco a far visualizzare le immagini, le allego.. :confused:

Metti l'immagine come allegato (come hai appena fatto).
Dopo aver postato, copi il link dell'allegato (tasto dx mouse, copia indirizzo link)
Vai in modifica del post e inserisci immagine, fornendo il link appena copiato
Salvi

Federico

Datman:
L'emettitore del transistor deve essere collegato a massa!
N.B.: nel disegno pratico che hai allegato il positivo e il negativo di Arduino Uno stanno in cortocircuito!

Meglio questo?transistor.png
Praticamente la massa deve essere comune a tutti tra trasformatore da 12V, Arduino, led, lampadine e transistor. (solo adesso ho notato il corto circuito :o)
Il problema a questo punto rimane che resistenza mettere al transistor, non riesco a trovare notizie collegate al led, ci comandano di tutto in rete e sembra che una cosa semplice come un led con un transistor non riesco a trovare nulla. Mi sembra di aver capito che ogni transistor va a braccetto con una resistenza come il led, giusto? Da quel disegno mi sembra che ci sia qualcosa (in verità sto studiando ma non riesco ancora a capire)
ciao
Emanuele

transistor.png

Mi sono un po' perso ma sono led normali o led a 12V????