Pagina 1 di 2

Arduino: luci in sequenza

MessaggioInviato: 15 apr 2014, 0:51
da eldiablo84
Salve a tutto , ho in mente di realizzare un progetto e ho bisogno di aiuto per quanto riguarda il codice in Arduino .
Mi spiego : In casa ho una gradinata di circa 20 scale , rifacendo adesso il pavimento sto mettendo delle luci sui gradini , del tipo calpestabili . Quello che voglio fare è :
appena arrivo al primo gradino , attraverso una coppia di fotocellule si accende la luce del primo gradino e a intervalli regolari di circa 1s si accende il secondo e poi il terzo , cosi via fino all'ultimo gradino . Nel fare questa sequenza di luci dal terzo gradino in poi il primo inizia a spegnersi . In pratica rimarranno accesi 3 gradini che percorreranno tutta la gradinata fino alla fine .
Fin qui nessun problema , utilizzo un arduino ,demultiplexer e n relay .
Il problema è invece che voglio che questa operazione deve essere fatta anche se le scale vengono percore al senso contrario . Ovviamente il codice sarebbe lo stesso ma ciò che mi ha bloccato è il fatto che non riesco a far fare questa sequenza al mio arduino uno anche contemporaneamente . Questo perché Arduino inizia una sequenza ad esempio UP e non ascolta più input finché non finisce tale sequenza .
Quello che chiedo è un aiuto per far si che questa sequenza si avvii in qualsiasi momento uno passi attraverso la fotocellula , sia se una persona sta per salire le scale e allo stesso momento un'altra persona sta per scendere , sia se una persona si trova a metà gradinata salendo le scale e un'altra persona sta ora iniziando a salire le scale

Posto un esempio di codice ipotizzando 5 led come se fossero 5 delle scale .

Codice: Seleziona tutto
int led1=1;
int led2=2;
int led3=3;
int led4=4;
int led5=5;
int fc1=A0; //fotocellula UP
int fc2=A1; //fotocellula DOWN

int fc1state;
int fc2state;
int t =1000;

void setup(){
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);

Serial.begin(9600);
}


 



void loop() {

fc1state=analogRead(fc1);
fc2state=analogRead(fc2);

if(fc1state<500)

up();

if(fc2state<500)

down();

}

void up(){

  digitalWrite(led1,HIGH);
  delay(t);
  digitalWrite(led2,HIGH);
  delay(t);
  digitalWrite(led3,HIGH);
  digitalWrite(led1,LOW);
  delay(t);
  digitalWrite(led4,HIGH);
  digitalWrite(led2,LOW);
  delay(t);
  digitalWrite(led5,HIGH);
  digitalWrite(led3,LOW);
  delay(t);
  digitalWrite(led4,LOW);
  delay(t);
  digitalWrite(led5,LOW);
  }
void down(){

  digitalWrite(led5,HIGH);
  delay(t);
  digitalWrite(led4,HIGH);
  delay(t);
  digitalWrite(led3,HIGH);
  digitalWrite(led5,LOW);
  delay(t);
  digitalWrite(led2,HIGH);
  digitalWrite(led4,LOW);
  delay(t);
  digitalWrite(led1,HIGH);
  digitalWrite(led3,LOW);
  delay(t);
  digitalWrite(led2,LOW);
  delay(t);
  digitalWrite(led1,LOW);
  }

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 0:58
da TardoFreak
eldiablo84 ha scritto:... In casa ho una gradinata di circa 20 scale ...

Ehm ... 20 scale in una casa? Abiti in un appartamento di circa 10 piani? :shock:

Piramide Maya o Petronas Towers? :-M

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:01
da PietroBaima
secondo me faresti bene a dotare gli ospiti di ciabatte con led incorporato, risparmi led e ottieni la stessa funzione.

Ecco come collegare un led ai flip flop... :mrgreen:

Ciao,
Pietro.

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:04
da eldiablo84
dai ... è una gradinata di un condominio . Oltre allo stupore mica sapresti come risolvere questo dilemma ?

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:07
da TardoFreak
Incominciamo da qui,
hai circa (vabbè circa, si possono contare) venti scale. Ogni scala di quanti gradini è composta ... circa?
Così ci calcoliamo il numero di LED e di fotocellule che servono moltiplicando il numero di scale per i gradini di cui è composta ogni singola scala.

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:08
da PietroBaima
Immagine

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:18
da eldiablo84
Ok , dicevo una ventina circa perché non sono sicuro di voler applicare a tutte questa soluzione di luci su scale , (per motivi di praticità , passaggio fili ecc ) . Comunque va bene , gli scalini ne saranno 17 . Per cui diciamo che avrò 17 relay da attivare secondo la sequenza su descritta . Magari gli ultimi 2 scalini li collego ad un solo relay cosi da averne 16 , per cui un demux a 4 pin di ingresso .

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:19
da eldiablo84
due fotocellule . una a inizio gradinata , una a fine gradinata .

Re: luci in sequenza , Arduino

MessaggioInviato: 15 apr 2014, 1:29
da eldiablo84
descrivo nuovamente in maniera più diretta
caso 1) attivazione fotocella 1 --> inizio sequenza di UP (cioè attivazione uscita 1, attivazione uscita 2 , attivazione uscita 3 , attivazione uscita 4 e disattivazione uscita 1 , attivazione uscita 5 e disattivazione uscita 2 . . . . cosi via fino alla scala 17 con un secondo di tempo tra le varie accensioni ) , stop sequenza UP

caso 2) attivazione fotocellula 2 -->inizio sequenza down ( cioè uguale alla sequenza UP solo che al contrario cioè dall'uscita 17 alla 1)

caso 3) attivazione fotocellula 1 e attivazione fotocellula 2 ---> inizio sequenza UP , inizio sequenza down

caso 3) attivazione fotocellula 1 e dopo un di nuovo attivazione fotocellula 1 ---> attivazione sequenza UP e di nuovo attivazione sequenza UP.

In pratica anche le le luci sulle scale stanno già camminando non importa , devo far in modo che ad ogni attivazione di una delle 2 fotocellule parta comunque la sua sequenza .

Re: Arduino: luci in sequenza

MessaggioInviato: 15 apr 2014, 8:58
da c1b8
Un programma che gestisca un numero qualsiasi di sequenze up e sequenze down contemporanee come quelle che hai descritto è molto, molto banale. Servono circa 10 byte di ram e 10-15 righe di codice in C.

Prima però di descriverlo così come lo realizzerei io, volevo porti alcune domande/dubbi che ho:
1) velocità di scorrimento di 1 secondo. Se la scala viene affronatata da una persona più lenta (es. un anziano...) lo lasci al buio dopo pochi gradini?
2) se chi interrompe una delle fotocellule (es la fotocellula per salire) rimane fermo sul primo gradino, la sequenza deve cominciare lo stesso, si deve accendere in progressione tutta la scala o la sequenza inizia quando viene fatto il primo passo? (tutte condizioni molto semplici da gestire)
3) se le persone che scendono e salgono contemporaneamente sono un gruppo (quindi ogni persona interrompe la fotocellula un istante dopo la persona precedente) quante sequenze partono? Una sola o una per persona?
4) se chi si incontra nella scala (uno sale ed uno scende) si fermano a parlare, li lasci al buio?

Ciao.