树莓派Pico的一些有趣的基本实验

▲ 实验电路板

Raspberry PI Pico小型MCU模块,以其价格低廉,功能丰富,开发方便为很多非电子类专业的同学进行创意项目原型设计提供了方便的平台。下面的一些实验给CDIE课程设计同学们制作的一些基本演示实验。

▌01 PI Pico实验板


RASPBERRY PI PICO 开发板 基础测试[1] 给出了对PI Pico开发板的基本设置,通过 安装Thonny开发环境[2] 可以方便对Pi Pico进行初步的开发。

▲ Pi Pico电路板的正反面

本文下面根据 Raspberry  Pi Pico Python SDK[3] 中给的示例,对PI Pico的一些基本模块进行测试。

关于Pi Pico的管脚配置,可以参见 Pi Pico数据手册[4] 中给出的Pi Pico管脚图定义:

▲ Pi Pico管脚功能定义图

更多PiPico的资料可以从:Pi Pico官方网站[5] 获得。

▌02 基本测试


1.Flash LED on board

from machine                import Pin,Timer
from time                   import sleep_usled = Pin(25, Pin.OUT)
tim = Timer()print("Flash LED.")def tick(timer):global ledled.toggle()tim.init(freq=2, mode=Timer.PERIODIC, callback=tick)

▲ 实验电路板

2.UART

(1)测试程序

from machine                import UART,Pin,Timer
from time                   import sleep_usuart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1), bits=8, parity=None, stop=1)
led = Pin(25, Pin.OUT)tim = Timer()print("Send UART.")def tick(timer):global uart, ledled.toggle()uart.write(b'\x55')tim.init(freq=10, mode=Timer.PERIODIC, callback=tick)
▲ 测试Pin(0)
▲ 测量Pin(0)的波形

3.ADC

通过ADC通道4,读取芯片内部温度。在此过程中,使用手触摸Pi Pico表面加热,或者使用酒精喷洒芯片表面进行降温。

▲ 读取芯片内部的温度
import machine
import utimesensor_temp = machine.ADC(4)
conversion_factor = 3.3/(65535)while True:read = sensor_temp.read_u16() * conversion_factortemperature = 27 - (read - 0.706) / 0.001721print(temperature)utime.sleep(2)
▲ 显示读取的温度值
▲ 读取的温度数值变化

4.PWM

(1)PWM驱动LED

控制板载LED的波形是PWM运行。

from machine                import Pin,PWM
import timepwm = PWM(Pin(25))pwm.freq(1000)duty = 0
direction = 1for _ in range(16*255):duty += directionif duty > 255:duty = 255direction = -1elif duty < 0:duty = 0direction = 1pwm.duty_u16(duty*duty)time.sleep(0.001)

PWM是软件PWM,它可以设置在任意管脚上。初步测试过Pin0, 15, 16等等。都具有相类似波形。

▲ Pin25(驱动LED)的波形变化
▲ LED亮度变化

(2)PWM驱动舵机

舵机使用频率为50Hz,脉冲宽度cs 1.0 ~ 2.0ms的脉冲作为控制信号。下面是产生基本舵机位置中间时的输出控制脉冲。

from machine                import Pin,PWM
import timepwm = PWM(Pin(15))pwm.freq(50)
pwm.duty_u16(4915)

舵机具有三个接线:

  • 棕色:GND

  • 红色:+4.5 ~ +6V

  • 黄色:指令脉冲信号

▲ 舵机及其接口

计算Duty_16公式为:

对应脉冲宽度与duty_u16之间的关系:

脉冲宽度(ms)duty u16
13277
1.54915
26554

▲ 输出50Hz,1.5ms脉冲宽度
▲ 变化的PWM波形驱动舵机旋转
from machine                import Pin,PWM
import timepwm = PWM(Pin(16))pwm.freq(50)for _ in range(100):pwm.duty_u16(3276)print("Out pulse width : 1ms")time.sleep(1)print("Out pulse with : 2ms.")pwm.duty_u16(6553)time.sleep(1)

(3)PWM+ADC实验

使用电位器将改变的电压引入ADC(0),由单片机获得对应的ADC数值,改变PWM输出,使其输出的时间宽度从1ms等比例变化到2ms。

▲ 将电位器输入ADC(0)

可以看到舵机的输出角度随着电位器的改变而发生变化。

▲ 旋转电位器改变舵机的角度
from machine                import Pin,PWM
import timepwm = PWM(Pin(16))pwm.freq(50)control = machine.ADC(0)for _ in range(1000):adc = control.read_u16()duty = int(adc * (6553-3276)/0xffff) + 3276pwm.duty_u16(duty)time.sleep(0.1)

5.中断IRQ

使用管脚PIN2的下降沿产生中断。示例程序如下:

from machine                import Pinp2 = Pin(2, Pin.IN, Pin.PULL_UP)p2.irq(lambda pin:print("IRQ with flag:",pin.irq().flags()),Pin.IRQ_FALLING)

使用跳线将PIN2接地。每一次等会触发中断发生一次。

▲ 将PIN2接地可以看到触发了中断

▌结论


通过几个基础的Pi Pico实验,初步给出了该模块的应用实例。

参考资料

[1]

RASPBERRY PI PICO 开发板 基础测试: https://zhuoqing.blog.csdn.net/article/details/114037888

[2]

安装Thonny开发环境: https://zhuoqing.blog.csdn.net/article/details/114064833

[3]

Raspberry  Pi Pico Python SDK: https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-python-sdk.pdf

[4]

Pi Pico数据手册: https://datasheets.raspberrypi.org/pico/pico-datasheet.pdf

[5]

Pi Pico官方网站: https://www.raspberrypi.org/documentation/rp2040/getting-started/

温馨提示

由于微信公众号近期改变了推送规则,如果您想经常看到我们的文章,可以在每次阅读后,在页面下方点一个「赞」或「在看」,这样每次推送的文章才会第一时间出现在您的订阅列表里。


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gabor变换

gabor变换分析非平稳信号有弊端主要是时频窗宽度固定 小波wavelet a小窗窄a大窗宽 窗口或短时傅氏变换在时域上和频域上的局部化程度主要由窗函数g(x)的有效时宽Δt 和有效带宽Δf 决定。Δt 和Δf 越小, 表明局部性越好。但Heisenberg 测不准原理指出[ 6] :Δt 和Δf 不可能任…

30块钱的树莓派跑unix系统,源码全部开源,香

▌ 1、前言之前做活动抽奖送的几个树莓派&#xff0c;但是因为好几个人都没有填写地址&#xff0c;所以就只能把东西寄回来给我&#xff0c;然后手痒自己玩了下&#xff0c;觉得这个东西确实很香&#xff0c;比一般的Linux开发板都好。PICO这个开发板可以玩很多东西1 、运行pic…

CoInitialize\CoCreateGuid\CoCreateInstance

CoInitialize是Windows提供的API函数&#xff0c;用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数&#xff08;除CoGetMalloc和内存分配函数&#xff09;之前必须初始化com库。 https://baike.baidu.com/item/CoInitialize/4114580?fraladdin CoCreateGui…

产品设计体会(8001)产品经理工作手册

产品经理的工作是最具挑战性的工作之一。产品经理职责描述产品经理的全部责任在于通过了解不断变化的市场需求和优化产品推向目标市场的全过程&#xff0c;将企业的不同组成部分凝聚成一个战略上一致集中的整体&#xff0c;同时将一项产品的价值最大化。产品经理的全部职责在于…

Oracle11gR2_ADG管理之恢复主库的truncate表实战

备库开启flashback database #关闭备库的同步 SQL> alter database recover managed standby database cancel;Database altered.SQL> select flashback_on from v$database;FLASHBACK_ON ------------------ NOSQL> alter database flashback on;Database altered.SQ…

为什么大家都只谈薪资,却不谈梦想?

说个薪资的问题&#xff0c;最近在帮一个朋友物色工作&#xff0c;当然&#xff0c;除了我那个朋友以外&#xff0c;也有挺多同学向我咨询offer薪资的问题。先说我那个朋友。高中毕业后去当兵&#xff0c;服兵役结束后去4s店修车&#xff0c;我车子的很多问题也会向他咨询&…

获取指定地址的值

C语言 —— 获取指定地址的值 int b *((volatile unsigned int *)0x0028FF1C);// 0x0028FF1C就是内存中的地址&#xff0c;根据自己需要指定 #include <stdio.h> #include <stdlib.h>int main() {int b *((volatile unsigned int *)0x0028FF1C);printf("b…

IAudioEndpointVolume

IAudioEndpointVolume https://docs.microsoft.com/en-us/windows/desktop/api/endpointvolume/nf-endpointvolume-iaudioendpointvolume-setmute

DataTable.Compute功能

DataTable.Compute具有这么多的功能 1&#xff1a;聚合函数”Sum()” 2&#xff1a;自由计算表达式“20*301” 3&#xff1a;bool表达式“12” 4&#xff1a;IFF逻辑表达式” IIF(20>1000, 0, 1)” //还支持IsNull&#xff0c;Trim&#xff0c;SubString等 一个小应用&#…

Linux下查看内存使用情况方法总结

Linux下查看内存使用情况方法总结转载于:https://www.cnblogs.com/cdyboke/p/8689270.html

差生的 8 年程序员总结

今年终于从大菊花厂离职了&#xff0c;离职前收入大概60w不到吧&#xff0c;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了&#xff0c;也有更多事情做错了&#xff0c;在这里记…

关闭windows垃圾服务

Windows集成了许多功能和服务&#xff0c;所以在很多领域得以应用&#xff1b;但是有很多服务是我们个人用户所用不到的&#xff0c;开启只会浪费内存和资源&#xff0c;并且成为***和病毒***的靶子&#xff0c;而且&#xff0c;还影响启动速度和运行速度。关掉大部分没用的服务…

Python简单的抓取静态网页内容

import requests from bs4 import BeautifulSoup res requests.get(http://news.sina.com.cn/china/)#获取目标网页 res.encoding utf-8#抓取网页出现乱码 #print(res.text) soup BeautifulSoup(res.text,html.parser)#爬取网页 for news in soup.select(.news-item): if le…

SystemTray.cpp

SystemTray.cpp _tcscpy _tcscpy 把参2复制到参1并返回参1 _tcscpy是一个拷贝字符串&#xff0c;源字符串指针是strSource&#xff0c;有strcpy、wcscpy、_mbscpy三种类型&#xff0c;这三种形式都返回目标字符串。 函数原型 char *strcpy( char *strDestination, const cha…

直观感受电路信号波形:半波整流电路

前言电子电路的理论很抽象&#xff0c;所以多看电子电路的信号波形&#xff0c;对掌握理论知识非常有帮助。让我们通过形象的电路信号波形&#xff0c;直观地了解电路的世界&#xff01;半波整流电路半波整流电路&#xff0c;电路图很简单&#xff0c;通过一个二极管实现半波整…

【nodejs】安装browser-sync 遇到错误提示

首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题&#xff1a; 因为不被允许所以我只能不安装全局了&#xff1a; 但是又出现了如下的新问题 纠结了半个小时&#xff0c;终于知道为什么会出现这个问题了&#xff0c; node只有--global or -g才是全局安装的包&#x…

本机获取Intel AMT IP地址的例子

转自&#xff1a;http://software.intel.com/zh-cn/blogs/2009/02/10/intel-amt-ip/?cidsw:51cto Intel AMT的IP地址设置有两种模式&#xff1a;静态IP和动态IP。 在动态IP&#xff0c;也就是DHCP自动分配的情况下&#xff0c;本机的操作系统起来后&#xff0c;Intel AMT的I…

ViceDinoSpecCtrl.cpp

tagCR_INSTALL_INFOA Struct Reference http://repo.isis.vanderbilt.edu/doxygen/gme/nightly/structtagCR__INSTALL__INFOA.html CWinApp::ExitInstance 由框架调用内Run成员函数以退出应用程序的此实例。 virtual int ExitInstance(); 返回值 应用程序的退出代码;0 表…

虚拟化之四:虚拟化备份策略已成数据安全的焦点!

随着虚拟化如潮流般的涌入&#xff0c;虚拟化越来越受到企业的关注和应用&#xff0c;随之而来的是使得现有的一系列数据备份和灾难恢复策略受到动摇。因为面对全新的虚拟化环境&#xff0c;这些策略明显已经无法满足用户的安全保障需求--一专家冷静的发表了如上的看法。这在过…