Go Down

Topic: Contachilometri (Read 6116 times) previous topic - next topic

Locke

@ uccio:

Mi interessa riuscire a contare il numero di impulsi, il tempo sarà una variabile fissa di 1 secondo, rapportandoli otterrò la velocità.

@ brainbooster:

Il sensore si è un reed, quello dei tachimetri da bicicletta, ma al momento ponticello semplicemente ai 5 volt il pin d'ingresso, putroppo non riesco a contare solamente l'impulso, non c'entra l'interfaccia, in seriale fa lo stesso, se do l'impulso, aggiunge 1 al registro finchè l'imput non torna a LOW, e quindi escono valori nell'ordine delle decine anche se l'impulso dura pochissimo...

Grazie mille agli utenti che mi stanno aiutando.

BrainBooster

#16
Jun 21, 2010, 07:24 pm Last Edit: Jun 21, 2010, 07:25 pm by brainbooster Reason: 1
forzalo tù a low dopo l'incremento di 1

Locke

Buona idea, ma sembra quasi che ci sia un tempo fisso per arduino, e quindi anche forzando lo stato LOW ci mette del tempo...

void setup()
{
 pinMode(sensorepin,INPUT);
 lcd.begin(16, 2);
 lcd.print("    -DUCATI-");
 delay(1000);
 lcd.clear();
}


void loop()
{
 abba = digitalRead(sensorepin);
 if(abba == HIGH)
 {
 giri2++;
 }
 else {
   giri2 = giri2;
 }

if(giri2 > 0)
{
abba = LOW;
}
 
 lcd.setCursor(0, 0);
 lcd.print("Speed");
 lcd.setCursor(0, 1);
 lcd.print(giri2);
 lcd.print(" Km/h ");
 delay (5);
}

BrainBooster

#18
Jun 21, 2010, 07:35 pm Last Edit: Jun 21, 2010, 07:41 pm by brainbooster Reason: 1
non intendevo quello, e poi a che serve specificare la clausola else?
P.S.
nel codice ci sono errori

Locke

L'else era rimasto da una prova iniziale... ovviamente non funzionava :D
Cosa intendevi per forzare il Low?
La compilazione è corretta e gira su arduino attualmente.

BrainBooster

errori di logica, c'è da studiare un pò...

kokiua

@brainbooster: non è solo un problema di errori di logica, nella strada intrapresa l'importanza della libreria che gestisce il display è fondamentale in quanto apporta ritardi che sono evitabili soltanto mediante l'utilizzo dell'interrupt di un timer... (chissà quante volte dovrò ripeterlo ancora in questo forum!)

BrainBooster

giusto kokiua ma il suo problema è a monte (non conta gli impulsi), io prima, non a caso, gli ho suggerito di "dividere et imperare" provando a scriversi un semplice contatore che mostrasse l'incremento. ;)

Locke

Brain son 2 giorni che appena stacco da lavoro ci rimembro sopra ma non vengo a capo di niente...
Questi impulsi non li vuole contare  :(
forse forse sarebbe meglio usare un ingresso analogico e non digitale, anche se non capisco il ritardo che applica arduino all'ingresso digitale...

BrainBooster

guardati gli esempi dei tasti
http://www.arduino.cc/playground/Main/InterfacingWithHardware

Locke

#25
Jun 21, 2010, 08:31 pm Last Edit: Jun 21, 2010, 08:32 pm by Locke Reason: 1
Già visti, c'è l'esempio dell'anti bounce (che non mi serve) :) ora riguardo...

ho trovato questo, sembra molto veloce, ma devo capire come funziona  ;D

local Pulses = {} -- This is a Table or an Array as you would also call it
local InPin = digitalRead(5) -- This would be our Pin to read from
local Frequency = 0

function Count(InPin)
if(InPin == HIGH) then
    table.insert(Pulses, Frequency+1)
    end
 repeat
end

function Print(Pulses)
print(#Pulses)
end

io.write(Print)

Locke

Ultima prova con questo

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

Poi per oggi stendo un velo pietoso e ci ripenso domani :D
Grazie ancora a tutti.

Federico

Scusate, non vorrei dire una scemenza, ma non potrebbe essere meglio un sensore di hall? http://en.wikipedia.org/wiki/Hall_effect_sensor
Ne ho un paio e non li ho mai usati, ma pensavo che sarebbero stati perfetti per questo scopo. Fede
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Locke

Credo sia la stessa cosa :)
Il reed è un contatto che commuta quando trova un campo magnetico...

uwefed

#29
Jun 22, 2010, 09:13 am Last Edit: Jun 22, 2010, 09:14 am by uwefed Reason: 1
ciao Locke

Sí il reed sono 2 lamerini magnetici che si attraggono e percui chiudono quando entrano in un campo magnetico opportunamente disposto (contatto NO). Con un secondo magnetino posto in modo opportuno si puó anche avere un contatto che si apre quando passa il magnete (contatto NC).

2 cose; non devi contare se l' ingresso é HIGH ma trovare il passaggio da LOW a HIGH. Memorizza lo sato del ingresso e confrontalo col nuovo stato
if (in == HIGH && inold == LOW){
inold = in;
contatore ++;
dove "in" é lo stato attuale del entrata e "inold" quello vecchio. Questo ti fa trovare il cambio stato da LOW a HIGH.

Supposiamo che la ruota ha una circonferenza di quasi una metro (moto da strada) avendo un impulso a rotazione misuri 3,6 km/h, 7,2km/h, 10,8km/h  14,4km/h ecc  

Vedi che la risoluzione misurando gli impulsi che ti arrivano in un secondo é molto grossolana. Per risolvere questo: piú impulsi per rotazione, tempo di misura piú lungo oppure misurare il tempo tra 2 impulsi. Per uno scooter, visto che ha le ruote piú pccole i valori sono piú vicini ma neanche in questo caso avrai una risoluzione sorprendente.

Ciao Uwe

Go Up