Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
MicroPython
国民技术_N32G45x
PikaScript
【N32G457 】基于RT-Thread和N32G457的Python智能小车
发布于 2022-03-19 15:08:49 浏览:967
订阅该版
[tocm] 【N32G457 】基于RT-Thread和N32G457的Python智能小车 【应用的背景】 智能小车在编程和嵌入式教育中是一个经典的案例,Python 是一种高级语言,有着易学,易用,抽象能力强,跨平台能力强的特点。 本项目中,使用 NG32G457 开发板,基于 PikaScript 超轻量级 Python 引擎,搭建了一个 Python 智能小车,这个项目在编程教育方面,有一定的参考价值。 【实现功能】 1. Python 交互式控制小车的各个轮子的转速。 2. Python 交互式读取红外传感器的返回值。 3. 使用 Python 编程,实现了小车的智能避障功能。 【开发板和RT-Thread使用情况概述】 开发板使用的是 RT-Thread 开发者大赛提供的 N32G457 评估板。 使用了开发板的 PWM, GPIO 功能。 使用了 RT-Thread 的 PikaScript 软件包,提供 Python 引擎。 使用了 PikaScript 的 pikaRTDevice 模块,驱动开发板的 PWM, GPIO。 使用了 PikaScript 的 pikaRTThread 模块,实现了延时和线程的挂起。 【硬件框架】 硬件包含以下几个部分: ![image.png](https://oss-club.rt-thread.org/uploads/20220325/ef5c4b52f035f1b75c52e33eacd43312.png) 1. 小车机械框架:小车底盘,电机,轮胎。 2. 电源电路和电池:3.7V 锂电池,锂电池充电电路。 3. 红外传感器。 4. 电机驱动电路。 5. NG32G457 主控制器。 【软件框架说明】 软件包含以下几个部分: ![image.png](https://oss-club.rt-thread.org/uploads/20220325/036b5b4dffe80b7f49020695a8ce7139.png) 1. NG32G457 的 BSP。 2. PikaScript 软件包。 3. PikaScript 模块管理文件 reqeustment.txt。 4. 控制小车的 Python 代码 main.py。 【软件模块说明】 1. NG32G457 的 BSP: 由 RT-Thread Studio 生成的模板工程。 2. PikaScript 软件包。 参考 [PikaScript 开发文档](https://pikadoc.readthedocs.io/zh/latest/%E4%BB%8E%20RT-Thread%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%BC%80%E5%A7%8B.html),使用 RT-Thread Studio 安装 PikaScript 软件包。 3. 在工程中的 packages/pikascript-latest/requestment.txt 中写入 PikaScript 需要安装的内核,模块及相应版本。 ``` pikascript-core==v1.4.1 PikaStdLib==v1.4.1 PikaStdDevice==v1.4.4 pikaRTThread==v1.1.1 pikaRTDevice==v1.0.0 ``` 4. 在 packages/pikascript-latest/main.py 中编写 Python 代码,实现小车的避障功能。 (1) 导入模块: ``` python import PikaStdLib import pikaRTThread import pikaRTDevice import PikaDebug ``` (2) 创建常用的工具对象: ``` python thread = pikaRTThread.Thread() #线程管理对象 mem = PikaStdLib.MemChecker() #内存监控对象 pdb = PikaDebug.Debuger() #调试器对象 print('mem use max:') mem.max() #打印当前的内存占用 ``` 编写硬件初始化代码: ``` python # A2 Ain1 = pikaRTDevice.GPIO() Ain1.setId(16) Ain1.setMode('out') Ain1.enable() # A4 Ain2 = pikaRTDevice.GPIO() Ain2.setId(20) Ain2.setMode('out') Ain2.enable() # A6 Apwm = pikaRTDevice.PWM() Apwm.setName('tim3pwm1') Apwm.setChannel(1) Apwm.setFreq(1000) Apwm.setDuty(0) Apwm.enable() # A3 Bin1 = pikaRTDevice.GPIO() Bin1.setId(17) Bin1.setMode('out') Bin1.enable() # A5 Bin2 = pikaRTDevice.GPIO() Bin2.setId(21) Bin2.setMode('out') Bin2.enable() # A7 Bpwm = pikaRTDevice.PWM() Bpwm.setName('tim3pwm2') Bpwm.setChannel(2) Bpwm.setFreq(1000) Bpwm.setDuty(0) Bpwm.enable() #PC4 sensor1 = pikaRTDevice.GPIO() sensor1.setId(24) sensor1.setMode('in') sensor1.setPull('up') sensor1.enable() #PC5 sensor2 = pikaRTDevice.GPIO() sensor2.setId(25) sensor2.setMode('in') sensor2.setPull('up') sensor2.enable() ``` (3) 编写电机控制代码: ``` python def motor1(speed: float): if speed > 0: Ain1.high() Ain2.low() Apwm.setDuty(speed) else: Ain1.low() Ain2.high() Apwm.setDuty(-speed) def motor2(speed: float): if speed > 0: Bin1.high() Bin2.low() Bpwm.setDuty(speed) else: Bin1.low() Bin2.high() Bpwm.setDuty(-speed) ``` (4) 编写小车的避障功能: ``` python def go(): while True: if not sensor2.read(): print('turn right...') motor1(0.6) motor2(-0.6) elif not sensor1.read(): print('turn left...') motor1(-0.6) motor2(0.6) else: print('forword...') motor1(0.6) motor2(0.6) ``` (5) 启动小车: ``` python go() ``` 【作品完整图片】 ![微信图片_20220319154920.jpg](https://oss-club.rt-thread.org/uploads/20220319/e822a487cdd9de25f3411312e98385b2.jpg.webp) ![微信图片_20220319154927.jpg](https://oss-club.rt-thread.org/uploads/20220319/218ce4fbe05868a5c5bec1f7f2348f98.jpg.webp) ![微信图片_20220319154932.jpg](https://oss-club.rt-thread.org/uploads/20220319/78aeba9fb9118d3e4380d42281e86c2a.jpg.webp) 【视频演示效果】 [https://www.bilibili.com/video/BV1DY411n7eD/](https://www.bilibili.com/video/BV1DY411n7eD/) 【代码地址】 1. Python 小车项目仓库:[https://gitee.com/Lyon1998/n32g45](https://gitee.com/Lyon1998/n32g45) 2. PikaScript 项目主仓库:[https://gitee.com/lyon1998/pikascript](https://gitee.com/lyon1998/pikascript)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
mimilib
这家伙很懒,什么也没写!
文章
1
回答
1
被采纳
1
关注TA
发私信
相关文章
1
请问rt-thread有没有移植micropython呢
2
micropython import 文件名的方式执行脚本问题
3
第一篇:Micropython 的起源和发展
4
第二篇:RT-Thread Micropython 简介
5
第三篇:RT-Thread Micropython 快速入门
6
第四篇:Micropython DIY 项目汇总
7
第五篇:Micropython 教程和资源
8
第六篇: RT-Thread MicroPython 学习经验和学习路线
9
RT-Thread MicroPython 最新开发板固件汇总【已失效】
10
有Mpy专门的板块啦~
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部