Difference between revisions of "BakeBit - Servo"
From FriendlyELEC WiKi
(Created page with "查看中文") |
|||
(10 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[BakeBit - Servo/zh|查看中文]] | [[BakeBit - Servo/zh|查看中文]] | ||
+ | |||
+ | ==Introduction== | ||
+ | [[File:BakeBit - Servo.jpg|thumb|Servo]] | ||
+ | * The BakeBit - Servo is a servo module which contains a DC motor and a transmission system. | ||
+ | * Its input signal is PWM. The motor's steering angle changes according to PWM signals' changes. The input PWM's frequency is 50Hz and its width is 0.5ms—2.5ms. The motor's steering angle is 0 - 180°. | ||
+ | * A PWM input steers the motor to an angle. When no input signals are applied the motor will stop. | ||
+ | |||
+ | ==Hardware Spec== | ||
+ | * Standard 2.0mm pitch 4-Pin BakeBit Interface | ||
+ | Servo's dimension | ||
+ | |||
+ | [[File:BakeBit - Servo002.png | frameless|300px|BakeBit - Servo]] | ||
+ | * Spec: | ||
+ | [[File:BakeBit - Servo003.png | frameless|430px|BakeBit - Servo detail]] | ||
+ | |||
+ | * Pin Description: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | |Pin || Name || Description | ||
+ | |- | ||
+ | |1|| SIG || Signal | ||
+ | |- | ||
+ | |2 || NC || Not Connected | ||
+ | |- | ||
+ | |3 || 5V || 5V Supply Voltage | ||
+ | |- | ||
+ | |4 || GND || Ground | ||
+ | |} | ||
+ | |||
+ | == Code Sample: Servo and Rotary Angle Sensor == | ||
+ | |||
+ | By running this code sample users can control a servo with the [[BakeBit - Rotary Angle Sensor]] module. The servo's streering angle is between 0~180 degrees. | ||
+ | |||
+ | === Hardware Setup === | ||
+ | Connect the servo module to the NanoHat Hub's D5 and the rotary angle sensor module to the NanoHat Hub's A0: | ||
+ | |||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |[[File:Servo and Rotary Angle Sensor-1.jpg |frameless|300px]] || [[File:Servo and Rotary Angle Sensor-2.jpg |frameless|300px]] | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | === Source Code === | ||
+ | |||
+ | <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] | ||
+ | |||
+ | |||
+ | === Run Code Sample === | ||
+ | |||
+ | Before you run the code sample you need to follow the steps in [http://wiki.friendlyarm.com/bakebit bakebit tutorial] to install the BakeBit package.<br /> | ||
+ | Enter the "BakeBit/Software/Python" directory and run the "bakebit_prj_Servo_And_RotaryAngleSensor.py" program: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd ~/BakeBit/Software/Python | ||
+ | sudo python bakebit_prj_Servo_And_RotaryAngleSensor.py | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Observation === | ||
+ | |||
+ | When you rotate the rotary angle module the servo will be steered between 0 to 180 degrees. | ||
+ | |||
+ | ==Resources== | ||
+ | *[Specification]([http://wiki.friendlyarm.com/wiki/images/6/6c/Guo_Hua_Servo_GH-SN90D_Specification.pdf BakeBit - Servo Specification.pdf]) | ||
+ | *[BakeBit Github Project Page](https://github.com/friendlyarm/BakeBit) | ||
+ | *[BakeBit Starter Kit User's Manual](http://wiki.friendlyarm.com/bakebit/bakebit_starter_kit_manual_en.pdf) | ||
+ | |||
+ | ==Update Log== | ||
+ | ===December-14-2016=== | ||
+ | * Released English Version | ||
+ | |||
+ | ===Jan-19-2017=== | ||
+ | * Renamed "NEO-Hub" to "NanoHat-Hub" | ||
+ | |||
+ | ===Jan-20-2017=== | ||
+ | * Renamed "NanoHat-Hub" to "NanoHat Hub" |
Latest revision as of 08:19, 20 January 2017
Contents
1 Introduction
- The BakeBit - Servo is a servo module which contains a DC motor and a transmission system.
- Its input signal is PWM. The motor's steering angle changes according to PWM signals' changes. The input PWM's frequency is 50Hz and its width is 0.5ms—2.5ms. The motor's steering angle is 0 - 180°.
- A PWM input steers the motor to an angle. When no input signals are applied the motor will stop.
2 Hardware Spec
- Standard 2.0mm pitch 4-Pin BakeBit Interface
Servo's dimension
- Spec:
- Pin Description:
Pin | Name | Description |
1 | SIG | Signal |
2 | NC | Not Connected |
3 | 5V | 5V Supply Voltage |
4 | GND | Ground |
3 Code Sample: Servo and Rotary Angle Sensor
By running this code sample users can control a servo with the BakeBit - Rotary Angle Sensor module. The servo's streering angle is between 0~180 degrees.
3.1 Hardware Setup
Connect the servo module to the NanoHat Hub's D5 and the rotary angle sensor module to the NanoHat Hub's A0:
3.2 Source Code
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 Run Code Sample
Before you run the code sample you need to follow the steps in bakebit tutorial to install the BakeBit package.
Enter the "BakeBit/Software/Python" directory and run the "bakebit_prj_Servo_And_RotaryAngleSensor.py" program:
cd ~/BakeBit/Software/Python sudo python bakebit_prj_Servo_And_RotaryAngleSensor.py
3.4 Observation
When you rotate the rotary angle module the servo will be steered between 0 to 180 degrees.
4 Resources
- [Specification](BakeBit - Servo Specification.pdf)
- [BakeBit Github Project Page](https://github.com/friendlyarm/BakeBit)
- [BakeBit Starter Kit User's Manual](http://wiki.friendlyarm.com/bakebit/bakebit_starter_kit_manual_en.pdf)
5 Update Log
5.1 December-14-2016
- Released English Version
5.2 Jan-19-2017
- Renamed "NEO-Hub" to "NanoHat-Hub"
5.3 Jan-20-2017
- Renamed "NanoHat-Hub" to "NanoHat Hub"