Ciao a tutti
sono nuovo, è la prima volta che mi approccio al mondo arduino ecc..., quindi non riesco ancora a muovermi bene
il problema è il seguente :
sto creando una lampada, praticamente ho una fotoresistenza che mi legge un led che si accende e si spegne, questa fotoresistenza deve controllare una striscia di led , la quale ( stricia di led) si deve accendere gradualmente.
io volevo dire alla fotoresistenza di contare quante volte riceve l'impulso luminoso dal led singolo, in modo che ogni volta che riceve il segnale dal led singolo fà accendere di un valore minimo la striscia di led
Stai crosspostando a più non posso, hai già aperto 4 discussioni identiche, di cui 2 nella sezione internazionale. Ti do un consiglio, prima di continuare: LEGGITI IL REGOLAMENTO.Alla prossima violazione, prendo provvedimenti.
scusami la mia intenzione non era quella di urlare a dosso a nessuno
grazie mille nid69uta ho visto tutto quello che mi hai mandato, però non ho ancora capito come posso dire alla mia fotoresistenza di contare i lampeggi che riceve dal led.Cosi da poter controllare successivamente una striscia di led che si accenderà in fade
@dpier, non è molto chiaro quel che vuoi fare. In quei link c'e' come collegare una fotoresistenza.
Devi collegarla ad un pin analogico ed usare una analogRead() ed otterrai un valore tra 0-1023 a seconda di quanta luce riceve la fotoresistenza. La lettura analogica non è velocissima. A che velocità lampeggia il led?
Poi, per contare ti basta una variabile globale int o long dichiarata all'inizio del programma. Ma quando la azzeri? Ogni volta che la fotoresistenza supera un certo valore aumenti questa variabile. Quindi ? Che ci fai ?
certo, ma anche con Analogread il rpoblema esiste, questo deve essere risolto meccanicamente accoppiando ed isolando otticamente led emettitore e fotoresistenza ricettore
allora ho cercato di fare qualche foto e di creare una rappresentazione grafica...
come si vede nell'allegato io ho una rotellina che mi sono creato con dei fori, alcuni + interni e altri + esterni che si trovano sul perimetro della rotellina. in seguito ci sono dure fotoresistenze da un lato e due led costantemente accesi dall'altro( una mi serve per il giro orario l'altro nel giro antiorario). il led essendo costantemente acceso quando la rotellina passa e la luce attraversa i fori la mia fotoresistenza leggera un valore.
io devo riuscire a a contare le volte che la fotoresistenza legge la luce in questo modo, posso accendere in fade la striscia di led, che si accenderà in fade perchè ogni volta la fotoresistenza legge il lef si accendera di un certo valore la striscia di led.....
so che la cosa è molto difficile e sicuramente non mi sono espresso molto bene...in allegato una foto del meccanismo con piccola spiegazione
non so cosa sia il PWM ahahhaha , so solo che devo riuscire a controllare il giro della rotellina sia in movimento orario che in antiorario. l'obiettivo e contare i lampeggi che legge la fotoresistenza in un numero di giri precisi che fà la rotella, in modo che da trasmettere successivamente questo valore in corrispondenza al valore che andrà a creare il fade nella striscia di led.
in modo che : ogni volta che la fotoresistenza legge la luce del led che passa dal foro quindi diciamo un valore 1 , la striscia di led si accende in fade con valore 1.Arrivare ad un numero di giri di lettura ,da parte della fotoresistenza che può essere 20, in conseguenza la striscia di led si accendere al massimo che sarà 20
perchè tutto quell'armamento? potevi usare un encoder rotativo tipo questo http://www.miniinthebox.com/it/5-pin-encoder-rotativo-con-linterruttore_p381444.html
o questo Grove - Encoder
hanno tre fili .... comune, rotazione dx e rotazione sx, ti forniscono in uscita degli impulsi, puoi appliccare anche un cinghia con ruote opportunamente dimensionate e adattate, basta che non fai girare come l'elica di un aereo
esatto, per questo chiedevo meglio l'obiettivo.
Se ad esempio gli e' stato assegnato questo compito a titolo di studio allora va bene, ma se invece e' una scelta progettuale non ha senso anche perche', sempre come dicevamo sopra, la luce esterna influisce sulla resistenza ed e' difficile da schermare meccanicamente
scusatemi se vi rispondo solo ora
allora praticamente sono riuscito far funzionare tutto il meccanismo, avevate perfettamente ragione sul encoder rotativo , ma il progetto o almeno il prof ci aveva chiesto di crearcelo da noi. Nonostante molti problemi alla fine siamo riusciti a farlo funzionare anche se i valori come potete ben immaginare inizialmente non erano puliti. ora ho un altro problema.
Come avevo spiegato l'altra volta il sistema che ho creato con le due fotoresistenze servivano a darmi un valore , il quale doveva andare in seguito a modificare la striscia dei led che si dovevano accendere in fade.
il problema è il seguente:
io ho un binario dove scorre una lampada , quando la lampada è a metà del binario la luce dovrebbe accendersi al massimo , mentre quando inizia è spenta e si accenda piano piano ( fade) arriva alla metà ( massima luminosità) e dopo la metà torna a spegnersi piano piano ( fade ). come faccio a a dire ai led di accendersi al massimo a metà percorso.
vi metto il code, che ha fatto un mio amico
[code][code]int encoderA = A0; // fotoresistenzaA
int encoderB = A1; // fotoresistenzaB
int led = 5; // select the pin for the LED
int InputA = 0; // input dell' encoderA
int InputB = 0; // input dell' encoderA
byte InputAbin;
byte InputBbin;
byte InputAbinOld;
byte InputBbinOld;
const int sogliaA = 100;
const int sogliaB = 100;
const int PosizioneMax = 172; // <--------------------------
int Posizione = 0;
int P;
int I=0;
int a;
void setup() {
pinMode(led, OUTPUT); // declare the ledPin as an OUTPUT:
Serial.begin(115200);
}
void loop() {
InputAbinOld = InputAbin;
InputBbinOld = InputBbin;
InputA = analogRead(encoderA);
if (InputA > sogliaA+20) InputAbin = 1;
if (InputA < sogliaA-20) InputAbin = 0;
InputB = analogRead(encoderB);
if (InputB > sogliaB+20) InputBbin = 1;
if (InputB < sogliaB-20) InputBbin = 0;
a=0;
if (InputAbin == 1 & InputBbin == 1 & InputAbinOld == 0 & InputBbinOld == 1) a=-1;
if (InputAbin == 0 & InputBbin == 1 & InputAbinOld == 0 & InputBbinOld == 0) a=-1;
if (InputAbin == 0 & InputBbin == 0 & InputAbinOld == 1 & InputBbinOld == 0) a=-1;
if (InputAbin == 1 & InputBbin == 0 & InputAbinOld == 1 & InputBbinOld == 1) a=-1;
if (InputAbin == 1 & InputBbin == 1 & InputAbinOld == 1 & InputBbinOld == 0) a=1;
if (InputAbin == 0 & InputBbin == 1 & InputAbinOld == 1 & InputBbinOld == 1) a=1;
if (InputAbin == 0 & InputBbin == 0 & InputAbinOld == 0 & InputBbinOld == 1) a=1;
if (InputAbin == 1 & InputBbin == 0 & InputAbinOld == 0 & InputBbinOld == 0) a=1;
Posizione = Posizione + a;
P = Posizione / PosizioneMax * 100;
if (P < 50) I = P * 2; else I = 200 - 2 * P;
analogWrite(led,I*2.55);
Serial.print(InputA);
Serial.print(" ");
Serial.print(InputAbin);
Serial.print("----------");
Serial.print(InputB);
Serial.print(" ");
Serial.print(InputBbin);
Serial.print(" ");
Serial.println(Posizione)