2016-07-19 7 views
0

Ich arbeite an einem Projekt, in dem ich die Drehzahl des Rades mit einem Hall-Effekt-Sensor und einem Raspberry Pi messen soll. Ich habe ein Skript dafür entwickelt, aber es gibt mir kein erforderliches Ergebnis. Wenn ein Magnet in die Nähe des Sensors kommt, zeigt er direkt den hohen Wert oder sonst 0 an. Ich möchte ein Skript, das mir Ergebnisse wie 40,39,38,36,9,8,0 jede Sekunde zeigt, genau wie ein Fahrrad Tacho.Ich möchte ein Python-Skript entwickeln, das die Drehzahl eines Rades messen kann

Was soll ich tun?

Hier ist das Skript, das ich gemacht habe.

import RPi.GPIO as GPIO 
 
import time 
 
from time import sleep 
 
import datetime 
 

 
j=10000 
 

 
sensor=12 
 

 
ts=datetime.time() 
 
w=0 
 
new_time=0 
 
old_time=0 
 
temp=0 
 

 
GPIO.setmode(GPIO.BOARD) 
 
GPIO.setup(sensor,GPIO.IN,pull_up_down=GPIO.PUD_UP) 
 
while j: 
 
     if (GPIO.input(12)== 0): 
 
      new_time=time.time() 
 
      old_time=temp 
 
      delta_t=new_time-old_time 
 
      temp=new_time 
 
      w=60/delta_t 
 
      v=0.5 * w * 0.10472 * 3.6 
 
      print (v) 
 
      time.sleep(0.1) 
 
     else: 
 
      time.sleep(1) 
 
      print("0") 
 
     j=j-1

Dies sind die Ergebnisse, die ich

7.73038658487e-09 
0 
0 
5.14198236739 
85.7996578022 
88.3574855171 
88.6053761182 
0 
9.71547048724 
86.4257204462 
0 
9.57686374353 
0 
0 
0 
3.46828868213 
86.5939003971 
87.7296673227 
85.2723314196 
87.1933291677 
86.5891584273 
85.6995234282 
86.6861559057 
85.5173717138 
86.9547003788 
87.3698228295 
87.2335755975 
0 
9.6387741631 
0 
0 
0 
3.4536179304 
82.6103044073 
83.5581939399 
83.8193788137 
82.5174720536 
84.0056662004 
82.471707599 
83.8201193552 
86.8997440944 
82.6851820147 
0 

Antwort

1

Sie bin immer eine Menge von 0, weil Sie eine 0 in der anderen drucken. Ich weiß nicht, ob Python die beste Sprache ist, um dieses Steuerelement zu steuern, es hängt davon ab, wie schnell dein Rad ist und wie lange du bleibst GPIO.input(12)== 0. Wenn es zu schnell ist, werden Sie viele Umdrehungen verlieren. Vielleicht müssen Sie einen Durchschnitt der letzten N Takte machen. Oder, anstatt zu sehen, wie lange das Rad braucht, um eine komplette Umdrehung zu machen, messen Sie, wie viele Umdrehungen in den letzten N Sekunden gemacht wurden.

Vielleicht erhalten Sie in den GPIO.input(12) == 0 Fall für die gleiche rev eingeben, da GPIO.input (12) stas 0 zu lang ist. Zu zählen, wie eine neue rev hat GPIO Zustand zu ändern:

last_state = 1 
while j: 
     if (GPIO.input(12) == last_state) 
      last_state = GPIO.input(12) 
      if (GPIO.input(12)== 0): 
        new_time=time.time() 
        old_time=temp 
        delta_t=new_time-old_time 
        temp=new_time 
        w=60/delta_t 
        v=0.5 * w * 0.10472 * 3.6 
        print (v) 
        time.sleep(0.1) 
      else: 
        time.sleep(1) 
     j=j-1 

Ich bin kein Python-Programmierer, müssen Sie Zeiteinheiten und Grammatik überprüfen:

revs = 0 
last_state = 1 
end_time = time.time() + 10 
while time.time() < end_time: 
     # count revs: 
     if (GPIO.input(12) == last_state) 
      last_state = GPIO.input(12) 
      if (GPIO.input(12) == 0): 
        revs = revs + 1; 

     # print revs every 0.5 secs: 
     if (time.time() - old_time > 0.5) 
      delta_t = time.time() - old_time 
      old_time = time.time() 
      w = 60/delta_t 
      v = revs * 0.5 * w * 0.10472 * 3.6 
      print(v) 
      revs = 0 
     else 
      time.sleep(0.01) 
+0

vielen Dank für Ihre Antwort sir Aber eine weitere Frage ist, wie würde ich durchschnittlich alle 0,5 Sekunden lesen –

Verwandte Themen