Você está no 3DFinder
Buscamos em Thingiverse, MakerWorld e Printables ao mesmo tempo para te dar o melhor de cada uma.
Descrição
Wheel speed ========== Why ?
Convert a binary information in a speed and with direction knowledged
Requirement
1 GPIO (Raspberry pi) 2 endstop sensors 1 spring 3 nails 6 screws (2 by endstop and 2 for spring)
Print parts
Wheel Diameter : 50mm 4 holes so 4 states 0 and 4 states 1 for a complet revolution
** Main part ** To fix spring, wheel and sensors
** Holder ** To fix main part and spring
What we want to get on the raspberry GPIO
number of change of state 0 -> 1 -> 0 -> 1 ... by rotation : 8
Config
You can change settings:
- pin numbers used by 2 endstop sensors (23 & 24 by default)
- wheel diameter (5cm by default)
- number of holes in wheel (4 by default)
Code part
Create a file "nb_turn_second.py" Add permissions (chmod +x nb_turn_second.py" Insert this script inside and run it with "./nb_turn_second.py"
``` #!/usr/bin/python
import RPi.GPIO as GPIO import time
print "starting..."
pin_id = 23 pin2_id = 24
wheel_diameter = 5 #cm nb_holes_in_wheel = 4
nb_states_by_rotation = float(nb_holes_in_wheel * 2) pi = 3.14 wheel_perimeter = pi * wheel_diameter
GPIO.setmode(GPIO.BCM) GPIO.setup(pin_id, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin2_id, GPIO.IN, pull_up_down=GPIO.PUD_UP)
last_state = 0 nb_states = 0
previous_second = 0 previous_nb_states = 0 is_direction_A = True
try: while True: input_state = GPIO.input(pin_id) input2_state = GPIO.input(pin2_id)
if input_state != last_state:
if input_state == input2_state:
nb_states -= 1
if is_direction_A:
is_direction_A = False
print('direction changed')
else:
nb_states += 1
if not is_direction_A:
is_direction_A = True
print('direction changed')
last_state = input_state
current_second = time.strftime('%S')
if current_second != previous_second:
if nb_states != previous_nb_states:
previous_nb_states = nb_states
nb_rotation = 0
if previous_nb_states != 0:
nb_rotation = previous_nb_states / nb_states_by_rotation
speed_second = nb_rotation * wheel_perimeter
print ('nb rotation: ' + str(nb_rotation) + '; speed: ' + str(speed_second) + " cm/s")
previous_second = current_second
nb_states = 0
time.sleep(0.01)
except: GPIO.cleanup() ```
This script will display every second the new speed only if the speed changed ###output example ``` starting... nb rotation: 0.875; speed: 13.7375 cm/s nb rotation: 0.75; speed: 11.775 cm/s nb rotation: 1.0; speed: 15.7 cm/s direction changed nb rotation: 1.25; speed: 19.625 cm/s nb rotation: -0.625; speed: -9.8125 cm/s nb rotation: -0.75; speed: -11.775 cm/s nb rotation: -0.25; speed: -3.925 cm/s nb rotation: 0; speed: 0.0 cm/s ```
Gostou deste modelo? Crie uma conta grátis para salvar seus favoritos e voltar a eles depois.
Criar conta