惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
博客园_首页
博客园 - 【当耐特】
量子位
S
SegmentFault 最新的问题
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
T
Tailwind CSS Blog
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
Y
Y Combinator Blog
博客园 - 聂微东
The Cloudflare Blog
小众软件
小众软件
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
H
Help Net Security
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享

博客园 - vidorlee

GitHub退款申请经验分享 C# 如何避免在基类中实现所有接口同时也不让每个子类重复实现 CoreXY运动结构工作原理 最佳的实现Winfrom无边框四周阴影方案 在VS2022上安装pygame模块 漫谈Winform控件优化之圆角矩形边框处理 C#中设置自定义控件工具箱图标 讨论TableLayoutPanel加载缓慢和闪烁问题解决方案 关闭Windows 10自动更新的方法 MVVM模式开发WinForm-ReactiveUI C#单例模式的用途 TensorFlow基本使用教程 C#自定义事件的写法 C#多线程Task创建 PropertyChanged.Fody自动通知属性插件 5、Pico Robot 机器人课程 3、Pico Robot 基础开发课程 2、Pico Robot 开发环境搭建 1、Pico Robot 智能小车平台介绍
4、Pico Robot 传感器进阶课程
vidorlee · 2024-03-30 · via 博客园 - vidorlee

4.1 光敏传感器

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的光敏传感器、OLED结合进行实验。

2. 了解光敏传感器的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的光敏传感器、OLED,运行之前请把跳线帽接到Light排针

image-20220302122626662

image-20220302143513255

光敏电阻是用硫化镉或硒化镉等半导体材料制成的特殊电阻器,其工作原理是基于内光电效应。光照愈强,阻值就愈低,随着光照强度的升高,电阻值迅速降低。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 2.传感器进阶课程 -> 1.光敏传感器.py

使用pico_car 的SSD1306_I2C。

import time

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

from machine import Pin, I2C, ADC

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言,这里用了Pin、ADC和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参数传进去。

light1 = machine.ADC(27)

初始化ADC端口27,光敏传感器一共两个,分别设置了27和26脚。

oled.text(str(LightS1), 60, 0)

将光敏的值转换成字符串显示在OLED的60,0位置。

oled.show()

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

oled.fill(0)

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

LightS1 = light1.read_u16()

light1.read_u16()函数用来检测声音传感器的值,赋值给变量LightS1。

四、实验现象

程序下载完成之后,我们可以看到OLED第一行显示光敏传感器1的值 ,第二行显示光敏传感器2的值,同时Shell也会打印光敏传感器数值,用手挡住光敏传感器,数值会发生变化。

image-20220302123024501

4.2 声音传感器

注意:为了防止误触发,声音传感器设置的检测基准值较大,识别效果不好的话可以适当修改检测基准值,或者声音传感器吹气来触发。

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的声音传感器、OLED结合进行实验。

2. 了解声音传感器的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的声音传感器、OLED,运行之前请把跳线帽接到Voice排针

image-20220302110753097

image-20220302143605065

传感器内置一个对声音敏感的电容式驻极体话筒,声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压,这一电压通过运算放大转化成合适的电压,并传送给PICO开发板,因为没有检测噪音的能力,使用时尽量在较安静的环境中。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 2.传感器进阶课程 -> 2.声音传感器.py

使用pico_car 的SSD1306_I2C。

import time

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

from machine import Pin, I2C, ADC

机器库包含MicroPython需要与Pico和其他MicroPython兼容的设备通信的所有指令,扩展了物理计算的语言,这里用了Pin、ADC和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参数传进去。

Sound = machine.ADC(27)

初始化ADC端口27。

oled.text(str(sounds), 50, 0)

将声音的值转换成字符串显示在OLED的50,0位置。

oled.pixel(i, 30, 1)

在i,30的位置显示一个点,通过for循环绘图显示在OLED上。

oled.show()

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

oled.fill(0)

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

sounds = Sound.read_u16()

Sound.read_u16()函数用来检测声音传感器的值,赋值给变量sounds。

四、实验现象

程序下载完成之后,我们可以看到OLED第一行显示 Sound的值 ,第二行显示声音的音量大小,对着声音传感器吹气,数值会变化而且音量会波动,同时在Shell也可以看到数值。

image-20220302140811503

注意,声音传感器检测值会受到电池电量的影响,建议先测试再调整比较值,测试的时候建议关闭电机、RGB灯等功耗较高的负载。

4.3 巡线传感器

注意:巡线传感器会受到光线影响,请在室内无太阳光照的环境下运行程序,以减少太阳光对巡线传感器的干扰。并且在巡线时需保持室内光线充足。

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的巡线传感器、OLED结合进行实验。

2. 了解巡线传感器的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的巡线传感器、OLED。

image-20220302151738285

巡线传感器是利用红外线来进行数据处理的一种传感器,有灵敏度高等优点,传感器上有一个红外发射管和一个红外接收管,当地面为黑色,吸收所有光, 接收管电阻增大,当地面为白色,反射所有光,接收管电阻减小,再通过板上的电压比较电路,把检测到的状态变成0/1的数值。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 2.传感器进阶课程 -> 3.巡线传感器.py

使用pico_car 的SSD1306_I2C。

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参数传进去。

Tracing_1 = machine.Pin(2, machine.Pin.IN)

初始化引脚2作为巡线传感器1的脚,设置为输入。

oled.text('T1', 5, 0)

设置OLED在5,0的位置显示字符 'T1'。

oled.show()

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

oled.fill(0)

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

Tracing_1.value()

Tracing_1.value()函数用来检测对应端口的电平高低,在上面的程序中,识别到0和1之后,通过oled.pixel在OLED上绘图。

四、实验现象

程序下载完成之后,我们可以看到OLED第一行显示 'T1 T2 T3 T4' ,第二行显示各个传感器的值,第三行通过绘图显示检测到黑色或是白色,同时Shell也会显示检测结果。

image-20220302151809246

4.4 超声波传感器

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的超声波传感器、OLED结合进行实验。

2. 了解超声波传感器的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的超声波传感器、OLED。

image-20220302143646512

人耳能听到的超声波频率范围大概是20Hz-20KHz,我们把频率高于20KHz的声波称为超声波,超声波具有良好的方向性,超声波与普通声波一样,也具有反射、折射、衍射、散射等特点,但是超声波的波长较短,有的是几厘米,最低可至千分之几毫米。波长越短,声波的衍射特性就越差,可以在介质中稳定地进行直线传播,因此波长较短的超声波具有很强的直线传播能力。

超声波传感器是根据超声波的一些特性制造出来的,用于完成对超声波的发射和接收,内部的换能晶片受到电压的激励而发生振动产生超声波,超声波的频率高、波长短、方向性好、可以线性传播,而且它在遇到杂质等物体时会发生反射现象,从而产生回波,通过计算发射和接收到回波的事件,我们就可以计算出到物体的距离,从而实现测距。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 2.传感器进阶课程 -> 4.超声波传感器.py

使用pico_car 的SSD1306_I2C和ultrasonic,这是我们封装好的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参数传进去。

ultrasonic = ultrasonic()

初始化超声波测距。

distance = ultrasonic.Distance_accurate()

将超声波测距返回的数值,赋值给变量distance 。

oled.show()

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

oled.fill(0)

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

oled.text(str(distance), 75, 0)

将距离转换为字符串,显示在OLED的75,0位置上。

四、实验现象

程序下载完成之后,我们可以看到OLED显示 'distance: ' 和测量出来的距离,数值会根据测量结果改变,同时Shell也会显示测量的距离。

image-20220302143736660

注意,超声波最短测量距离在2-3cm。

4.5 红外遥控显示

一、学习目标

1. 学习树莓派Pico主板和小车扩展板的红外接收、OLED结合进行实验。

2. 了解红外接收的使用。

二、硬件使用

本次课程使用PICO主板以及小车扩展板的红外接收、OLED,在这个例程里我们还需要使用红外遥控器来发射红外数值给红外接收。

image-20220217112649860

image-20220321093338725

红外线的光谱位于红色光之外, 波长是0.76~1.5μm,比红光的波长还长。红外遥控是利用红外线进行传递信息的一种控制方式,红外遥控具有抗干扰,电路简单,容易编码和解码,功耗小,成本低的优点。红外遥控几乎适用所有家电的控制。红外接收头中内置了光电元件,可以接收到对应波长的红外光,转换成数字信号,通过读取信号数值,判断不同的遥控按键。

三、程序分析

完整程序位置:Pico Robot配套资料 -> 附件 -> 课程程序源码 -> 2.传感器进阶课程 -> 5.红外遥控显示.py

from pico_car import SSD1306_I2C, ir

使用pico_car 的SSD1306_I2C和ir,这是我们封装好的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参数传进去。

Ir = ir()

初始化红外遥控。

value = Ir.Getir()

读取红外遥控数值,赋值给变量value。

oled.show()

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

oled.fill(0)

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

oled.text('Press:Power', 0, 0)

将对应的按键,显示在OLED上,例如按下电源键显示 'Press:Power'。

四、实验现象

程序下载完成之后,按下遥控器按键,OLED上会显示对应的按键名,同时Shell也会显示对应按键值。

image-20220302143907708

按键Shell打印键值OLED显示
电源 0 Press:Power
向上 1 Press:Up
2 Press:Light
向左 4 Press:Left
声音 5 Press:Sound
向右 6 Press:Right
左旋 8 Press:Turn Left
向下 9 Press:Down
右旋 10 Press:Turn Right
+ 12 Press:+
0 13 Press:0
- 14 Press:-
1 16 Press:1
2 17 Press:2
3 18 Press:3
4 20 Press:4
5 21 Press:5
6 22 Press:6
7 24 Press:7
8 25 Press:8
9 26 Press:9