首页 > 其他分享 >3、Pico Robot 基础开发课程

3、Pico Robot 基础开发课程

时间:2024-03-30 17:11:18浏览次数:27  
标签:Pin 课程 程序 Robot oled Pico time import

3.1 控制板载LED灯闪烁

在上一节中,我们学习了如何搭建开发环境,并实现了运行程序控制板载LED闪烁,在这一节中我们将学习这部分程序是如何实现LED控制的。

一、学习目标

1. 学习树莓派Pico主板的引脚基本使用。

2. 了解如何控制板载的LED灯。

二、硬件使用

本次课程无需额外的硬件,直接利用树莓派Pico主板上的板载LED灯即可。

image-20220208161613985

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 1.板载LED灯.py

关于ThonnyIDE的使用,请查看第二章课程。

1 import machine 
2 import time 
3 led_onboard = machine.Pin(25, machine.Pin.OUT)
4 
5 while True: 
6     led_onboard.value(1) 
7     time.sleep(1) 
8     led_onboard.value(0) 
9     time.sleep(1)

import machine

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

led_onboard = machine.Pin(25, machine.Pin.OUT)

第一个参数,25,是您正在设置的引脚的数量;第二个参数,machine.Pin.OUT告诉Pico,引脚应该用作输出而不是输入。

time.sleep(1)

这会从time库调用sleep函数,这会使程序暂停您键入的任何秒数——在本例中为1秒。

四、实验现象

程序下载完成之后,我们可以看到树莓派Pico开发板上的LED灯每隔1秒闪烁。

 

3.2 板载温度传感器

一、学习目标

1. 学习树莓派Pico主板的引脚ADC引脚基本使用。

2. 了解如何通过读取板载温度传感器的温度。

二、硬件使用

本次课程无需额外的硬件,直接利用树莓派Pico主板上的温度传感器。

image-20220209094626831

Raspberry Pi Pico的RP2040微控制器是一种数字设备,就像所有主流微控制器一样:它由数千个晶体管组成,这些微小的开关式设备要么打开,要么关闭。 因此,你的PICO无法真正理解一个模拟信号-它可以是完全关闭和完全打开之间的频谱上的任何东西-而不依赖额外的硬件:模拟数字转换器(ADC)。

一个ADC有两个关键的特点:它的分辨率,以数字位测量,它的通道,或它可以接受和转换多少模拟信号一次。 您的PICO中的ADC的分辨率为12位,这意味着它可以将模拟信号转换为数字信号,其数字从0到4095不等-尽管这是在MicroPython中处理的,转换为从0到65,535的16位数字,因此它的行为与其他MicroPython微控制器上的ADC相同。 它有三个通道被带到GPIO引脚:GP26、GP27和GP28,它们也被称为模拟通道0、1和2的GP26_ADC0、GP27_ADC1和GP28_ADC2。 还有第四个ADC通道,它连接到一个内置在RP2040中的温度传感器。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 2.板载温度传感器.py

1 import machine 
2 import time 
3 sensor_temp = machine.ADC(4) 
4 conversion_factor = 3.3 / (65535) 
5 while True: 
6     reading = sensor_temp.read_u16() * conversion_factor 
7     temperature = 27 - (reading - 0.706)/0.001721 
8     print(temperature) 
9     time.sleep(2)

import machine

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

sensor_temp = machine.ADC(4)

使用ADC通道4,它连接到一个内置在RP2040中的温度传感器。

conversion_factor = 3.3 / (65535)

这引脚电平为3.3V,转换值上限为65535,所以根据此公式计算得电压和数字的比。

reading = sensor_temp.read_u16() * conversion_factor

计算ADC读取到的电压值。

temperature = 27 - (reading - 0.706)/0.001721

根据电压值计算出内置温度传感器的温度值。

time.sleep(2)

这会从utime库调用sleep函数,这会使程序暂停您键入的任何秒数——在本例中为2秒。

四、实验现象

程序下载完成之后,通过Thony的Shell窗口观察到温度值。

image-20220208170012550

 

3.3 无源蜂鸣器

一、学习目标

1. 学习树莓派Pico主板和小车扩展板无源蜂鸣器结合进行实验。

2. 了解有源蜂鸣器的使用。

二、硬件使用

本次课程使用PICO主板以及小车板载无源蜂鸣器

image-20220209095936443

无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,在控制中我们一般使用PWM来控制无源蜂鸣器发出声音。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 3.无源蜂鸣器.py

 1 from machine import Pin, PWM
 2 import time
 3 # set buzzer pin
 4 BZ = PWM(Pin(22))
 5 BZ.freq(1000)
 6 # Initialize music
 7 CM = [0, 330, 350, 393, 441, 495, 556, 624] 
 8 song = [CM[1],CM[1],CM[5],CM[5],CM[6],CM[6],CM[5],CM[4],CM[4],CM[3],CM[3],CM[2],CM[2],CM[1],]
 9 beat = [ 0.5,0.5,0.5,0.5,0.5,0.5,1,0.5,0.5,0.5,0.5,0.5,0.5,1,]
10 # music   
11 def music():
12         print('Playing song ...')
13         for i in range(len(song)):
14             BZ.duty_u16(500)
15             BZ.freq(song[i])
16             time.sleep(beat[i]) 
17             BZ.duty_u16(0)
18             time.sleep(0.01) 
19 # play music   
20 music()
21 print("Ending")

from machine import Pin, PWM

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言,这里只用了Pin和PWM的库。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

BZ = PWM(Pin(22))

将IO22设置为PWM输出引脚,用于控制蜂鸣器。

BZ.freq(1000)

将PWM频率设置为1000。

BZ.duty_u16(0)

数值为0的时候关闭声音,为500的时候开启声音。

music()

通过调用music()函数,函数内使用一个for循环,把事先写好的不同频率的声音,一个一个播放出来,从而实现音乐的播放。

四、实验现象

程序下载完成之后,我们就可以听到蜂鸣器播放音乐 小星星,播放结束后Shell显示 Ending。

 

3.4 呼吸灯

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的可编程RGB灯结合进行实验。

2. 了解可编程RGB灯的使用,实现呼吸灯效果。

二、硬件使用

本次课程使用PICO主板以及小车板载可编程RGB灯

image-20220217112420013

小车板载8颗可编程RGB灯,可以实现炫彩灯效,8颗可编程灯内置ws2812芯片,只需要一个端口通过时序控制即可同时控制8个灯,时序控制函数封装在库中,我们只需要调用设置灯的颜色即可。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 4.呼吸灯.py

 1 import time
 2 from pico_car import ws2812b
 3 
 4 num_leds = 8  # Number of NeoPixels
 5 # Pin where NeoPixels are connected
 6 pixels = ws2812b(num_leds, 0)
 7 # Set all led off
 8 pixels.fill(0,0,0)
 9 pixels.show()
10 # Define variables
11 i = 0
12 brightness = 0
13 fadeAmount = 1
14 # Breathing
15 while True:
16     for i in range(num_leds):
17         pixels.set_pixel(i,0,brightness,brightness)
18     pixels.show()
19     brightness = brightness + fadeAmount
20     if brightness <= 0 or brightness >= 200:
21         fadeAmount = -fadeAmount
22     time.sleep(0.005)

from pico_car import ws2812b

因为只亮灯,这里只使用pico_car的ws2812b。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

pixels = ws2812b(num_leds, 0)

初始化RGB灯,我们有8个RGB灯,这里num_leds设置为8。

pixels.fill(0,0,0)

把所有的灯设置为0,0,0,也就是关闭所有灯,参数分别是(红色,绿色,蓝色),颜色亮度是0-255。

pixels.show()

把设置的灯显示出来。

pixels.set_pixel(i,0,brightness,brightness)

通过这个函数设置每个灯的颜色,参数分别是(灯的编号,红色,绿色,蓝色),灯的编号从0开始,颜色亮度是0-255,例如说第一个亮红色pixels.set_pixel(0,255,0,0)。

brightness = 0 fadeAmount = 1

通过控制这两个值的加减来实现呼吸灯效果。

四、实验现象

程序下载完成之后,我们可以看到车底下的灯以青色循环亮灭呼吸效果。

 

3.5 跑马灯

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的可编程RGB灯结合进行实验。

2. 了解可编程RGB灯的使用,实现跑马灯效果。

二、硬件使用

本次课程使用PICO主板以及小车板载可编程RGB灯

image-20220217112502122

小车板载8颗可编程RGB灯,可以实现炫彩灯效,8颗可编程灯内置ws2812芯片,只需要一个端口通过时序控制即可同时控制8个灯,时序控制函数封装在库中,我们只需要调用设置灯的颜色即可。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 5.跑马灯.py

 1 import time
 2 from pico_car import ws2812b
 3 
 4 num_leds = 8  # Number of NeoPixels
 5 # Pin where NeoPixels are connected
 6 pixels = ws2812b(num_leds, 0)
 7 # Set all led
 8 pixels.fill(10,10,10)
 9 pixels.show()
10 # horse race lamp
11 while True:
12     for i in range(num_leds):
13         for j in range(num_leds):
14             #pixel_num, red, green, blue
15             pixels.set_pixel(j,abs(i+j)%10,abs(i-(j+3))%10,abs(i-(j+6))%10)
16         pixels.show()
17         time.sleep(0.05)

from pico_car import ws2812b

因为只亮灯,这里只使用pico_car的ws2812b。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

pixels = ws2812b(num_leds, 0)

初始化RGB灯,我们有8个RGB灯,这里num_leds设置为8。

pixels.fill(10,10,10)

把所有的灯设置为10,10,10,参数分别是(红色,绿色,蓝色),颜色亮度是0-255。

pixels.show()

把设置的灯显示出来。

pixels.set_pixel(j,abs(i+j)%10,abs(i-(j+3))%10,abs(i-(j+6))%10)

通过这个函数设置每个灯的颜色,参数分别是(灯的编号,红色,绿色,蓝色),灯的编号从0开始,颜色亮度是0-255,这里通过两个for循环设置变量值,实现跑马灯效果。

四、实验现象

程序下载完成之后,我们可以看到车底下的跑马灯效果。

 

3.6 OLED显示

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的OLED显示屏结合进行实验。

2. 了解OLED显示屏的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的OLED显示屏,注意,运行本节例程之前,必须插上OLED显示屏,否则程序会报错

image-20220302114910448

OLED显示屏是利用有机电自发光二极管制成的显示屏。由于同时具备自发光有机电激发光二极管,不需背光源、对比度高、厚度薄、视角广、反应速度快、使用温度范围广、构造及制程较简单等优异之特性。我们使用的0.91寸OLED屏使用IIC通信,节约了IO引脚,简化了控制方式。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 6.OLED显示.py

 1 from machine import Pin, I2C
 2 from pico_car import SSD1306_I2C
 3 import time
 4 # set IIC pin
 5 i2c=I2C(1, scl=Pin(15),sda=Pin(14), freq=100000)
 6 # initialization oled
 7 oled = SSD1306_I2C(128, 32, i2c)
 8 # oled show hello at 0,0
 9 oled.text('Hello', 0, 0)
10 oled.show()
11 oled.fill(0)
12 time.sleep(1)
13 # oled show World at 0,10
14 oled.text('World', 0, 10)
15 oled.show()
16 oled.fill(0)
17 time.sleep(1)
18 # oled show spot at 100,30
19 oled.pixel(100, 30, 1)
20 oled.show()
21 oled.fill(0)
22 time.sleep(1)

from pico_car import SSD1306_I2C

使用pico_car 的SSD1306_I2C,这是我们封装好的OLED库。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

from machine import Pin, I2C

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言,这里只用了Pin和I2C的库。

i2c=I2C(1, scl=Pin(15),sda=Pin(14), freq=100000)

设置IIC 1引脚为SCL 15,SDA 14,频率为100000。

oled = SSD1306_I2C(128, 32, i2c)

初始化OLED的大小为128*32,并把前面设置的IIC参数传进去。

oled.text('Hello', 0, 0)

设置OLED在0,0的位置显示'Hello'。

oled.show()

把设置的OLED内容显示出来。

oled.fill(0)

清除设置的内容,准备下一次显示。

oled.pixel(100, 30, 1)

设置OLED在坐标100,30位置的像素点点亮,如果oled.pixel(100, 30, 0)则是关闭坐标100,30位置的像素点。

四、实验现象

程序下载完成之后,我们可以看到OLED先显示 'Hello' ,然后在下面一行显示 'World' ,然后在坐标100,30的位置显示一个点。

 

3.7 电池电量显示

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的电量检测、OLED显示屏结合进行实验。

2. 了解电量检测的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的电量检测、OLED显示屏,注意,运行本节例程之前,必须插上OLED显示屏,否则程序会报错

image-20220302114910448

电量检测的硬件基本原理是通过电阻把电池电压调整到合适的数值,输入给主控,主控通过ADC去检测电压从而判断电量。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 7.电池电量显示.py

 1 from machine import Pin, I2C, ADC
 2 from pico_car import SSD1306_I2C
 3 import time
 4 
 5 #initialization oled
 6 i2c=I2C(1, scl=Pin(15),sda=Pin(14), freq=100000)
 7 oled = SSD1306_I2C(128, 32, i2c)
 8 #initialization ADC
 9 Quantity_of_electricity = machine.ADC(28)
10 
11 while True:
12     #Display power on OLED
13     #Under 20000, there is no power at all
14     oled.text('Battery:', 0, 0)
15     oled.text(str(Quantity_of_electricity.read_u16()), 65, 0)
16     oled.show()
17     oled.fill(0)
18     time.sleep(0.1)

from pico_car import SSD1306_I2C

使用pico_car 的SSD1306_I2C。

import time

“time”库。 这个库处理所有与时间有关的事情,从测量它到将延迟插入到程序中。单位为秒。

from machine import Pin, I2C, ADC

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言,这里用了Pin、I2C和ADC的库。

i2c=I2C(1, scl=Pin(15),sda=Pin(14), freq=100000)

设置IIC 1引脚为SCL 15,SDA 14,频率为100000。

oled = SSD1306_I2C(128, 32, i2c)

初始化OLED的大小为128*32,并把前面设置的IIC参数传进去。

Quantity_of_electricity = machine.ADC(28)

初始化ADC端口28。

oled.text(str(Quantity_of_electricity.read_u16()), 65, 0)

设置OLED在65,0的位置显示电池电量的数值,我们通过Quantity_of_electricity.read_u16()来读取ADC的值,通过str()函数把数值转成字符串,再由OLED显示出来。

oled.show()

把设置的OLED内容显示出来。

oled.fill(0)

清除设置的内容,准备下一次显示。

四、实验现象

程序下载完成之后,我们可以看到OLED显示 'Battery:电池电量' ,这个电量会随电压变化而变化,经测试,当数值低于20000时电池处于低电量的状态,小于25000处于中电量状态。

image-20220302115509464

 

3.8 舵机控制

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的舵机接口、PWM舵机结合进行实验。

2. 了解PWM舵机的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的舵机接口、PWM舵机,PWM舵机连接时注意连接线的颜色和排针颜色应对应。

image-20220302120101167

PWM舵机基本控制原理是,用PWM信号产生周期为20ms,占空比为0.5~2.5ms的信号,从而控制舵机角度。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 1.基础课程 -> 8.舵机控制.py

 1 from pico_car import pico_car
 2 Servo = pico_car()
 3 
 4 #180 servo S1 angle 0
 5 #the parameters are (steering gear number, steering gear angle)
 6 Servo.servo180(1,0)
 7 #270 servo
 8 Servo.servo270(2,90)
 9 #360 servo
10 Servo.servo360(3,360)

from pico_car import pico_car

使用pico_car 的pico_car,里面封装好了舵机驱动库。

Servo = pico_car()

初始化舵机。

Servo.servo180(1,0)

把180度PWM舵机S1角度设置为0度。

Servo.servo270(2,90)

把270度PWM舵机S2角度设置为90度。

Servo.servo360(3,360)

把360度PWM舵机S3角度设置为360度。

四、实验现象

程序下载完成之后,我们可以看到S1-S3插的180度舵机、270度舵机、360度舵机分别到0度、90度、360度的位置。

标签:Pin,课程,程序,Robot,oled,Pico,time,import
From: https://www.cnblogs.com/soliang/p/18105757

相关文章

  • 2、Pico Robot 开发环境搭建
    2.1更新固件1、按住Pico板上的按键,将pico通过MicroUSB线接到电脑的USB接口,然后松开按键。接入之后,电脑会自动识别到一个可移动盘(RPI-RP2)。2、将PicoRobot配套资料->附件->固件->pico_micropython_20210121.uf2固件文件,复制拖拽到RPi-RP2移动盘上。3、复制完成之......
  • 1、Pico Robot介绍
    1.1PicoRobot介绍PicoRobot是一款基于树莓派PICO开发板设计的智能小车,可供嵌入式设计人员、研究人员和学生等使用的开源机器人,小车自带超声波、光敏等传感器和OLED、红外接收,能够快速实现避障、遥控等功能。树莓派Pico是一款树莓派官方设计的低成本,高性能的微控制器开发板,具......
  • Pico Robot 小车
    1、PicoRobot介绍1.1PicoRobot介绍 1.2接口说明 1.3组装步骤 1.4电池及使用注意事项 1.5遥控操作1.6快速上手视频  2、开发环境搭建2.1更新固件2.2搭建开发环境 2.3下载例程和开机自启动 2.4导入库文件 3、基础课程3.1控制......
  • thinkphp+Laravel+vue实验室预约课程管理系统t1g73
     Laravel非常的简洁并且是开源的,Laravel是一个具有表现力、优雅语法的Web应用程序框架.Laravel是构建现代全栈Web应用程序的最佳选择.它的语法更富有表现力,拥有高质量的文档和丰富的扩展包,技术上它有Bundle扩展包、EloquentORM、反向路由、迁移、Restful控制器、自......
  • 使用幸狐LuckFox Pico Plus 板子搭载Alpine Linux,运行dotnet net6程序 闪烁一颗LED灯
    程序截图 实拍 性能消耗非常小的,就是对ROM有要求,SDK+程序占了40M 步骤1:按照链接教程刷入系统步骤2:修改以太信息步骤3:使用ssh登录系统步骤4:搭建dotnet环境,使用手动的方式先下载运行时包下载.NET6.0Runtime(v6.0.28)-LinuxArm32AlpineBinaries(microsoft.co......
  • 【课程设计/实训作品】python小区物业管理系统项目源码
    一直想做一款小区物业管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以评论。在线体验http://wuye.gitapp.cn/(账号:admin123密码:admin123)源码地址https://github.com/geeeeeeeek/python_wuye......
  • 温故而知新-基础课程篇【面试】
    温故而知新-基础课程篇【面试】前言推荐数据结构线性表树图查询排序算法题class034链表高频题目和必备技巧【算法】class035数据结构设计高频题【算法】class036二叉树高频题目-上-不含树型dp【算法】class037二叉树高频题目-下-不含树型dp【算法】class038经典递......
  • 学浪课程提取工具blog
    由于抖音的流行,带动了学浪的销售,有些人可能不知道学浪是什么,学浪其实就是抖音课堂的前身,既然学浪官方不提供下载选项,但是有需求就一定有解决需求的方案,这不,经过研究,终于研究出来了学浪下载工具这款学浪下载工具有需要的自己下载下来,我已经打包好了链接:https://pan.b......
  • Java开发千万别错过的好课程:Java版数据结构和算法+AI算法课程13
    AI人工智能时代,Java从业者必学科目精品课程推荐:Java版数据结构和算法+AI算法课程【点击开始学习】工作机会推荐和资源分享群:819391432学习地址:https://class.imooc.com/sale/fullstackalgo在当今数字时代,数据已成为驱动创新和决策的关键资源。为了在这个竞争激烈的世界......
  • 吴恩达2022机器学习专项课程(一) 4.1 梯度下降
    问题预览1.梯度下降算法的作用是?2.梯度下降如何计算线性回归的成本函数?3.所有的成本函数都是一个形状吗?4.在非凸形状中,梯度下降的更新过程是?5.在非凸形状中,不同的初值对最小化成本函数的影响是?6.什么是局部最小值?笔记1.梯度下降算法的作用梯度下降算法可以计算大多......