Difference between revisions of "BakeBit - Servo/zh"
From FriendlyELEC WiKi
(→介绍) |
(→硬件连接) |
||
Line 28: | Line 28: | ||
|} | |} | ||
− | == | + | == 示例程序:Servo and Rotary Angle Sensor == |
+ | 这个示例演示用[[BakeBit - Rotary Angle Sensor]]来控制舵机的转动, 随着你转动电位器,舵机将在0~180角范围里旋转。 | ||
− | + | === 硬件连接 === | |
− | [[File: | + | 简单的将 舵机 模块插入D5接口,将电位器模块插入A0接口,如下面这样: |
+ | |||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |[[File:Servo and Rotary Angle Sensor-1.jpg |frameless|300px]] || [[File:Servo and Rotary Angle Sensor-2.jpg |frameless|300px]] | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | === 示例源代码 === | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | import time | ||
+ | import bakebit | ||
+ | import random | ||
+ | |||
+ | # Connect the servo to digital port D5 | ||
+ | # SIG,NC,VCC,GND | ||
+ | servo = 5 | ||
+ | |||
+ | # Connect the BakeBit Rotary Angle Sensor to analog port A0 | ||
+ | # SIG,NC,VCC,GND | ||
+ | potentiometer = 0 | ||
+ | |||
+ | # Reference voltage of ADC is 5v | ||
+ | adc_ref = 5 | ||
+ | |||
+ | # Vcc of the bakebit interface is normally 5v | ||
+ | bakebit_vcc = 5 | ||
+ | |||
+ | # Full value of the rotary angle is 180 degrees, as per it's specs (0 to 180) | ||
+ | full_angle = 180 | ||
+ | old_degrees = -1 | ||
+ | |||
+ | bakebit.pinMode(potentiometer,"INPUT") | ||
+ | bakebit.bakeBitServo_Attach(servo) | ||
+ | |||
+ | |||
+ | while True: | ||
+ | try: | ||
+ | # Read sensor value from potentiometer | ||
+ | sensor_value = bakebit.analogRead(potentiometer) | ||
+ | |||
+ | # Calculate voltage | ||
+ | voltage = round((float)(sensor_value) * adc_ref / 1023, 2) | ||
+ | |||
+ | # Calculate rotation in degrees (0 to 180) | ||
+ | degrees = int((voltage * full_angle) / bakebit_vcc) | ||
+ | |||
+ | if degrees != old_degrees: | ||
+ | print("sensor_value = %d voltage = %.2f degrees = %d" % (sensor_value, voltage, degrees)) | ||
+ | bakebit.bakeBitServo_Write(servo, degrees) | ||
+ | |||
+ | old_degrees = degrees | ||
+ | |||
+ | except KeyboardInterrupt: | ||
+ | bakebit.bakeBitServo_Detach(servo) | ||
+ | break | ||
+ | except IOError: | ||
+ | print ("Error") | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [https://github.com/friendlyarm/BakeBit/blob/master/Software/Python/bakebit_prj_Servo_And_RotaryAngleSensor.py Github] | ||
+ | |||
+ | |||
+ | === 运行示例 === | ||
+ | |||
+ | 假设你已经参考[http://wiki.friendlyarm.com/bakebit bakebit教程]安装了BakeBit源代码,<br /> | ||
+ | 要运行示例程序,可以在开发板上进入 BakeBit/Software/Python目录,运行bakebit_prj_Servo_And_RotaryAngleSensor.py: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd ~/BakeBit/Software/Python | ||
+ | sudo python bakebit_prj_Servo_And_RotaryAngleSensor.py | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 运行结果 === | ||
+ | |||
+ | 随着你转动电位器,舵机将在0~180角范围里旋转。 | ||
==代码说明== | ==代码说明== | ||
==相关资料== | ==相关资料== | ||
*[Specification]([http://wiki.friendlyarm.com/wiki/images/6/6c/Guo_Hua_Servo_GH-SN90D_Specification.pdf BakeBit - Servo Specification.pdf]) | *[Specification]([http://wiki.friendlyarm.com/wiki/images/6/6c/Guo_Hua_Servo_GH-SN90D_Specification.pdf BakeBit - Servo Specification.pdf]) |
Revision as of 09:51, 28 November 2016
Contents
1 介绍
- BakeBit - Servo是一个舵机模块,内部包含一个直流电机和齿轮传动反馈系统。用去机器人等机械结构的驱动和控制。
- 舵机的转动和转角都是跟随着信号脉冲的宽度变化而变化的,控制信号为频率50Hz的PWM信号,该控制信号高电平部分范围为0.5ms—2.5ms,对应的舵机旋转角度为0-180°。
- 给舵机一个PWM信号,舵机便会旋转到对应的角度。信号停止在一个脉冲宽度时舵机也就不转了,停在对应的角度上.
2 特性
- 使用标准的2.0mm 4 Pin BakeBit接口
舵机规格尺寸如下:
- 规格参数如下:
- 引脚说明:
引脚 | 名称 | 描述 |
1 | SIG | 信号 |
2 | NC | 空 |
3 | 5V | 电源5V |
4 | GND | 地 |
3 示例程序:Servo and Rotary Angle Sensor
这个示例演示用BakeBit - Rotary Angle Sensor来控制舵机的转动, 随着你转动电位器,舵机将在0~180角范围里旋转。
3.1 硬件连接
简单的将 舵机 模块插入D5接口,将电位器模块插入A0接口,如下面这样:
3.2 示例源代码
import time import bakebit import random # Connect the servo to digital port D5 # SIG,NC,VCC,GND servo = 5 # Connect the BakeBit Rotary Angle Sensor to analog port A0 # SIG,NC,VCC,GND potentiometer = 0 # Reference voltage of ADC is 5v adc_ref = 5 # Vcc of the bakebit interface is normally 5v bakebit_vcc = 5 # Full value of the rotary angle is 180 degrees, as per it's specs (0 to 180) full_angle = 180 old_degrees = -1 bakebit.pinMode(potentiometer,"INPUT") bakebit.bakeBitServo_Attach(servo) while True: try: # Read sensor value from potentiometer sensor_value = bakebit.analogRead(potentiometer) # Calculate voltage voltage = round((float)(sensor_value) * adc_ref / 1023, 2) # Calculate rotation in degrees (0 to 180) degrees = int((voltage * full_angle) / bakebit_vcc) if degrees != old_degrees: print("sensor_value = %d voltage = %.2f degrees = %d" % (sensor_value, voltage, degrees)) bakebit.bakeBitServo_Write(servo, degrees) old_degrees = degrees except KeyboardInterrupt: bakebit.bakeBitServo_Detach(servo) break except IOError: print ("Error")
3.3 运行示例
假设你已经参考bakebit教程安装了BakeBit源代码,
要运行示例程序,可以在开发板上进入 BakeBit/Software/Python目录,运行bakebit_prj_Servo_And_RotaryAngleSensor.py:
cd ~/BakeBit/Software/Python sudo python bakebit_prj_Servo_And_RotaryAngleSensor.py
3.4 运行结果
随着你转动电位器,舵机将在0~180角范围里旋转。
4 代码说明
5 相关资料
- [Specification](BakeBit - Servo Specification.pdf)