[AI人工智能教程]LattePanda&AI-Python控制Arduino LED灯 精华

查看: 414|回复: 4

[AI人工智能教程] LattePanda&AI-Python控制Arduino LED灯

[复制链接]
本帖最后由 铁甲小宝 于 2020-9-3 17:58 编辑

LattePanda&AI-Python控制Arduino LED灯

概述
——————————————————————————————————————————
Hello World是所有编程语言学习的第一课,但是在单片机学习中,我们的Hello World叫做Blink。Blink是什么意思呢?闪烁。其实Blink就是点亮单片机上的板载LED灯,并让它闪烁的一个程序。
222.jpg

本项目中我们将在LattePanda上,使用JupyterLab编写Blink程序,调用PinPong库来使Arduino UNO上的板载LED灯闪烁。

使用教学
——————————————————————————————————————————


项目基础
——————————————————————————————————————————

点亮板载LED灯
Arduino UNO上有自带的LED灯,它与D13口相连,我们编写程序来让它闪烁吧!
图片2.png

硬件准备
主控:Arduino UNO
连接线:TypeAtoB 方口USB连接线
连接方式:使用连接线连接LattePanda与UNO

启动JupyterLab
连接好硬件后,打开程序开发环境JupyterLab,创建项目。

1、双击桌面上的“startpage.sh”,弹出JupyterLab界面;

图片3.png

2、切换到“home/lattepanda/桌面/LattePanda&AI项目实战/LattePanda&AI-Python控制Arduino LED灯”项目文件目录下;

图片4.png

3、在右侧的“Launcher”页面中点击“Python3”,新建一个python3文档;

图片5.png

[size=10.5000pt]4、选中新建的python3文档,右击后弹出选项框,选择“Rename”,将文件重命名为“Blink(板载LED)”;


图片6.png
图片7.png


程序编写
项目文件创建好后,开始编程!

[size=10.5000pt]1、在当前单元格中编写程序,为了使程序结构清晰,以及便于调试,我们建议你将不同功能的代码块放置于不同单元格内;

图片8.png

样例代码:

图片9.png
[mw_shl_code=python,false]#调用时间模块和pinpong库
import time
from pinpong.board import Board,Pin

#初始化,手动识别板型和端口号(lattepanda delta自带leonard,uno教育版需通过"!pinpong"指令查看uno端口并手动设置)
Board("uno", "/dev/ttyUSB0").begin()

#引脚初始化为电平输出
led = Pin(Pin.D13, Pin.OUT)

#主程序,使LED闪烁的死循环
while True:                 #死循环
  led.write_digital(1)      #输出高电平
  time.sleep(1)             #等待1秒 保持状态

  led.write_digital(0)      #输出低电平
  time.sleep(1)             #等待1秒 保持状态[/mw_shl_code]

2、点击第一个单元格使其被蓝色框选,多次点击“运行”直至最后一个单元格被启动;

图片10.png

3、查看效果,Arduino Uno上的板载LED会按照亮1秒,熄灭1秒的规律闪烁;

4、如果我们想要修改小灯闪烁的频率,应该怎么修改程序?只需要修改代码中延时部分的时长即可。如图所示修改后的效果为小灯点亮2秒,熄灭1秒。

图片11.png

点亮外接LED灯
——————————————————————————————————————————


硬件准备:
主控:Arduino UNO、IO 传感器扩展板 V7.1
模块:LED发光模块
硬件连接图

图片1666.jpg

*将扩展板接入Arduino Uno主控板上,组装时注意对准后再压入,以防压弯插针。
*将LED模块接入10号数字引脚。

程序编写
1、我们在接线的时候将外接LED接到了10号引脚,所以我们需要修改程序才可以点亮这颗外接的小灯,将LED_PIN 对应的引脚修改为10。

图片13.png
[mw_shl_code=python,false]#调用时间模块和pinpong库
import time
from pinpong.board import Board,Pin

#初始化,自动识别板型和端口号
Board("uno", "/dev/ttyUSB0").begin()

#引脚初始化为电平输出
led = Pin(Pin.D10, Pin.OUT)

#主程序,使LED闪烁的死循环
while True:                 #死循环
  led.write_digital(1)      #输出高电平
  time.sleep(1)             #等待1秒 保持状态

  led.write_digital(0)      #输出低电平
  time.sleep(1)             #等待1秒 保持状态[/mw_shl_code]

2、如何编写程序使小灯有一个呼吸灯的效果?示例程序如下,运行程序,小灯就会循环执行渐渐变亮、最亮时熄灭的命令。

图片14.png

项目进阶

——————————————————————————————————————————

数字信号与模拟信号
你知道什么是数字信号什么是模拟信号吗?让我们先看看数字信号与模拟信号的概念吧。
7777.jpg

光看概念感觉特别抽象,那么我们用生活中的实例来理解,比如我们平时用到的用于开关灯的开关,开和关是两个状态,非开即关。那么对灯来说开和关就是数字信号。再想想家中如果有一个温度计的话,温度变化是一个连续变化的的数值,并不能用某个特殊的状态来表示,温度的变化就是模拟信号。

在理解了数字信号与模拟信号之后,思考一下,在本项目中控制LED灯亮灭的信号是数字信号还是模拟信号?


硬件分析
不知道同学们有没有注意到,我们在第二个呼吸灯案例的时候,LED灯是接在10号数字引脚上的,但是按照数字信号和模拟信号的概念来看,应该是模拟信号才能实现呼吸灯的效果。这里就需要我们了解一个新的知识点,PWM信号。

观察我们手中的Arduino UNO主控板的数字引脚上,是不是有些引脚号旁边有*标记(有些板子是波浪号~)这些引脚就是支持PWM信号输出的引脚。

PWM(Pulse width modulation,中文名脉冲宽度调制),脉冲宽度调制是一种模拟控制方式。在Arduino中pwm是不断的做高低电平切换模拟出一种近似模拟量的输出的效果来实现变化的。但是这里仅仅得到了近似模拟值输出的效果,如果要输出真正的模拟值,还需要在模拟引脚上执行。

附录
——————————————————————————————————————————
如你需要深入了解pinpong库,你也可以访问官方教程网站(链接跳转https://pinpong.readthedocs.io/zh_CN/latest/index.html



pATAq  版主

发表于 2020-8-18 14:45:02

感谢分享,学到了新知识,支持dfrobot的新项目。
不过请问pingpang和其他交互firmata的python库有什么区别和优势,可以介绍下吗
回复

使用道具 举报

铁甲小宝  中级技师
 楼主|

发表于 2020-8-18 16:39:15

pATAq 发表于 2020-8-18 14:45
感谢分享,学到了新知识,支持dfrobot的新项目。
不过请问pingpang和其他交互firmata的python库有什么区别 ...

pinpong是基于pymata4 开发的,支持的模块更多,支持调用树莓派的板载资源
回复

使用道具 举报

pATAq  版主

发表于 2020-8-18 20:08:09

铁甲小宝 发表于 2020-8-18 16:39
pinpong是基于pymata4 开发的,支持的模块更多,支持调用树莓派的板载资源

赞,持续关注。请问你是df的开发人员吗
回复

使用道具 举报

hnyzcj  版主

发表于 2020-8-19 07:42:52

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail