Pages: 1 [2] 3 4 5   Go Down
Author Topic: Contachilometri  (Read 5304 times)
0 Members and 1 Guest are viewing this topic.
Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ 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.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

forzalo tù a low dopo l'incremento di 1
« Last Edit: June 21, 2010, 12:25:05 pm by brainbooster » Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);
}
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non intendevo quello, e poi a che serve specificare la clausola else?
P.S.
nel codice ci sono errori
« Last Edit: June 21, 2010, 12:41:45 pm by brainbooster » Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

kokiua
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

@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!)
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley-wink
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-sad
forse forse sarebbe meglio usare un ingresso analogico e non digitale, anche se non capisco il ritardo che applica arduino all'ingresso digitale...
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Già visti, c'è l'esempio dell'anti bounce (che non mi serve) smiley 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)
« Last Edit: June 21, 2010, 01:32:12 pm by Locke » Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ultima prova con questo

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

Poi per oggi stendo un velo pietoso e ci ripenso domani smiley-grin
Grazie ancora a tutti.
Logged

Milano, Italy
Offline Offline
Faraday Member
**
Karma: 11
Posts: 3091
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21665
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: June 22, 2010, 02:14:07 am by uwefed » Logged

Pages: 1 [2] 3 4 5   Go Up
Jump to: