Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Controllare presepe con Arduino

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[21] Re: Controllare presepe con arduino

Messaggioda Foto Utentedadothebest » 6 nov 2015, 12:06

Niente scasami, tutto chiaro, non avevo visto il penultimo schema :ok:
Appena posso procedo ad assemblare il tutto, vi farò sapere se funziona.
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

0
voti

[22] Re: Controllare presepe con arduino

Messaggioda Foto Utentedadothebest » 6 nov 2015, 16:01

To andando a comprare i componenti, nel caso non avesse il 2n2222, quale altro transistor posso prendere che possa andare bene? La massima corrente che mi serve in uscita é sui 50mA.
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

0
voti

[23] Re: Controllare presepe con arduino

Messaggioda Foto Utentedadothebest » 7 nov 2015, 20:15

Ho girato 2 negozi e nessuno ha i 2n2222. Quale altro transistor posso prendere in alternativa? Oppure conoscete uno shop on-line dove vendono componenti a buoni prezzi?
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

2
voti

[24] Re: Controllare presepe con arduino

Messaggioda Foto Utentemir » 8 nov 2015, 0:53

dadothebest ha scritto:2n2222. Quale altro transistor posso prendere in alternativa?


Il 2N2222 è un comune transistor NPN 60 V - 0,8 A - 0,5 W - B=100..300
gli equivalenti possono essere il BC 546 o il BC637 altrettanto comuni, devi solo fare attenzione, perché la piedinatura è differente, ovvero la posizione dei terminali di base,emettitore e collettore :
Avatar utente
Foto Utentemir
60,1k 9 12 13
G.Master EY
G.Master EY
 
Messaggi: 20225
Iscritto il: 19 ago 2004, 21:10

0
voti

[25] Re: Controllare presepe con arduino

Messaggioda Foto UtenteRussell » 9 nov 2015, 9:39

Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2194
Iscritto il: 4 ott 2009, 10:25

0
voti

[26] Re: Controllare presepe con arduino

Messaggioda Foto Utentedadothebest » 9 nov 2015, 18:54

Alla fine ho ordinato 10 transistor 2n2222 tramite amazon, dovrebbero arrivare tra 2 settimane.
Intanto sto provando a scrivere il programma, ma sto avendo alcune difficoltà. Ho trovato on-line uno strek simile al mio progetto e sto cercando di modificarlo ma il programma mi restituisce diversi errori perlopiù perché non so implementare specifiche azioni che ho visto su internet. Potete aiutarmi? :oops:
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

0
voti

[27] Re: Controllare presepe con arduino

Messaggioda Foto Utentepaofanello » 9 nov 2015, 20:07

c'é un pulsante apposito quando scrivi una risposta: code
inizia col postare TUTTO il programma che hai scritto tra quei tag e esponi anche quello che secondo te dovrebbe fare, così vediamo di aiuarti :ok:
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.275 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

0
voti

[28] Re: Controllare presepe con arduino

Messaggioda Foto Utentedadothebest » 9 nov 2015, 20:44

Il codice che ho scritto è il seguente:
Codice: Seleziona tutto
#define pin_luciA        2
#define pin_stelleB      3
#define pin_luciB        4
#define pin_stelleA      5
#define pin_stellacometa 6
#define pin_luciC        7
#define pin_temporale    8
#define pin_tramonto     9
#define pin_alba         10
#define pin_giorno       11

int oneminrome[4] = { 4194, 22958, 4195, 28651 };
int oneminbtlm[4] = { 3668,25189,3668,27474 };
int timeStepOld = 0;
int timeStep = 0;

long timeCurr = 0;

byte fade[]  = {255, 250, 245, 240, 235, 230, 225, 220, 215, 210, 205, 200, 195, 190, 185, 180, 175, 170, 165, 160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0}; // 52 step
byte curr   = 0;

void setup() {
  Serial.begin( 9600 );

  pinMode( pin_luciA        , OUTPUT );
  pinMode( pin_stelleB      , OUTPUT );
  pinMode( pin_luciB        , OUTPUT );
  pinMode( pin_stelleA      , OUTPUT );
  pinMode( pin_stellacometa , OUTPUT );
  pinMode( pin_luciC        , OUTPUT );
  pinMode( pin_temporale    , OUTPUT );
  pinMode( pin_tramonto     , OUTPUT );
  pinMode( pin_alba         , OUTPUT );
  pinMode( pin_giorno       , OUTPUT );

  analogWrite( pin_luciA        , LOW );
  analogWrite( pin_stelleB      , LOW );
  analogWrite( pin_luciB        , LOW );
  analogWrite( pin_stelleA      , LOW );
  analogWrite( pin_stellacometa , LOW );
  analogWrite( pin_luciC        , LOW );
  analogWrite( pin_temporale    , LOW );
  analogWrite( pin_tramonto     , LOW );
  analogWrite( pin_alba         , LOW );
  analogWrite( pin_giorno       , LOW );

  Serial.println("-- START --");
}

void loop() {
  timeCurr = oneminrome[curr];
  timeStep = (timeCurr / 52);

  Serial.print("Current: "); Serial.println(curr);
  Serial.print("Time current: "); Serial.println(timeCurr);
  Serial.print("Time single step: "); Serial.println(timeStep);

  // alba
  if ( curr == 0 ) {
    Serial.print("Fase: "); Serial.println("ALBA");
    for ( int i = 0; i < 52; i++) {
      analogWrite( pin_luciA,        0 );
      analogWrite( pin_stelleB,      fade[(i - 51)]);
      analogWrite( pin_luciB,        0 );
      analogWrite( pin_stelleA,      fade[(i - 51)]);
      analogWrite( pin_stellacometa, fade[(i - 51)]);
      analogWrite( pin_luciC,        0 );
      analogWrite( pin_temporale,    0 );
      analogWrite( pin_tramonto,     0 );
      analogWrite( pin_alba,         fade[(51 - i)]);
      analogWrite( pin_giorno,       0 );
    }
    timeStepOld = timeStep;

}

  // giorno
  if ( curr == 1 ) {
     Serial.print("Fase: "); Serial.println("GIORNO");
     for ( int i=0; i<52; i++) {
      analogWrite( pin_luciA,        0 );
      analogWrite( pin_stelleB,      0 );
      analogWrite( pin_luciB,        0 );
      analogWrite( pin_stelleA,      0 );
      analogWrite( pin_stellacometa, 0 );
      analogWrite( pin_luciC,        0 );
      analogWrite( pin_temporale,    0 );
      analogWrite( pin_tramonto,     0 );
      analogWrite( pin_alba,         0 );
      analogWrite( pin_giorno,       fade[(51 - i)]);
       delay( timeStepOld );
     }
     timeStepOld = (timeStepOld*52); // elapsed time
     timeCurr = (timeCurr - timeStepOld);
     delay( timeCurr );
  }

  // tramonto
  if ( curr == 2 ) {
     Serial.print("Fase: "); Serial.println("TRAMONTO");
     for ( int i=0; i<52; i++) {
      analogWrite( pin_luciA,        0 );
      analogWrite( pin_stelleB,      fade[(51 - i)]);
      analogWrite( pin_luciB,        0 );
      analogWrite( pin_stelleA,      fade[(51 - i)]);
      analogWrite( pin_stellacometa, fade[(51 - i)]);
      analogWrite( pin_luciC,        0 );
      analogWrite( pin_temporale,    0 );
      analogWrite( pin_tramonto,     fade[(51 - i)]);
      analogWrite( pin_alba,         fade[(51 - i)]);
      analogWrite( pin_giorno,       fade[(i - 51)]);
       delay( timeStep );
     }
     timeStepOld = timeStep;
  }
   
  // notte
  if ( curr == 3 ) {
     Serial.print("Fase: "); Serial.println("NOTTE");
     for ( int i=0; i<52; i++) {
      analogWrite( pin_luciA,        1 );
      analogWrite( pin_stelleB,      1 );
      analogWrite( pin_luciB,        1 );
      analogWrite( pin_stelleA,      1 );
      analogWrite( pin_stellacometa, 1 );
      analogWrite( pin_luciC,        1 );
      analogWrite( pin_temporale,    0 );
      analogWrite( pin_tramonto,     0 );
      analogWrite( pin_alba,         0 );
      analogWrite( pin_giorno,       0 );
       delay( timeStepOld );     
   }     
   timeStepOld = (timeStepOld*52); // elapsed time     
   timeCurr = (timeCurr - timeStepOld);     
   delay( timeCurr );
  }   
  curr++;
  if ( curr >= 4 ) { curr = 0; }
}

Il programma di arduino non mi genera nessun errore. Ora vorrei modificare il comportamento delle fasi, ad esempio l'alba. Attualmente ho impostato che:
- Comportamento esatto da NON modificare: stelleB, stelleA, stellacometa si spengono gradualmente. Alba si accende gradualmente.
- Comportamento che vorrei aggiungere:
1) luciA, luciB, luciC si devono spegnere (non sono in PWM) dopo un certo tempo, ad esempio 2 secondi, da quando inizia l'alba.
2) giorno si deve accendere gradualmente fino a raggiungere un certo valore di luminosità, ad esempio metà della luminosità massima, che raggiungerà alla fine del ciclo alba.
Codice: Seleziona tutto
analogWrite( pin_luciA,   .......     
analogWrite( pin_stelleB,      fade[(i - 51)]);
analogWrite( pin_luciB,        .....
analogWrite( pin_stelleA,      fade[(i - 51)]);
analogWrite( pin_stellacometa, fade[(i - 51)]);
analogWrite( pin_luciC,        .....
analogWrite( pin_temporale,    0 );
analogWrite( pin_tramonto,     0 );
analogWrite( pin_alba,         fade[(51 - i)]);
analogWrite( pin_giorno,      .......
Avatar utente
Foto Utentedadothebest
24 2 7
Frequentatore
Frequentatore
 
Messaggi: 229
Iscritto il: 25 nov 2013, 17:13
Località: Ascoli Piceno

0
voti

[29] Re: Controllare presepe con arduino

Messaggioda Foto Utentepaofanello » 9 nov 2015, 23:56

Ma il codice l'hai scritto tu?
Sai già se funziona?
E se funziona come vuoi tu? :mrgreen:
Detto questo:
Di programmazione non sono certo ferrato, e questo programma è scritto un filino oltre le mie conoscenze... però qualche idea la ho:
dadothebest ha scritto:1) luciA, luciB, luciC si devono spegnere (non sono in PWM) dopo un certo tempo, ad esempio 2 secondi, da quando inizia l'alba.

Piuttosto che immettere tempi (come 2 secondi), penso sia meglio utilizzare i vari cicli del for,
(Avevi detto che eri completamente ignorante di programmazione, ora mi presenti questo codice, quindi non so se devo spiegarti anche cosa è un ciclo for o no :mrgreen: )
Quindi spegnere le luci in questione quando quelle dell'alba raggiungono una luminosità desiderata (che poi sceglierai bene tu provando con tutto attaccato) con un if, con una cosa del genere:
dadothebest ha scritto: // alba
if ( curr == 0 ) {
Serial.print("Fase: "); Serial.println("ALBA");
for ( int i = 0; i < 52; i++) {

analogWrite( pin_stelleB, fade[(i - 51)]);
analogWrite( pin_stelleA, fade[(i - 51)]);
analogWrite( pin_stellacometa, fade[(i - 51)]);
analogWrite( pin_temporale, 0 );
analogWrite( pin_tramonto, 0 );
analogWrite( pin_alba, fade[(51 - i)]);
analogWrite( pin_giorno, 0 );
if ( i==30) {
analogWrite( pin_luciA, 0 );
analogWrite( pin_luciB, 0 );
analogWrite( pin_luciC, 0 );
}
}
timeStepOld = timeStep;

Così si spengono quando il for arriva alla trentesima iterazione, poco dopo metà dell'alba, ma lo puoi aggiustare tu!
La tua seconda richiesta è comunque fattibile, ma ora non ho tempo di pensarci... Anche perché come dicevo all'inizio il problema è che non posso dire se il programma è fatto bene, vedo ad esempio che usi analogWrite anche per pin digitali, anche se poi il valore è 0 o 1, ma penso dia problemi poi ad Arduino! Non mi piace nemmeno il meccanismo di fade con quel grosso Array... Ma non ho le conoscenze necessarie per bocciare il programma, perciò: o aspetti che ti risponde qualcuno più esperto, o aspetti di provarlo :D
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.275 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

0
voti

[30] Re: Controllare presepe con arduino

Messaggioda Foto Utentepaofanello » 10 nov 2015, 0:01

Mi sa che ti ho detto una cavolata, per far spegnere le luci dopo due secondi si può fare in maniera non troppo complessa, avevo interpretato male il funzionamento del codice, quando ho tempo (se nessuno lo posta prima) ti metto la mia idea!
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.275 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti