Pages: [1]   Go Down
Author Topic: Mantenere lo stato  (Read 506 times)
0 Members and 1 Guest are viewing this topic.
Italy
Offline Offline
Full Member
***
Karma: 0
Posts: 158
Arduino = Tecnologia
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho un problema con arduino: smiley-roll-blue
Ho una fotoresistenza e una resistenza da 10K che formano un partitore di tensione, questo segnale viene prelevato e inviato ad arduino, letto ed elaborato, l'uscita dovrebbe pilotare una sirena(che dovrei comandare con un mosfet vero???  mi date qualche consiglio?)
il vero problema è che lo stato del piedino in Output dovrebbe rimanere nello stato in cui la soglia(impostata nel codice dello sketch) sia più alta di un valore prestabilito(sempre nel codice).
Grazie. smiley-lol
Logged

Se ritieni che la mia risposta ti abbia aiutato a risolvere il problema non esitare! ringraziami dandomi il Karma! smiley-wink
_-_-_-_-_-_-_-_-_-_-_-

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10490
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

per interderci, normalmente il pin è a 5v, se scatta la sirena anzichè andare a 0V deve rimanere a 2V? (esempio con numeri  caso)
forse basta un'uscita analogica (pwm)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21834
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non mi sodisfa la risposta di lesto:

definizioni:
LDR  é la fotorresistenza; la tensione del partitore aumenta se si oscura il LDR.
"limite" é la soglia sopra la quale si deve accendere la sirena
"isteresi) é un isteresi per non fare spegnere subito la sirena perché ci sono piccoli disturbi sulla letura della tensone LDR

Code:
loop(){
LDRvalore=analogRead(LDRpin);
if(LDRvalore>limite)digitalWrite(SIRENApin, HIGH);
if(LDRvalore<(limite-isteresi))digitalWrite(SIRENApin, LOW);
}

Ciao Uwe
Logged

Italy
Offline Offline
Full Member
***
Karma: 0
Posts: 158
Arduino = Tecnologia
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa ma quindi se volessi mantenere la sirena e quindi lo stato del piedino alto dovrei mettere un valore di isteresi(ma è in millisecondi???) alto???...più che altro mi interessa mantenere lo stato del piedino alto per un tempo che stabilisco io stesso nel codice su Arduino.

Per il controllo della sirena dovrei utilizzare un mosfet in PWM??? perchè ho fatto alcuni test con un TIP 122(e quindi un alimentazione esterna) ma i risultati sono stati deludenti in quanto la sirena si attivava,ma si accendeva quasi a fatica, come se la tensione non fosse abbastanza(ma era sufficiente perchè la tensione minima era di 7V e io usavo i 9V).


Grazie.
Logged

Se ritieni che la mia risposta ti abbia aiutato a risolvere il problema non esitare! ringraziami dandomi il Karma! smiley-wink
_-_-_-_-_-_-_-_-_-_-_-

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10490
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah scusa, io pensavo volevi mantenere un certo voltaggio minimo... Quindi lascia perdere il PWM smiley

Se invece intendi mantenere lo stato HIGH per qualche tempo, allora devi salvare in una variabile il tempo ( millis() ) in cui metti il segnale HIGH alla sirena, e rimetterlo a LOW quando millis() e maggiore della variabile tempo + millisecondi di accensione della sirena.

per la sirena che fatica, sicuro che il TIP oltre alla tensione fornisce abbastanza corrente?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Italy
Offline Offline
Full Member
***
Karma: 0
Posts: 158
Arduino = Tecnologia
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...mi faresti un esempio di come struttureresti il codice???
Grazie.
Logged

Se ritieni che la mia risposta ti abbia aiutato a risolvere il problema non esitare! ringraziami dandomi il Karma! smiley-wink
_-_-_-_-_-_-_-_-_-_-_-

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10490
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ogni loop

se deve scattare la sirena, salva il tempo attuale e manda il segnale alto.

se il tempo salvato + il tempo di accensione della sirena è maggiore del tempo attuale spegni la sirena.

facile no? (da qui direi che dovresti farcela da solo, altrimenti ripassati qualche tutorial, come blinkWithoutDelay)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: