Autore |
Discussione |
washer
Utente Medio
212 Messaggi |
Inserito il - 10/08/2016 : 21:46:20
|
Buona serata a tutti quanti.
Giochellando con il sensore di velocità di un ciclotakimentro, ho visto che al passaggio del magnete il sensore cambia la la sua resistenza da un paio di GOhm a qualche decina. Ho provato allora a usarlo per un interruttore che funzioni da sensore di pedalata, con questo (emh) “schema”:
Con condensatore da 1 uF si attiva gas per circa un secondo, con 22uF per una decina di secondi.
I magneti sono incastrati nelle 5 viti della coroncina interna.
Qualche baco è evidente, funziona anche all’indietro, e si può barare tenendo il pedale in una posizione che mantenga un magnete prossimo al sensore. Ma queste sarebbero pratiche meschine e fraudolente.
Il difetto peggiore è che toglie un po’ di tensione a signal, e la bipa non accelera tutto.
Avete una soluzione, consigli, stroncature?
|
Senti che musica! ( Tex Willer ) |
|
Monkey50z
Utente Attivo
Emilia Romagna
814 Messaggi |
Inserito il - 10/08/2016 : 22:31:38
|
Ciao, secondo me lo schema è sbagliato. Non vi è collegato nulla al filo verde del segnale, come fa il controller ad accelerare?? |
Modificato da - Monkey50z in data 10/08/2016 22:32:23 |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 10/08/2016 : 22:52:57
|
Certo è mal disegnato... il controller è a sx e a dx c'è il potenziometro dell'acceleratore. L'accrocchio apre e chiude il filo V+. Ripeto, funziona, mi ha portato a casa stasera. Ma perdo tensione. Forse tra source e drain del fet, forse sulla resistenza di uscita del controller per la corrente che circola nel condensatore. Domani provo a togliere il condensatore e viaggiare con un magnete sul sensore ... |
Senti che musica! ( Tex Willer ) |
|
|
gianlucagpt
Utente Medio
Molise
293 Messaggi |
Inserito il - 11/08/2016 : 06:57:05
|
Carino Complimenti |
|
|
Barba 49
Utente Master
Toscana
36209 Messaggi |
Inserito il - 11/08/2016 : 07:54:22
|
Visto che sai pasticciare con l'elettronica e constatato che il tuo sistema oltre a non riconoscere il senso di rotazione delle pedivelle (illegale) non fornisce nemmeno prestazioni al top credo che la scelta migliore sia di acquistare un pas e poi progettare l'interfaccia che comanda l'acceleratore senza essere costretto ad acquistare un "gas legalizer" o a copiarne il circuito... |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 11/08/2016 : 21:22:16
|
Ma qual è la logica per stabilire il senso di rotazione? Ci vogliono due sensori, o un trucco geometrico, e saper riconoscere la forma d'onda. Sono cose fuori dalla mia portata.
Ma poi perché dovrei pedalare al contrario? Lo stesso legislatore non ha ritenuto di dover precisare il senso della pedalata, per fortuna ... La legalità è il risultato dell'insieme di leggi e comportamenti adeguati: le prime da sole alimenterebbero il mostro burocratico che ci sta affossando ... Comunque questa sera ritengo che toccare quelle tensioni finemente regolate sia una c****a, ho ritrovato la potenza con un relè sul filo di alimentazione. Proverò a gestirlo coi pedali ... |
Senti che musica! ( Tex Willer ) |
|
|
Barba 49
Utente Master
Toscana
36209 Messaggi |
Inserito il - 11/08/2016 : 22:14:40
|
Le centraline riconoscono la sequenza di impulsi rettangolari che provengono dal sensore di pedalata e distinguono quelli generati quando si pedala nel senso giusto...
Credo anche fermamente che ad un controllo una Bipa che si avvia pedalando al contrario sarebbe sanzionata, la cosa equivale ad avere un'assistenza assolutamente slegata dall'apporto muscolare, cosa che snatura la definizione "Bici a pedalata assistita".
Fai attenzione con i relè, la tensione di +5V erogata dalla centralina non è in grado di mantenere eccitato un relè senza danneggiare l'integrato che la genera. |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 11/08/2016 : 22:28:43
|
| Barba 49 ha scritto:
...
Credo anche fermamente che ad un controllo una Bipa che si avvia pedalando al contrario sarebbe sanzionata ...
|
Temo tu abbia ragione.
Comunque alimenterei la bobina del relè dai 36V, in serie all'interruttore magnetico, in serie ad una resistenza per abbassare la tensione: non credo di recuperare un relè 36v. Un condensatore potrebbe temporizzare ... |
Senti che musica! ( Tex Willer ) |
|
|
Barba 49
Utente Master
Toscana
36209 Messaggi |
Inserito il - 12/08/2016 : 07:15:42
|
Prova così, se utilizzi la tensione della batteria non ci sono problemi: Casomai fai attenzione, le bobine dei relè "automobilistici" da 24V assorbono tranquillamente 300mA, quindi stai alto come valore in Watt della resistenza di caduta... |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 12/08/2016 : 09:31:01
|
Il problema è il pilotaggio del fet mal fatto , probabilmente non va in saturazione completa e fa una caduta di tensione che si ripercuote sul potenziometro. Mi sai dare la sigla del fet e che tensione ti serve sul potenziometro.
Per il verso di rotazione servono 2 sensori , uno deve essere chiuso al passaggio del magnete e l'altro aperto , si chiama controllo ad inquadratura , cosi puoi riconoscere il verso di rotazione dei pedali.
Ciao Imer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 12/08/2016 : 21:41:29
|
Ho recuperato un relè da CS, 24V, sui 20 mA, lo sto istallando. Ora la difficoltà è la capacità che lo tiene chiuso tra un sensore e l'altro: ho sbagliato i conti, 470 uF non bastano e temo di dover salire troppo...
@Imer, grazie per la dritta sul controllo ad inquadratura, ci farò un "Wiki". Dammi cinque minuti per quei valori ... |
Senti che musica! ( Tex Willer ) |
Modificato da - washer in data 12/08/2016 21:43:07 |
|
|
washer
Utente Medio
212 Messaggi |
|
washer
Utente Medio
212 Messaggi |
Inserito il - 13/08/2016 : 08:33:06
|
ovviamente mi sono fumato il sensore. L'ignoranza è un costo ...
Buon WE a tutto il forum. |
Senti che musica! ( Tex Willer ) |
|
|
Barba 49
Utente Master
Toscana
36209 Messaggi |
Inserito il - 13/08/2016 : 09:10:44
|
|
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 13/08/2016 : 11:19:22
|
Il mosfet te lo sei fumato per la corrente di gate. Se fossi in te non lavorerei sulla alimentazione del potenziometro , ma taglierei il segnale. Per pilotare correttamente il mosfet il circuito è questo:
http://electronics.stackexchange.com/questions/149637/microcontroller-incapable-of-driving-mosfet
Ovviamente per mosfet piccoli puoi usare dei transistor più piccoli, se lo piloti cosi le cadute di tensione ai capi sono veramente di pochi mV.
Ciao IMer
|
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 13/08/2016 : 11:21:30
|
Dimenticavo , se il sensore a 2 fili non è un semplice reed ? Dura romperlo !
Ciao IMer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 15/08/2016 : 21:37:45
|
Ciao Imer, grazie per l'appoggio.
Il sensore, credo di averlo bruciato nel caricare un condensatore troppo grosso. Il mosfet invece sta benone.
Mi sembra di capire "a braccio" lo schema che proponi, ma non capisco perché non riesca a saturare il fet applicando 5V al gate, e sia necessario uno stadio intermedio.
Probabilmente mi mancano le basi.
Lo schema che mi ispira è "resistive load" del DS postato sopra.
La fig 4 dello stesso mostra tensioni Vds assai basse già con Vg di 2,5V.
Mi rendo conto che non siamo in un forum di elettronica, ma se volessi darmi una mano a capire come funziona la faccenda, te ne sarei grato.
|
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 16/08/2016 : 20:20:32
|
Ok , ti scrivo due righe per farti capire il problema , dammi solo un po di tempo , sono alle prese con imbiancatura laboratorio sono 50 mq di superficie e attrezzi da spostare e pulire.
Ciao IMer |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 17/08/2016 : 12:29:00
|
Spiego in maniera spannometrica mentre asciuga la vernice: è vero che con 2.5 Volt sul gate lo piloti bene , ma tu hai messo il carico sul source quindi rispetto alla massa sei alto per la caduta di tensione del potenziometro. Se vuoi usare quella configurazione la tensione di gate deve essere almeno 7.5V per compensare la caduta del potenziometro se la misuri verso massa. Se vuoi mantenere quella configurazione devi usare un canale P in modo che il riferimento diventi il positivo e ovviamente ragionare al contrario, perché a 0 lui conduce, quindi devi invertire la logica. Altro problema è il condensatore , il condensatore scarico è paragonabile ad un corto , quindo ogni volta che lo carichi è come se andasse in corto il sensore, ci devi mettere una resistenza di limitazione.
Altrimenti devi usare il mosfet con source a massa e sul drain ci colleghi un rele che da e toglie l'alimentazione al potenziometro.
A mio avviso se vuoi giocare per costruirti un sensore di pedalata , userei questo:
http://www.lightinthebox.com/it/arduino-pro-mini-modulo-atmega328-5v-16m_p685134.html?litb_from=paid_adwords_shopping&utm_source=google_shopping&utm_medium=cpc&adword_mt=&adword_ct=119506979474&adword_kw=&adword_pos=1o2&adword_pl=&adword_net=g&adword_tar=&adw_src_id=1810908567_621989889_33043179314_pla-205611332714&gclid=CjwKEAjwltC9BRDRvMfD2N66nlISJACq8591I8jGx0sWSzBZL6sk5ilog-TlxAD34ak-kLkiBrGUVhoCKzLw_wcB¤cy=EUR
Ci entri direttamente con il sensore senza grossi problemi e puoi pilotare direttamente alimentazione del potenziometro se ha quel valore, giocando con il software poi decidi il ritardo di intervento e da li ci fai quello che vuoi , come si dice l'appetito vien mangiando , da qui puoi farci contachilometri cadenzimetro e quant'altro ti viene in mente.
Ciao Imer
|
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 17/08/2016 : 19:54:58
|
| ... ma tu hai messo il carico sul source quindi rispetto alla massa sei alto ...
|
!
Grazie Imer!!! Ci riprovo alla luce dei tuoi consigli. |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 17/08/2016 : 21:47:17
|
Vai di Arduino , elettricamente più semplice e con il software è più facile darti una mano.
Ciao Imer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 19/08/2016 : 19:18:28
|
Belin Imer, ma mi hai visto? Mi impapero con un transistor! Mi posso mettere su cose serie?
"Arduino" va nella lista delle cose da fare. Nel WE provo di nuovo col mosfet. |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 19/08/2016 : 20:24:20
|
come vuoi tu, se usi Arduino lo schema è molto semplice e posso aiutarti con il software. se vai di analogico ti posso aiutare ma rimane più difficile. A te la scelta.
Ciao Imer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 19/08/2016 : 23:39:12
|
Apprezzo molto la tua disponibilità. Come minimo mi tocca cercare di capire qualcosa del thread che hai linkato sopra. Grazie, Riccardo |
Senti che musica! ( Tex Willer ) |
|
|
washer
Utente Medio
212 Messaggi |
|
Imer
Utente Medio
Piemonte
455 Messaggi |
|
washer
Utente Medio
212 Messaggi |
Inserito il - 22/08/2016 : 22:32:56
|
OK. Un dedalo per chi ci si affaccia...
Bisogna provvedere ad una alimentazione regolata 5V? Dai 30-41 della batteria? L'output deve gestire un relè o c'è un modo diretto? Dove potrebbe intervenire? Sul filo di alimentazione del potenziometro del gas, fornendo 5V alla bisogna? O su un ingresso brake della centralina? |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 23/08/2016 : 10:36:01
|
Per l'alimentazione se usi pochi mA puoi tranquillamente prendere quelli del potenziometro . Io proverei alimentare direttamente il potenziometro con un pin di arduino, in pratica toglia e metti l'alimentazione al potenziometro , un po' come fai con il mosfet. Dai pin se non ricordo male la massima corrente è 40 mA quindi con un potenziometro di 1K sei in sicurezza.
Ciao Imer
|
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 23/08/2016 : 21:29:38
|
| Imer ha scritto:
Per l'alimentazione se usi pochi mA puoi tranquillamente prendere quelli del potenziometro .
|
Posso essere certo di questo?
| washer ha scritto:
Sul potenziometro ..., io misuro 4.73 V sul filo di alimentazione scollegato, 4.38 V se lo collego al potenziometro (2.26 KOhm),
|
Come posso verificare che quell'uscita dalla centralina riesca ad alimentare anche la scheda logica?
|
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 24/08/2016 : 07:38:16
|
Direi di si al 90%, in pratica devi alimentare arduino e il potenziometro che già esiste. Se non ti fidi per le prove puoi usare una batteria da 9V , poi si puo applicare uno step-down da 48V a 5V non ho voglia di farlo. Al limite il problema è l'alimentazione del potenziometro se è protetta , in pratica c'è una resistenza in serie , se carichi l'alimentazione lei cede. Scusa ma l'alimentazione del tuo circuito con il mosfet da dove la prendevi ? Ciao Imer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 24/08/2016 : 20:59:56
|
Dall'alimentazione del potenziometro. Proverò nei modi suggeriti. Cominciando con qualche riga di codice. Grazie |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 24/08/2016 : 21:45:01
|
Questa sera ho provato il mio sensore per il cambio visto che mi è arrivata la cavetteria Higo e dal mio connettore freno riesco ad alimentare senza problemi arduino e il sensore montato sul cavo , in pratica alimenta 2 led + IC sensore + arduino non ho verificato gli assorbimenti ho fatto una cosa al volo, ma funziona senza problemi, ovvio che bisogna stare attento a non far cortocircuiti od alimentare un phon . Quando hai il materiale fammi un fischio che ti aiuto , tanto si può simulare tutto al banco. Ma ti basta che sente i pedali girare o vuoi anche sentire il verso di rotazione ? Ciao IMer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 24/08/2016 : 23:16:36
|
Almeno in teoria mi piacerebbe riconoscesse il verso giusto. Ma non saprei come, con un solo sensore on/off. |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
|
washer
Utente Medio
212 Messaggi |
Inserito il - 25/08/2016 : 22:21:33
|
Virtualmente anche a cassette. Questo codice alimenterebbe il gas, al passaggio del magnete?
const int sensePin = 12; // il pin segnale dal sensore
const int potPin = 11; // il pin all’alimentazione del potenziometro
int senseState = 0; // variabile stato del sensore
void setup() {
pinMode(potPin, OUTPUT); // potPin come output
pinMode(sensePin, INPUT); // sensePin come input
}
void loop(){
senseState = digitalRead(sensePin); // legge lo stato del sensore
if (senseState == LOW) {
digitalWrite(potPin, HIGH); // alimenta il potenziometro se un magnete è vicino al sensore
}
else {
digitalWrite(potPin, LOW); // toglie alimentazione al potenziometro
}
}
In caso affermativo potrei procedere, però ... Non so che funzione usare per tenere il gas alimentato tra un magnete e l'altro. Non so come distinguere il senso di rotazione, anche con due sensori. |
Senti che musica! ( Tex Willer ) |
Modificato da - washer in data 25/08/2016 22:22:42 |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 26/08/2016 : 07:13:35
|
Devi fissare un tempo massimo di attesa del prossimo magnete , In pratica il primo magnete che passa avvia il motore e per mantenere acceso il motore ogni X tempo Max deve sentire un'altro impulso. Questa sera se la famiglia non mi assorbe ti butto giu' qualcosa. Se funziona poi vediamo di capire il senso di rotazione.
Ciao Imer |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 26/08/2016 : 08:10:45
|
colto da un mometno di estro:
const boolean attivazione = LOW; // puo avere valore HIGH o LOW a seconda se si vuol leggere quando passa il magnete (low) o rimane inattivo (high) const byte potenziometro = 10; // pin a cui collegare il potenziometro const byte sensore_1 = 11; // pin ingresso sensore di HALL const byte test = 13; // il led presente su arduino si accende ad ogni passaggio del magnete
const unsigned long T_MAX = 500000 ; // espresso in microSecondi adesso attende 0.5 Sec da tarare in funzione del numero di magneti unsigned long time; // salva nella variabile time il tempo che il magnete tiene attivo il sensore (attivazione = LOW)
void setup() { Serial.begin(9600); // abilita l'uso della seriale per il debug a soft OK lo si puo eliminare pinMode(potenziometro, OUTPUT); // configura i pin pinMode(sensore_1, OUTPUT); pinMode (test, OUTPUT); }
void loop() { time = pulseIn(sensore_1, attivazione, T_MAX); // attende il passaggio del magnete per 0.5 Sec se non passa pone temp = 0 si attiva per segnale basso Serial.println(time); // a il valore del tempo a soft OK lo si puo eliminare if (time == 0) { // se time è uguale 0 digitalWrite(potenziometro, LOW); // toglie tensione al potenziometro digitalWrite(test, LOW); // spegne il led } if (time >= T_MAX) { // se time è maggiore o uguale a T_MAX digitalWrite(potenziometro, HIGH); // da alimentazione al potenziometro digitalWrite(test, HIGH); // accende il led } }
per vedere I dati usi il monitor seriale presente nella ide di arduino. per calcolare il tempo o si fa 2 calcoli sull avelocita periferica minima del magnete e con quale angolo viene sentito il magnete, o piu' semplicemente alzi la ruota posterior e poi pedali e vedi sul monitor il valore che vuoi impostare come T_MAX. Spero di essere stato chiaro.
Ciao IMer
|
|
|
blindo7
Utente Master
Lazio
4056 Messaggi |
Inserito il - 26/08/2016 : 11:22:03
|
peccato che non vi capisco se può aiutarvi cercando gas legalizer ci sono schemi sviluppati da altri utenti dai transistor a pic programmabili, abilita il gas solo pedalando,e montando in uscita un partitore resistivo invece del gas,crea un ingresso pas su centralina sprovvista
i sensori da movimento centrale 5-6 magneti hanno un solo sensore che credo cambi forma d'onda in base al senso di rotazione e la centralina interpreta il movimento,quelli a due sensori 10-12 magneti hanno lo stesso funzionamento ma si attivano più rapidamente ciao! |
www.enerlab.it |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 26/08/2016 : 12:24:09
|
Grazie blindo7 non ne conoscevo neppure l'esistenza ,vado a cercare......
Ciao Imer |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
|
blindo7
Utente Master
Lazio
4056 Messaggi |
Inserito il - 26/08/2016 : 12:44:54
|
Mille grazie Imer! ho il kit arduino e il libro ma nn cho la testa |
www.enerlab.it |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 26/08/2016 : 17:24:34
|
ho fatto un errore nel soft !
@washer l'avevo scritto al volo e con il copia incolla ho sbagliato: setup corretto:
void setup() { Serial.begin(9600); // abilita l'uso della seriale per il debug a soft OK lo si può eliminare pinMode(potenziometro, OUTPUT); // configura i pin pinMode(sensore_1, INPUT); // corretta la configurazione da OUTPUT a INPUT pinMode (test, OUTPUT); }
@blindo7 guarda che non sono neppure io un fenomeno , ma è di una semplicità disarmante.
Ciao Imer |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 27/08/2016 : 00:13:24
|
Continuerei volentieri su Arduino, senza fretta: nella necessità di usare la bici nel we, ho arrangiato un interruttore che apre "brake" solo se la catena è in tiro.
pulseIn è la funzione che cercavo! Grazie Imer! Capisco anche 'byte' al posto di 'int'. Il doppio 'if' invece è una svista o si fa così?
Bisognerà affrontare in discorso del senso di rotazione. Come?
Al proposito la discussione linkata (grazie Blindo7) non è esplicita, e quel codice esadecimale ( cos'è? Assembler?) mi è oscuro. |
Senti che musica! ( Tex Willer ) |
|
|
romariu
Utente Attivo
Sardegna
510 Messaggi |
Inserito il - 27/08/2016 : 16:11:56
|
Se monti due sensori(chiamiamoli S1 e S2) come suggerito da Imer avrai in un senso di rotazione questa sequenza: pausa lunga S1 pausa corta S2 pausa lunga etc. nell'altro senso di rotazione: pausa lunga S2 pausa corta S1 pausa lunga etc.
Dove la pausa lunga dipende dalla distanza tra i magneti, mentre la pausa corta dipende dalla distanza tra i sensori.
|
BIPA DA PESCA - ebike for fishing http://www.jobike.it/forum/topic.asp?TOPIC_ID=33948 |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 28/08/2016 : 10:04:05
|
Il doppio if è una scelta puoi anche usare else , ma preferisco non lasciare condizioni esplicite , ho già avuto brutte scoperte.
Puoi anche scriverlo cosi:
void loop() { time = pulseIn(sensore_1, attivazione, T_MAX); // attende il passaggio del magnete per 0.5 Sec se non passa pone temp = 0 si attiva per segnale basso Serial.println(time); // a il valore del tempo a soft OK lo si puo eliminare
if (time >= T_MAX) { // se time è maggiore o uguale a T_MAX digitalWrite(potenziometro, HIGH); // da alimentazione al potenziometro digitalWrite(test, HIGH); // accende il led } else { digitalWrite(potenziometro, LOW); // toglie tensione al potenziometro digitalWrite(test, LOW); // spegne il led
} } Per il senso di rotazione giusto quello che dice romariu, Io pensavo che con il primo sensore di abilitare un "timer" dove aspettava un certo tempo e doveva avere il secondo impulso, per capire il senso di rotazione , ma c'è un giochetto con gli angoli da spiegare e devo fare un disegno. Pensavo che come prima battuta ti accontentavi di far funzionare la bici e poi passare alla messa a punto.
Si quello di Blindo7 è il file esadecimale da caricare direttamente sulla pic cairchi e sei a posto fatto e finito. Le pic di quella famiglia le conosco , ma sono pigro ....l'assembler mi sta antipatico lo uso solo in caso di disperazione. Ciao IMer
|
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 28/08/2016 : 17:35:29
|
Grazie Imer, la bici ha fatto una 70'ina di km con questo ennesimo rocchetto sulla trasmissione:
Non ho fretta e posso usare il mezzo con meno patema da paletta.
|
Senti che musica! ( Tex Willer ) |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 28/08/2016 : 17:39:06
|
Così?
const byte potenziometro = 10; // pin a cui collegare il potenziometro
const byte sensore_1 = 11; // pin ingresso sensore_1 di HALL
const byte sensore_2 = 12; // pin ingresso sensore_2 di HALL
unsigned long istante0 = 0;
unsigned long istante1 = 0;
unsigned long istante2 = 0;
unsigned long istante3 = 0;
void setup() {
pinMode(potenziometro, OUTPUT); // configura i pin
pinMode(sensore_1, INPUT);
pinMode(sensore_2, INPUT);
}
void loop() {
inizio: //label
istante0 = millis(); // assegna a istante0 il tempo trascorso
while (sensore_1 == HIGH or millis() - istante0 > 1000){ // attende che un magnete porti low il sensore 1 o che trascorra 1 sec senza che avvenga
}
if (millis() - istante0 > 1000) goto inizio; // se si è atteso più di un secondo, si torna a inizio
istante1 = millis(); // assegna a istante1 il tempo trascorso
while (sensore_2 == HIGH or millis() - istante1 > 1000){ // attende che un magnete porti low sensore 2 o che trascorra 1 sec senza che avvenga
}
if (millis() - istante1 > 1000) goto inizio; // se si è atteso più di un secondo, si torna a inizio
istante2 = millis(); // assegna a istante2 il tempo trascorso
while (sensore_1 == HIGH or millis() - istante2 > 1000){ // attende che un magnete porti low sensore 1 o che trascorra 1 sec senza che avvenga
}
if (millis() - istante2 > 1000) goto inizio; // se si è atteso più di un secondo, si torna a inizio
istante3 = millis(); // assegna a istante3 il tempo trascorso
if (istante3 - istante2 < istante2 - istante1) digitalWrite(potenziometro,LOW);
else digitalWrite(potenziometro,HIGH);
} |
Senti che musica! ( Tex Willer ) |
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 28/08/2016 : 17:59:35
|
ops, no, non si ferma più ... ci vuole qualche digitalWrite LOW in più .. |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 28/08/2016 : 20:18:20
|
circa meno quasi. or si scrive || Mai usare goto in c++ Comunque vedo che ti impegni !!
non sono sul pc con la ide di arduino, cerco di spiegarmi.
Allora ammettiamo che usi 4 magneti posti a 90° tra loro , i due sensori devono essere messi ad un angolo inferiore di 45° (meno della meta dell'angolo tra magneti). Il magnete passa sul primo sensore il tempo che me lo mantiene basso lo memorizzo, sapendo per quanti gradi rimane impegnato il magnete sul sensore posso stimare quanto tempo ci mette ad arrivare sul secondo ,ovviamente con un certa tolleranza perché posso rallentare o accelerare la pedalata. Se ci arriva vuol dire che pedalo nel verso giusto altrimenti spegne, può anche darsi che si riescano a mettere i sensori cosi vicini che il magnete riesca ad attivare il primo poi il primo + secondo poi disattiva il primo e poi il secondo , in questo caso non serve neppure il controllo dei tempi. Bisogna provare a montarli e vedere come si comportano.
Ciao IMer
|
|
|
washer
Utente Medio
212 Messaggi |
Inserito il - 28/08/2016 : 20:55:51
|
OK
| Imer ha scritto:
Mai usare goto in c++
|
Perchè?
| Imer ha scritto:
.. in questo caso non serve neppure il controllo dei tempi.
|
Sarebbe un a gran cosa ...
Procedo ... |
Senti che musica! ( Tex Willer ) |
|
|
Imer
Utente Medio
Piemonte
455 Messaggi |
Inserito il - 29/08/2016 : 18:03:46
|
Il goto non si usa perché rimane più' lineare seguire il codice senza cercare i salti, e poi perché ogni tanto salta dove gli pare.
Quello senza calcolare il tempo dovrebbe essere qualcosa del genere, ma non sono sicuro di aver contemplato tutte le possibilità. Dovrei avere un momento e simulare i sensori per capire se non ho scritto cazzate.
/* Versione senza controllo tempo tra sensori il magnete deve riuscire a portare bassi i due sensori assieme*/
/* * magnete
1 1 sensori
*
0 1
*
0 0
* 1 0
*
1 1
*/
const byte potenziometro = 10; // pin a cui collegare il potenziometro
const byte sensore_1 = 11; // pin ingresso sensore di HALL il primo ad essere interessato dal magnete se rotazione corretta
const byte sensore_0 = 12; // pin ingresso sensore di HALL
const byte test = 13; // il led presente su arduino si accende ad ogni passaggio del magnete
const unsigned long T_MAX = 500 ; // espresso in milliSecondi adesso attende 0.5 Sec da tarare in funzione del numero di magneti determina il numero minimo di pedalate
// piu' è alto e maggiore è il tempo prima che si ferma il motore quando smetto di pedalare
unsigned long timer = 0; // salva nella variabile timer il tempo che il magnete tiene attivo il sensore
void setup() {
Serial.begin(9600); // abilita l'uso della seriale per il debug a soft OK lo si puo eliminare
pinMode(potenziometro, OUTPUT); // configura i pin
pinMode (test, OUTPUT);
pinMode(sensore_1, INPUT);
pinMode(sensore_0, INPUT);
}
void loop() {
if (millis() - timer >= T_MAX ) { // verifico che il timer venga ricaricato
digitalWrite(potenziometro, LOW);
digitalWrite(test, LOW);
while (digitalRead(sensore_1) == LOW && digitalRead(sensore_0) == HIGH ) { // in attesa del movimento pedali corretto
}
}
while (digitalRead(sensore_1) == LOW && digitalRead(sensore_0) == LOW ) { // verifica l'avvanzamento nel senso corretto
if (millis() - timer >= T_MAX ) {
digitalWrite(potenziometro, LOW);
digitalWrite(test, LOW);
}
}
while (digitalRead(sensore_1) == HIGH && digitalRead(sensore_0) == LOW ) { // finisce il movimento corretto attivo il motore
}
timer = millis();
digitalWrite(potenziometro, HIGH);
digitalWrite(test, HIGH);
} |
|
|
Discussione |
|