所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
【PinPong Board】PinPong Board玩物联3-双舵机云台
gray6666 gray6666 2021-05-05 21:35:10
2
1
简单

实验任务

1.电位器操控舵机

2.for循环和range()函数

3.def自定义函数

材料清单 材料清单
1x
PinPong Board
2x
SG90舵机(180)
1x
2舵机迷你云台套件
projectImage

测试软件

mind+RC1.7.0 python代码模式

 

projectImage

知识储备

1.电位器

电位器是具有三个引出端、阻值可按某种变化规律调节的电阻元件。电位器通常由电阻体和可移动的电刷组成。当电刷沿电阻体移动时,在输出端即获得与位移量成一定关系的电阻值或电压。PinPong Board 采用UNO板子作为核心,电位器集成在A3模拟口,UNO模拟输入功能有10位精度,可以将0~5V的电压信号转换为0~1023的整数形式表示。

2.舵机

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

3.FOR循环

Python for循环可以遍历任何序列的项目,可以是一个列表或一个字符串等。

语法格式:

 for iterating_var in sequence:

     statements(s)

4.range()函数 

range() 函数可创建一个整数列表,一般和for 循环搭配使用。

range函数格式

   range(start, stop[, step])

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

5.def自定义函数

函数是组织好的,可重复使用,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率;本节常识自己创建函数,即用户自定义函数。

def functionname( parameters ):

      function_suite 

     return [expression]

步骤1 步骤1
双舵机循环摆动

注意:

舵机定义时,S1和S2需要分开,不能像下面这样连续定义

s1 = Servo(Pin(Pin.D6)) #将Pin传入Servo中初始化舵机引脚

s2 = Servo(Pin(Pin.D7)) #将Pin传入Servo中初始化舵机引脚

 

代码 代码
	                    					import time
from pinpong.board import Board,Pin,Servo
Board("uno").begin()  #初始化,选择板型和端口号

while True:
    s1 = Servo(Pin(Pin.D6)) #将Pin传入Servo中初始化舵机引脚
    for i in range(1,181): #从0到180循环
      s1.angle(i) #控制舵机转到i度位置
      print(i)
      time.sleep(0.05)
    for i in range(180,-1,-1): #从0到180循环
      s1.angle(i) #控制舵机转到i度位置
      print(i)
      time.sleep(0.05)
  
    s2 = Servo(Pin(Pin.D7)) #将Pin传入Servo中初始化舵机引脚
    for j in range(0,181): #从0到180循环
      s2.angle(j) #控制舵机转到j度位置
      print(j)
      time.sleep(0.05)
    for j in range(180,-1,-1): #从0到180循环
      s2.angle(j) #控制舵机转到j度位置
      print(j)
      time.sleep(0.05)
       
    
  
	                    				
步骤2 步骤2
电位器控制舵机
代码 代码
	                    					import time
from pinpong.board import Board,Pin,ADC,Servo
Board("uno").begin()  #初始化,选择板型和端口号,不输入端口号则进行自动识别
adc3 = ADC(Pin(Pin.A3)) #将Pin传入ADC中实现模拟输入
s1 = Servo(Pin(Pin.D6)) #将Pin传入Servo中初始化舵机引脚
while True:
    v = adc3.read()  #读取A3口模拟信号数值
    print(v)#打印电位器的数值
    v=int((v - 0) * (180 - 0) / (1023 - 0) + 0)#用映射公式转换数值为舵机角度
    #(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    print(v)
    s1.angle(v)
    time.sleep(0.05)
	                    				
步骤3 步骤3
电位器控制舵机(自定义函数版)

python库中的map映射函数和ardunio的差别较大,不适合初学者教学;

本文映射函数参考ardunio C的 map函数自行编写,后附自定义函数的写法。

projectImage

ardunio C的 map函数

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

python版map函数
def map(x,in_min,in_max,out_min,out_max):
   mapk=(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
   return int(mapk) #返回角度值取整数

 

代码 代码
	                    					import time
from pinpong.board import Board,Pin,ADC,Servo
Board("uno").begin()  #初始化,选择板型和端口号,不输入端口号则进行自动识别
adc3 = ADC(Pin(Pin.A3)) #将Pin传入ADC中实现模拟输入
s1 = Servo(Pin(Pin.D6)) #将Pin传入Servo中初始化舵机引脚

def map(x,in_min,in_max,out_min,out_max):
    mapk=(x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
    return int(mapk) #返回角度值取整数

while True:
    v = adc3.read()  #读取A3口模拟信号数值
    #print(v)#打印电位器的数值
    v=map(v,0,1023,0,180)
    print(v)#打印角度值
    s1.angle(v)#舵机运转
    time.sleep(0.05)
	                    				
Makelog作者原创文章,未经授权禁止转载。
2
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]