Forum Indipendente Biciclette Elettriche, Pieghevoli e Utility

Forum Indipendente Biciclette Elettriche, Pieghevoli e Utility
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | Links | FAQ |Ricerca Avanzata | le biciclette provate da noi ] mago job
Ultime novità: * per evitare lo spam, l'iscrizione attende l'approvazione degli Amministratori, un po' di pazienza per favore

attenzione che la mail automatica di conferma iscrizione non sempre funziona, provare ad accedere lo stesso o scrivere in amministrazione

* per comunicazioni scrivere a postmaster@jobike.it o contattare uno degli amministratori (job o pixbuster)

* qui tutti i modelli testati da noi a confronto

 Tutti i Forum
 Discussioni
 Kit e fai da te
 Amperometro con Arduino

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Insert YouTube
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
   

V I S U A L I Z Z A    D I S C U S S I O N E
ccriss Inserito il - 02/12/2011 : 09:42:42
Ciao a tutti, orgoglioso del mio lavoretto, volevo condividere quanto fatto con voi sicuro di un vostro apprezzamento

Si tratta di una applicazione sviluppata con Arduino che consente di
A) Avere indicazione di Volt (su LCD=V) , Temperatura esterna (su LCD=T) temperatura batteria (su LCD=TB), consumo ampere istantaneo (seconda riga su LCD=A) e consumo totale viaggio AH (seconda riga su LCD=AH).
B) Di poter loggare i dati collegando via USB ARDU ad un PC. Nel mio caso ho sviluppato l'applicazione in Java e scrive su file TXT i dati rilevati. Non ho ancora potuto fare una prova sullo scooter, ma ho avuto modo di verificare il tutto nella simulazione da casa..

Vi allego un video del display dei dati fatto stamane

http://www.youtube.com/watch?v=zzJGZ5NogDs

Spero vi piaccia!!


50   U L T I M E    R I S P O S T E    (in alto le più recenti)
ccriss Inserito il - 29/08/2012 : 10:58:24
L'idea compromesso potrebbe essere questa: l'unità master invia il livello di soglia cui far scattare il bilanciamento, la soglia viene registrata dalle unita locali su eeprom (es.: 3.6V per le LiFePO4).. In questo modo riesci a parametrizzare i valori e lasciare il lavoro di bilanciamento a livello locale, se un domani vuoi usare le stesse unità locali per bilanciare delle LICO metti un valore piu alto....
cunz89 Inserito il - 29/08/2012 : 09:40:41
Visto che ho già fatto qualche riflessione anche su questo punto: puoi attaccare come dici i bilanciatori oltre una certa soglia, ma per realizzare un algoritmo più intelligente dovrebbe essere il master che, valutato lo sbilanciamento, ha la possibilità di attivare in qualunque momento il bilanciatore di una qualunque delle celle.

Iniziando a bilanciare sin dall'inizio della carica (o dopo il raggiungimento di un certo stato di carica, questo è da vedere sul campo e dipende anche da quanto sono selezionate le celle) è molto più probabile che si riesca ad effettuare tutta la ricarica senza doverla mai fermare per sovratensione.

Anche per un discorso di flessibilità, in questo modo riprogrammando solo il master è possibile implementare qualunque strategia di carica.
ccriss Inserito il - 29/08/2012 : 09:18:33
Grazie Cunz per i suggerimenti, che dire, essendo abituato alla programmazione senza tenere conto dei byte di RAM o Flash e delle performance sulle conversioni sui tipi di dati ci sono cascato come un bambino..
Diciamo che sono esperienze che poi servono ad evitare di commettere nuovamente gli stessi errori:-)

Io pensavo di far fare certi calcoli anche alle unità "locali" alla cella per attaccare la resistenza di shunt ad un certo voltaggio, non volevo fosse l'unità master per una questione di autonomia (es: unità master staccata e/o non funzionante non inibisce il processo di carica delle batterie, cosa che per me è tipica, Arduino è spento quando carico).
cunz89 Inserito il - 29/08/2012 : 09:05:06
ccriss ha scritto:

Poi il Attiny85 non ha l'Uart, quindi ho dovuto recuperare in giro la gestione seriale via sw, inoltre ci sono problemi con l'IDE, quello di Arduino va in crash se il programma supera 4k:-(

Fossi in te utilizzerei direttamente AVRStudio...

ccriss ha scritto:

Poi come se non bastasse se uso una istruzione di conversione da double a string per inviarla su seriale perdo in un colpo solo altri 4K di memoria, Attiny ne ha 8K quindi fine del divertimento.

In progetti del genere la virgola mobile è assolutamente bandita, sia per lo spreco di memoria che (soprattutto) per problemi di performance.
Sono sicuro che puoi fare a meno di qualunque cosa più complessa di un integer, e puoi fare a meno anche di inviare tutto un numero come stringa...

Aiutino: se vuoi dire 3,203V lo puoi anche dire come 3203mV, che invece è intero e si trasferisce in meno di 2 byte
Questo solo se vuoi che la misura sia leggibile ad un essere umano, altrimenti puoi comprimere ancora di più inviando direttamente quello che legge l'ADC e lasciando fare il resto al master, che dovrebbe essere dotato di una "calcolatrice migliore"

Quando poi avrai affinato il resto puoi aggiungere una ulteriore compressione, sapendo che il valore di tensione non sarà mai (ad esempio) inferiore ai 2V e superiore a 4.
Questo restringe di molto il range, e di conseguenza la dimensione dei dati a parità di risoluzione.
jumpjack Inserito il - 28/08/2012 : 21:52:25
A me interessa più graficare che osservare in tempo reale, per questo voglio costruimi un "battery shield" per conto mio. :-)
ccriss Inserito il - 28/08/2012 : 21:51:04
cunz89 ha scritto:
Ci sono alternative autocostruite, nel tempo ho sparso diversi schemi


Infatti e sto provando a metterne in pratica qualcuno:-)

Colgo l'occasione per un rapido aggiornamento, sono riuscito lato sw a fare parlare 2 Arduini su un protocollo di comunicazione "mio" (Es:dammi voltaggio, vai ni stand by..), ho ancora problemi con Arduino vs Attiny85...

Ammetto poi Cunz che ultimamente tra caldo,ferie e pigrizia mi sono un po' fermato, forse il periodo migliore per fare queste cose è "nel freddo e ne buio del triste inverno".
Poi il Attiny85 non ha l'Uart, quindi ho dovuto recuperare in giro la gestione seriale via sw, inoltre ci sono problemi con l'IDE, quello di Arduino va in crash se il programma supera 4k:-( Insomma è un po' faticoso.. Pensavo quasi quasi di programmare direttamente un altro Atmega 328, almeno non mi fa impazzire troppo.. Poi come se non bastasse se uso una istruzione di conversione da double a string per inviarla su seriale perdo in un colpo solo altri 4K di memoria, Attiny ne ha 8K quindi fine del divertimento. Con il minimo set di istruzioni per leggere il voltaggio sono arrivato al limite, Cunz vedi controindicazioni grosse a passare al Atmega 328 invece del Attiny? Ok il consumo cresce un po'...
pippo22p Inserito il - 28/08/2012 : 21:25:21
per il monitoraggio della tensione delle celle io ho usato 3 volmetri acquistati su hobbyking :http://www.hobbyking.com/hobbyking/store/__8980__GT_Power_Voltage_Analyzer_3_in_1_2_6S.html
con il seguente risultato ("per chi si accontenta"):

Immagine:

115,8 KB

batteria lifep04 48v 24ah (32 celle 38140s)
collegate ai voltmetri modificando un cavo stampante (in parallelo al bms)
isd88 Inserito il - 28/08/2012 : 16:54:58
ottimo, pensavo fossero multiplexer! comunque ho visto il video veramente fantastico, certo piu che la eeprom userei una scheda sd che mi pare anche facilmente interfacciabile, resta solo da vedere se ho a disposizione i pin digitali che mi servono
cunz89 Inserito il - 28/08/2012 : 16:47:49
L'integrato di cui parla Jumpjack serve proprio a questo!
Ci sono alternative autocostruite, nel tempo ho sparso diversi schemi più o meno validi in giro per il forum...
isd88 Inserito il - 28/08/2012 : 16:42:31
io da tempo sto progettando qualcosa del genere, e mi sono scontrato contro i problemi tipici dei sensori di arduino quali rumore di fondo etc etc gia da vecchi progetti quindi almeno so de che male se more :D

Il controllo delle celle ancora non lo implemento perche vado al piombo, ma mi interessa. Giusto una domandina: come fate a misurare la tensione di ogni singola cella se arduino puo misurare solo rispetto alla massa?
cunz89 Inserito il - 28/08/2012 : 16:28:49
40?
jumpjack Inserito il - 28/08/2012 : 16:18:36
Da 38 non li trovo, solo fino a 28!
cunz89 Inserito il - 28/08/2012 : 14:51:53
Cerca un adattatore TSSOP-DIP, poi tanto flussante, treccia per correggere gli errori, mano ferma, e soprattutto tanta pazienza
jumpjack Inserito il - 28/08/2012 : 14:40:26
Ah,12? E' che ho preso altri 4 chip diversi e faccio confusione... questo pero' mi pare il migliore.
Ma ho già provato a saldare a mano i piedini ed è un macello.
http://jumpjack.wordpress.com/2012/08/20/componenti-per-monitoraggio-batterie-al-litio/
cunz89 Inserito il - 28/08/2012 : 14:16:32
12 celle ognuno!
Sembra buono sulla carta, e richiede poca componentistica aggiuntiva.
Il TSSOP è una dimensione ancora accettabile per la saldatura a mano
jumpjack Inserito il - 28/08/2012 : 13:57:53
Ho rimediato non uno ma 3 integrati MAX11068, ognuno in grado di monitorare ben DIECI celle al litio! E li ho pure avuti gratis come "campioni gratuiti".
Se riesco a collegarli a una arduino siamo a cavallo! (comunicano tramite I2C) Ma hanno dei piedini microminuscoli a montaggio superficiale, sarà dura.
jumpjack Inserito il - 31/05/2012 : 09:01:54
devo ridimensionare le mie mire, sembra che monitorare 16 celle sia elettronicamente complicatissimo... a meno di riuscire a rimediare un LTC6803, nel qual caso tutto sarebbe più semplice e interessante.
alex_audi Inserito il - 24/05/2012 : 17:43:50
è perfetto considerando che risparmiamo 100 euro di cycle analyst almeno 50 euro di buzzers
con in piu la telemetria su file txt... il team ferrari ci fa una pippa !!!!!!!!!!!!!!!
jumpjack Inserito il - 24/05/2012 : 12:53:08

Se riesci a fare un sistema compatto che scrive i dati delle singole celle e suona quando c'è un anomalia sulla
singola sei arrivato.. e io te lo compro subito!!!!!!!!

Un cosino 5x5x5 centimetri del costo di 40 euro è abbastanza compatto? :-)
Memorizzerebbe i dati su una SD card da qualche GB per consultarli dopo, ma in tempo reale suonerebbe un potente cicalino in caso di problemi.
Ho tutti i pezzi pronti, devo solo trovare il tempo di assemblarli, collegare i fili alle mie 32 celle... e scrivere il SW! (non lo troverò mai... )
alex_audi Inserito il - 24/05/2012 : 11:21:35
Analisi continua delle celle nel tempo e sottocarico questa è sicuramente la soluzione a tutto.
Solo che devi analizzare le celle come hai fatto nell altro post analizzare il pacco è relativamente inutile.
Se riesci a fare un sistema compatto che scrive i dati delle singole celle e suona quando c'è un anomalia sulla
singola sei arrivato.. e io te lo compro subito!!!!!!!!
jumpjack Inserito il - 24/05/2012 : 09:56:26
Ho scoperto due aggeggini molto interessanti: OpenLog e un multiplexer a 16 ingressi analogici:

http://www.futurashop.it/allegato/7300-OPENLOG.asp?L2=DATA%20LOGGER&L1=CONNETTIVIT%C0/NETWORKING&L3=&cd=7300%2DOPENLOG&nVt=&d=27,50#sopra
http://www.futurashop.it/allegato/7300-16ADMD.asp?L2=ELETTRONICA&L1=ROBOTICA&L3=VARIE&cd=7300%2D16ADMD&nVt=&d=5,50#sopra

Li metti insieme e viene fuori un bel multilogger standalone!
allelom Inserito il - 25/04/2012 : 17:20:26
Complimenti, sei un genio, il prossimo inverno studierò la tua applicazione per la mia bici, non sono elettronico, ma occorre imparare un pò di tutto.
Saluti
Alessandro
ccriss Inserito il - 25/04/2012 : 15:05:53
E con questa ultima "fatica" credo di aver completato la descrizione del sistema hobbistico del mio scooter..

Ho fatto un breve video che spiega piu’ chiaramente come funziona l’interfaccia tra Arduino ed il PC, perche’ va bene leggere i dati istantanei quando sei in giro, ma se vuoi capire come si comporta lo scooter (o la bici) nel tempo devi poter scrivere i dati da qualche parte per poi analizzarli. La soluzione che ho usato è quella di collegare il PC ad Arduino per poi leggere ogni secondo i valori dei sensori.

L’applicazione , attraverso la porta seriale, resta in ascolto ed appena Arduino invia dei dati li cattura per poi scriverli su disco. Questa soluzione ha l’handicap di doversi portare dietro un portatile e di mantenere attiva la connessione via USB su Arduino, ammetto che non è il massimo della comodità , ma per la prima versione messa in pista è andata piu’ che bene

ccriss Inserito il - 16/04/2012 : 15:20:07
Ciao a tutti, dato che tra un po' passero' Arduino alla versione 2.0, ho pensato di memorizzare questo video come versione finale della 1.0. Nel video viene descritto a grandi linee come funziona il sistema , ma a scooter fermo, nel vecchio video non si capiva molto visto che l'ho fatto in corsa!!
In sintesi nel video potrete vedere:
- Dove ho messo il microprocessore ed i suoi collegamenti
- L’accensione ed il messaggio di benvenuto “Ccris”!!!
- Il funzionamento dei sensori e la corrispondente visualizzazione su LCD
- L’utilizzo dei pulsanti per cambiare il layout su LCD
- L’utilizzo del pulsante per azzerare i valori scritti su Eprom



La versione 2.0, se tutto va bene avrebbe le seguenti ambizioni:
- Si collegherà via bluetooth

- Potrà rilevare le informazioni con maggiore accuratezza (oggi a 10 bit con la nuova versione sarà a 12bit)

- Leggera' anche il voltaggio di tutte le 20 celle del pacco batteria e lo farà con letture differenziate (positivo e massa separate) e senza partitori resistivi, quindi mi aspetto una precisione davvero buona

Ovviamente tutti i dati potranno essere scritti su un PC che supporta il bluetooth, in seguito, ma tutto da verificare, potrebbe essere possibile anche su cellulare Android!!

P.S.: Come potete vedere il tutto è stato fatto in modalità hobbista, quindi vi prego di non commentare quanto è brutto esteticamente!!
ccriss Inserito il - 17/02/2012 : 15:56:46
Ad oggi le salite non sono mai state un problema, considera che sono in pianura padana, quindi le salite che ho potuto testare sono le classiche per box interrati. Non so proprio che pendenza possa superare, ma penso che non abbia problemi a farle, piuttosto la domanda è per quanto tempo possa tenerle. Una salita da box (credo sia un 20°) a 15Km/H mi segna un consumo da 60/70A, il motore surriscalderebbe a mantenerla per minuti
jumpjack Inserito il - 17/02/2012 : 08:57:22
E in salita come se la cava? hai mai fatto misure sulla pendenza superabile? 2kW per 100 kg dovrebbero "arrampicarsi" bene!
ccriss Inserito il - 14/02/2012 : 16:14:54
Jump, lo scooter pesa circa indicativamente 100Kg (le litio lo hanno alleggerito) ed ha una potenza di 2KW.
Ha 18 celle per complessivi 57V nominali da 40AH e velocità max intorno ai 63Km/h (solo d'estate, d'inverno arriva a 60)
jumpjack Inserito il - 14/02/2012 : 13:17:42
Interessantissimo questo thread.
Prima o poi anch'io trovero' il tempo di attaccare arduino allo scooter... (il fatto è che lavorare allo scooter con cappotto e guanti mi scoccia assai!). Nel frattempo, mi limiterò a chiacchierare. Sarebbe sicuramente molto interessante fare dei grafici anche rispetto alla pendenza della strada, per capire quanto effettivamente aumenta il consumo con la pendenza, mantenendo una velocità costante: basta un telefono nokia con GPS e il programma SportsTracker, che poi produce file da mettere su GoogleEarth, dal quale poi si può ricavare il profilo altimetrico del percorso (ma ho trovato anche un sito, che ora non ricordo, che fornisce come output le altimetrie inserendo un percorso GPS).

CCriss, ma il tuo scooter quanto pesa, e che potenza ha? (magari me l'hai detto in altri thread/forum ma non mi ricordo...)
ccriss Inserito il - 16/01/2012 : 23:28:25
Beh, quando inizi se hai bisogno di info sai che puoi contare su di me, se non ci aiutiamo tra noi che senso ha il forum!!
Sono sicuro che grazie al forum BC1 diventerà un'astronave
pghori Inserito il - 16/01/2012 : 22:57:47
Grande ccriss hai fatto un lavorone, vorrei implementare anche sulla mia BC1 qualcosa del genere. Tienici informati!
ccriss Inserito il - 16/01/2012 : 21:55:06
In sostanza il suggerimento è: prima di dare fondo alle batterie con scariche violente sarebbe meglio aspettare (almeno nel mio caso) 5/8 min cosi'da avere temperature piu' decenti ed evitare che le batterie vadano troppo basse di voltaggio. Penso che le Ping si comportino in maniera simile visto che non sono tante diverse dalle mie..

Non so le headway come si comportano, ma sono sicuro molto meglio delle mie visto che consentirebbero (almeno sulla carta) scariche continuative da 10C, quindi il freddo pur aumentando la resistenza interna non dovrebbe farle soffrire quanto le mie Thundersky
ccriss Inserito il - 16/01/2012 : 21:52:23
Ed ecco qualche risultato interessante circa le temperature...
Qui trovate due log distinti fatti uno Sabato 14/1 ed uno oggi 16/1 dove faceva un sacco freddo (-2°)!!
L'asse x è sempre in secondi ed il secondo Log parte da base 11Ah consumati perche' è il ritorno da lavoro (adesso arduino memorizza i consumi quindi anche spegnendolo ricorda gli AH consumati su trip e KM)

E' interessante vedere la differenza di temperatura durante il percorso

Questo è del 14/1
Immagine:

122,62 KB

Questo è di oggi 16/1
Immagine:

109,55 KB

cunz89 Inserito il - 03/01/2012 : 22:35:59
Suppongo che le variazioni di temperatura del pacco richiedano almeno qualche secondo, quindi il segnale utile non avrà sicuramente componenti a frequenze elevate!
Ti consiglio di filtrare più in basso che puoi, anche pochi Hertz, non darà alcun fastidio alla lettura, anzi...

ccriss Inserito il - 03/01/2012 : 21:05:21
Sono felice finalmente!

Ho applicato il condensatore+resistenza (modalità RC) , questa volta tra il segnale d'uscita e GND ed è efficace, finalmente non vedo le temperature andare dove vogliono loro. Ho messo una resistenza da 100 Ohm e un condensatore da 100nF, con questi valori dovrebbe far passare frequenze di segnale comunque piuttosto alte senza dare fastidio alle letture di Ardu, corretto?

pghori Inserito il - 03/01/2012 : 16:26:45
quoto Cunz89, un cavetto schermato è un buon consiglio
cunz89 Inserito il - 03/01/2012 : 13:51:34
Se il sensore di temperatura è posizionato molto lontano dall'arduino, postresti provare (se non l'hai già fatto):
-Sostituire il condensatore che hai messo con un filtro RC con una frequenza di taglio molto bassa (la temperatura non varia velocemente)
-Cavi del sensore posizionati più lontani possibile da quelli di motore e di alimentazione del controller
-Cavo del sensore schermato con una calza metallica

Il problema dovrebbe scomparire, in caso contrario posta qualche grafico anche della temperatura, magari è possibile escludere via software i valori sballati
ccriss Inserito il - 03/01/2012 : 10:35:07
Ciao a tutti, mi permetto di aggiungere un ulteriore grafico che finalmente tiene conto anche della velocità per comprendere meglio le forze in gioco.
Dal log ho scoperto che il mio sgorbietto di scooter raggiunge i 50Km/h in poco piu' di 8 sec., pensavo peggio.

Resta invece ancora presente il problema della lettura delle temperature, pur avendo aggiunto dei condensatori ceramici da 0,1 micro tra i 5v e il gnd del sensore, le letture quando sono fermo sono corrette,mentre quando vado in giro sballano anche di 10°. Leggendo in giro ho notato che alcuni lamentano lo stesso problema per via del fatto che le masse di Ardu sono tutte in comune e che il motore potrebbe creare disturbi.
Provero' ad aggiungere un altro condensatore sul segnale di lettura e GND nella speranza che possa filtrare questi disturbi, non essendo molto pratico di elettronica non saprei cos'altro fare, se qualcuno ha dei suggerimenti gli sarei molto grato!!


Immagine:

108,17 KB
McGyver Inserito il - 11/12/2011 : 21:41:02
per districarmi nello scrivere e leggere nella eeprom integrata in arduino ho rumato in google fino a che non ho trovato questo:

http://www.arduino.cc/playground/Code/EEPROMWriteAnything

il difficile e' che per scriveree leggere un singolo byte ci sono le funzioni gia' pronte ma per poter mettere lei long o dei float la cosa diventa complicata. Guarda il link ma stai attento che ho notato dei comportamenti strani nell'uso della data structure che devi creare per far funzionare il tutto.
Ci ho litigato non poco stanotte e non so se ero stanco io o quelle maledette variabili si facevano i caXXi prori.
Comunque se prendi paro paro il mio codice funziona bene, al massimo aggiusta o aggiungi quello che ti serve.
Okkio a non fare scritture continue tipo una al secondo che 100.000 secondi sono pochini (anche se qualcuno ha fuso verso il milione).

Buono smanetto.
ccriss Inserito il - 11/12/2011 : 20:56:24
Che bel lavoro McGyver, ho letto il thread e devo dire che mi sono entusiasmato ancora di piu'..
Poi grazie per la citazione, troppo gentile!

Tornando ad Ardu, ho scaricato il file header per scrivere la EEPROM, avresti anche un sample per utilizzarlo o indirizzarmi a qualche sito se c'e' che la descrive in dettaglio?
In seguito, come hai già fatto tu, vorrei scrivere qualche dato su EEPRROM. Anch'io ho bisogno di calcolare il parziale KM percorsi e AH consumati, poi come si dice l'appetito vien mangiando

Forza Ardu


McGyver Inserito il - 11/12/2011 : 19:01:03
Mi sono dimenticato di specificare che la eeprom e' auella integrata nell'arduino, non serve collegare nulla. Se volete sperimentare ci vuole pochissimo.

Per chi mi aveva chiesto le foto rimando a questo topic che sto per aggiornare (appena finisco qui). http://www.jobike.it/forum/post.asp?method=Reply&TOPIC_ID=10066&FORUM_ID=15

Spero che il mio lavoro e quello di ccriss possao ispirae qualche altro elettrociclocosofaidateista con nuovi mirabolanti progetti.
McGyver Inserito il - 11/12/2011 : 12:51:28
Che nottata, ecco il codice aggiornato:

http://www.megaupload.com/?d=EQX58KJH

e questo:

http://www.megaupload.com/?d=GLTOA4VM

va messo un un tab aggiuntivo e salvato con lo sketch principale, e' il template per salvare lo stato nella eeprom interna.

ora ci sono 3 schermate con informazioni diverse ciclabili con il tasto 1 e a seconda della schermata il tasto 2 ha le seguenti funzioni: schermata principale - cambio modo di funzionamento, schermata 2 - premuto per piu' di un secondo resetta gli ah rimanenti nella batteria, schermata 3 premuto per piu' di un secondo resetta il contakm parziale.
Le informazioni salvate nella eeprom sono km totali km parziali e ah batteria rimanenti, cosi' i dati fondamentali non si perdono allo spegnimento / riaccensione del computerino. Il salvataggio avviene al reset o quando ci si ferma per piu' di 3 secondi per non esagerare con i cili di scrittura (eeprom interna data per 100.000 cicli)

ora manca il testing su strada! se q qualcuno viene in mente qualche miglioria se ne puo' parlare. oggi vedo di fare qualche foto sia al computerino che alle bipa nouve/in costruzione.

Buoni smanettamenti.
McGyver Inserito il - 10/12/2011 : 19:26:31
Che risposte rapide..... io non posso usare un hall perche' ho un geared e in discesa, muscolare etc non avrei lettura.
Per lo shunt e' una soluzione di quelle "provvisorie definitive" ma aspetto a breve un sensore tipo il tuo (ordinati 5 pezzi in cina a prezzi ridicoli) con schedina e componenti. Le foto della creatura ci sono in un trhead di qualche tempo fa ma ho appena finito di spostare tutta la mercanzia su una bici biammortizzata e la schiena ringrazia!! con lo spostamento ho finalmente messo i connettori sul cockpit e ora ho deciso di finire il software, sto implementnado 3 schermate differenti e un modo di gestione in piu' del pas, oltre ad odometro con registrazione continua su eeprom e un sistema di contachilometri parziale che resettato riporta anche un valore a scalare degi Ah della batteria a full....
maggiori aggiornamenti a breve.

E sto anche sviluppando un triciclo recumbent tadpole elettrificato triammortizzato che ...... postero' qualcosa appena il prototipo sara' pedalabile.
buon lavoro.
ccriss Inserito il - 10/12/2011 : 18:57:26
Questo è il codice che ho usato per misurare la velocità da hall sensor.
Questa condizione serve ad individuare quando il sensore è a 5V, altrimenti la considero OFF
if (sensvalgiri > 3)


//variabili x conta KM
int pincontgiri=5; // legge segnale x contagiri
int state; //the state of the input
int oldstate;
unsigned long t; //timer
unsigned long s; //samples
unsigned long c; //count
double f=0; //frequency
double cont=0;
double sensvalgiri=0;
double giricalc=0; // lettura del valore sensore di hall
// End variabili contaKM




double GetKmh()
{
// la funzione calcola il nr di giri al secondo in funzione di un ciclo di valutazione
c = 0;
t = millis(); // read time at start of sampling
for(s=0; s<1500; s++){ //take a number of samples dura circa 0,4 sec
sensvalgiri = analogRead(pincontgiri);
sensvalgiri=sensvalgiri/1023*5;
if (sensvalgiri > 3)
{
state = 1; // se il segnale analogico supera i 3V vuol dire che hall sensor è attivo
}
else
{
state = 0; // se il segnale analogico supera i 3V vuol dire che hall sensor è 0
}
if (state != oldstate){ //lo stato è cambiato:
c++; //conta il nr di cambiamenti
oldstate = state; //and reset current state
}

}
t = millis() - t; //read time at end of sampling

c = c/2; // need to divide by 2 because counter incremented on each change - two changes per cycle

f = 1000*c/t; //calcola il nr di volte che hall sensor è attivo per un secondo

// in km/h
// dove 23= nr di volte che hall sensor va a 5V
// 1.42 metri di circonferenza ruota
// il resto dei numeri serve a convertire i valori da sec a h e da metri a KM
f= (f/23*3600*1.42/1000);

return f;

}
Daniele Consolini Inserito il - 10/12/2011 : 18:52:05
Cacchiarola Mc Gyver, un nome importante!!!! Respect!
ccriss Inserito il - 10/12/2011 : 18:51:38
Complimenti MC, il mio codice è decisamente meno efficace ed ordinato, onestamente non vedevo l'ora di applicarlo che mi sono indirizzato (troppo) al risultato. Perche' non posti qualche foto della creatura?

Noto che hai anche implementato delle azioni da pulsante, wow!!

Per la lettura del consumo di corrente ho visto che usi uno shunt, se ti capita un giorno prova ad usare la componente (il ACS) che ho usato io, quello funziona con effetto HALL, quindi nessuna resistenza sul filo di potenza!! Poi la lettura ti posso assicurare è molto stabile e ben confezionata per ARDU..

Per quanto concerne il calcolo della velocità , l'ho appena finito e funziona. Mi sono agganciato ad uno dei 3 Hall sensor lato motore. Ho provato inizialmente ad usare un input digitale (in fondo su quel filo passa 0V o 5V), ma non funzionava e non avendo capito bene perche' (credo che si debba ripulire il segnale e/o eventualmente usare una resistenza di pull-up) ho usato un pin analogico e trasformato io in "onda quadra". Cosi' ho potuto evitare di mettere il magnete alla ruota per capire a che velocità vado!!

A lavoro finito sarà una grande soddisfazione


pghori Inserito il - 10/12/2011 : 18:45:23
Grande lavoro McGyver,
spero tu sia contento se lo utilizzerò come base di partenza per la mia bici.
domande:
_ avendo un motore con sensori di hall vorrei utilizzarne uno come ingresso al posto di quello del ciclocomputer, così da evitare ulteriori cablaggi, cosa ne pensi?
_ che tipo di shunt hai utilizzato, quello della centralina?
_ dove hai imparato a scrivere codice così?

A questo punto....aspetto ulteriori aggiornamenti
McGyver Inserito il - 10/12/2011 : 17:28:36
A proposito di arduino, non avevo piu' postato il codice del mio progetto "centralina aggiuntiva" che fa da gestione pas ed uscita su"acceleratore" della centralina originale, amperometro, contachilometri, conta Ahr e Ahr per km su un display 4x20. ora sto aggiungendo odometro e set di batteria piena sulla eeprom integrata per avere autonomia residua ed eliminare il ciclocomputer.

CODE------
// Pedelec computer, AndreaM. Bonino - 2011.
// include the library code:
#include <LiquidCrystal.h>

// inizializzazione lcd
LiquidCrystal lcd( 7, 8, 9, 10, 11, 12);

// definizione i/o
int reedPin = 3; // reed ruota per velocita'
int outPin = 13; // Arduino LED
int pasinPin = 2; // ingresso segnale pas
int puls1 = 0; // ingresso pulsante 1
int puls2 = 1; // ingresso pulsante 2
int vbattPin = 0; // ingresso partitore tensione batteria
int ibattPin = 1; // ingresso shunt corrente
int accoutPin = 5; // uscita acceleratore

// variablili fondamentali
int modo = 2;
unsigned long accelout = 900;
unsigned long pasvel = 0.0;
float velocita = 0.0;
float ahr = 0.0;
float ibatt = 0.0;
float vbatt = 0.0;

// variablili di servizio
unsigned long tpulsa = 0;
unsigned long tahr = 0;
unsigned long tlcdref = 0;
int pulsu = 0;
int pulgiu = 0;

// variabili interrupt
volatile unsigned long statoh = 0;
volatile unsigned long statoho = 0;
volatile unsigned long statol = 0;
volatile boolean direzione = false;
volatile unsigned int rotazioni = 0;
volatile unsigned long treed = 0;
volatile unsigned long treedo = 0;
volatile unsigned int velocireed = 0;


void setup()
{
pinMode(reedPin, INPUT);
pinMode(outPin, OUTPUT);
pinMode(pasinPin, INPUT);
pinMode(puls1, INPUT);
pinMode(puls2, INPUT);
pinMode(accoutPin, OUTPUT);
lcd.begin(20, 4);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Pedelec Computer");
lcd.setCursor(2,2);
lcd.print("inizializzazione");
delay(1000);
lcdBase();
digitalWrite(reedPin,HIGH);
attachInterrupt(0,pash,CHANGE);
attachInterrupt(1,reedi,RISING);

}

void loop()
{
// calcolo velocita'
if ((millis() - treedo) > 3000) {
velocita = 0.00;
}
else
velocita = 7347.6/velocireed;

// lettura pulsanti
pulgiu = (digitalRead(puls2));
if (pulgiu == HIGH && (millis() - tpulsa) > 500) {
if (modo == 0) {
tpulsa = millis();
modo = 4 ;
}
else {
modo--;
tpulsa = millis();
}
lcdBase();
}
pulsu = (digitalRead(puls1));
if (pulsu == HIGH && (millis() - tpulsa) > 500) {
if (modo == 4) {
tpulsa = millis();
modo = 0 ;
}
else {
modo++;
tpulsa = millis();
}
lcdBase();
}
// calcolo ahr consumati
if ((millis() - tahr) > 500) {
tahr = millis();
vbatt = (analogRead(vbattPin)/13.25);
ibatt = (analogRead(ibattPin)/10.0);
ahr = ahr + (ibatt*0.000138889);
}

// conversione stato sistema in accelout
if (statoh > (millis()-1000) && (direzione == true)) {
switch (modo) {
case 0: // muscolare
accelout = 700;
break;
case 1: // carretto
if (accelout < (1700 - pasvel)) {
accelout = (accelout + 2);
}
else accelout--;
break;
case 2: // passeggiata
if (accelout < (1900 - pasvel)) {
accelout = (accelout + 4);
}
else accelout--;
break;
case 3: // ecopower
if (accelout < (2200 - pasvel)) {
accelout = (accelout + 6);
}
else accelout--;
break;
case 4: // max power
if (accelout < (2500 - pasvel)) {
accelout = (accelout + 8);
;
}
else accelout = (accelout - 10);
break;
}
}
else
if (accelout > 700) {
accelout = accelout - 10;
}
analogWrite(accoutPin,(accelout/10));
lcdRefresh();

// refresh lcd temporizati
if ((millis() - tlcdref) > 500) {
tlcdref = millis();
lcdBase();
}

}

void lcdBase()
{
lcd.setCursor(0,0);
switch (modo) {
case 0:
lcd.print("Modo Muscolare ");
break;
case 1:
lcd.print("Modo Carretto ");
break;
case 2:
lcd.print("Modo Passeggiata ");
break;
case 3:
lcd.print("Modo EcoPower ");
break;
case 4:
lcd.print("Modo MaxPower ");
break;
}
lcd.setCursor(0,1);
lcd.print("Kmh Ds ");
lcd.setCursor(0,2);
lcd.print("Bat V A ");
lcd.setCursor(0,3);
lcd.print("Ahc Ahkm ");

}

void lcdRefresh()
{
lcd.setCursor(5,1);
lcdprintD(velocita,1);
lcd.setCursor(14,1);
lcd.print(rotazioni*0.002041);
lcd.setCursor(6,2);
lcdprintD(vbatt,1);
lcd.setCursor(14,2);
lcdprintD(ibatt,1);
lcd.setCursor(5,3);
lcdprintD(ahr,2);
lcd.setCursor(15,3);
lcdprintD((ibatt/velocita),3);
}

void pash()
{
if (digitalRead(pasinPin)) {
statoho = statoh;
statoh = millis();
pasvel = (statoh - statoho);
if ((pasvel/2) > (statoh - statol)) {
direzione = true;
}
else
direzione = false;
}
else statol = millis();
return;
}

void reedi()
{
treed = millis();
velocireed = treed - treedo;
treedo = treed;
rotazioni++;
return;
}

void lcdprintD( double val, byte precision){
// prints val on a ver 0012 text lcd with number of decimal places determine by precision
// precision is a number from 0 to 6 indicating the desired decimial places
// example: printDouble( 3.1415, 2); // prints 3.14 (two decimal places)

if(val < 0.0){
lcd.print('-');
val = -val;
}

lcd.print (int(val)); //prints the int part

if( precision > 0) {
lcd.print("."); // print the decimal point
unsigned long frac;
unsigned long mult = 1;
byte padding = precision -1;
while(precision--)
mult *=10;

if(val >= 0)
frac = (val - int(val)) * mult;
else
frac = (int(val)- val ) * mult;
unsigned long frac1 = frac;
while( frac1 /= 10 )
padding--;
while( padding--)
lcd.print("0");
lcd.print(frac,DEC) ;
}
}

------CODE

Scusate la lunghezza ma cosi' lo possono leggere tutti..... SOLO USO PRIVATO!!!
ccriss Inserito il - 07/12/2011 : 10:19:53
Intanto grazie per aver apprezzato il log dati, su asse Y trovi Volt e Ampere come sospettavi..
I gradi non li ho messi nel grafico, ma se sei interessato a a vederli li trovi nel excel allegato con tutto il log dei miei 6 min di giro nel quartiere.

Penso anche io che mandare le mie batterie (che sono 40AH) a 3C sia inutile, se potessi penso le limiterei sui 2C (80A).
Una delle modifiche che voglio fare per il futuro è proprio questa , utilizzando la misura del consumo, imporre il limite modificando il voltaggio su acceleratore.
Questo potrebbe valere sia per limitare i C di scarica che per mettere in ECO mode il mezzo quando le batterie sono prossime ad esauririsi...

Daniele Consolini Inserito il - 06/12/2011 : 22:45:25
Questo lavoro ch stai facendo è davvero molto interessante!!!!
Se ho capito bene, sull'asse Y hai la corrente e la tensione della batteria no?
Parli di gradi, se fosse la temperatura della batteria credo avresti problemi, per questo li interpreto come A.
Quindi 45V e 100Ah fanno 4.5KW. Sono già un limite per le celle.

Credo tu sia uno dei primi a fare un'analisi così dettagliata del consumo istantaneo. Proprio in giornata ho scritto qualche decina di righe in un altro post al riguardo, spiegando cosa fa male alle celle. Questo è un esempio pratico di inutile stress.
Infatti a guardare, quegli impulsi di corrente sono del tutto inutili se confrontati con la media e 5 secondi di accelerazione potrebbero essere mitigati in qualche modo, visto l'uso che fai del mezzo. Che ne dici?
davmultimediale Inserito il - 06/12/2011 : 21:32:24
Ciao Criss,

a questo punto per completare il lavoro che hai fatto, rimarrebbe da gestire tutti i dati prodotti tramite uno smartphone collegato via bluetooth. L'idea potrebbe essere quella di fare una bella app in Android/Iphone per visualizzare in tempo reale i dati in modalità grafica (ho in mente un cruscotto digitale) e per memorizzare, visualizzare, fare delle analisi postume (grafici, picchi, consumi medi, etc...) con i dati storici. Si potrebbe poi collegare il tutto ad un account online per la sincronizzazione dei dati e per una consultazione anche via web.
Mi offro per la creazione dell'app e per la creazione del website.
Cosa ne pensate, sarebbe utile?

Ciao,
Davide.

Forum Indipendente Biciclette Elettriche, Pieghevoli e Utility © 2000-06 jobike Torna all'inizio della Pagina
Questa pagina è stata generata in 0,22 secondi. Versione 3.4.06 by Modifichicci - Herniasurgery.it | Distribuito Da: Massimo Farieri - www.superdeejay.net | Powered By: Platinum Full - Snitz Forums 2000 Version 3.4.06
Creative Commons License
Questo/a opera è pubblicato sotto una Licenza Creative Commons.