【得捷电子Follow me第2期】+ 项目总结
[复制链接]
本帖最后由 lugl4313820 于 2023-10-21 12:32 编辑
【感谢】
感谢EEWORLD与得捷电子提供了这次非常有意义的活动
活动的链接:Follow me 第2期!与得捷电子一起解锁开发板超能力! (eeworld.com.cn)
【项目介绍】
【项目总结】
任务1:控制屏幕显示中文
【得捷电子Follow me第2期】任务1 显示中文 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
【心得体会】
- 开发板提供了cicuitPython的board库,同时也提供了显示屏的驱动库,再就是有乔老师的教学视频与源码,使得我们可以快速的实现自己想要的功能。
- 第一个任务的难点是创建开发环境,下载cicuitPython固件,再有就是选择合适的中文字库,这些前期有了老师提供的源码与字库,也是可以轻松的完成任务的。
- 值得大家注意的是中文字库不能选择太大的,会提示下载不下文件的错误提示。
任务2:网络功能测试
得捷电子Follow me第2期】任务2:网络功能使用 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
实现效果:
【心得体会】
- 此任务,也是官方提供了标准的wifi库,根据老师的提示可以快速的实现联网功能,同时结合任务1的前提,我们可以轻松实现联网与IP地址的展示。
- 值得注意是,在ssd与pwd的设置需要正确输入,要不会造成获取IP失败。
任务3 驱动WS2812B
【得捷电子Follow me第2期】任务3 控制WS2812B - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
【心得体会】
官方给出的开发板的标准的ws2812的驱动示例,我们只需要按照示例来就可完成任务。
值得注意的是我们如何实现多彩的显示、多颗ws2812的显示,需要进一步的学习他的库,因为我自己的多颗ws2812,所以没有深入的进行学习。大家可以结合乔老师的教程可以轻松的实现难度大一点的任务。
任务4-1:日历&时钟&天气
【得捷电子Follow me第2期】任务4-1:日历&时钟&天气 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
【心得体会】
在任务2的基础之上,实现这个任务也是能轻松的完成的。
实现日期、时间、天气的获取的关键是城市代码的获取。adafruit_requests模块的使用,最后是json的解析,这方面,前面的一些大佬已经把任务做出来了,我们把他们的代码学习后就可以实现这个任务。
这次的任务只实现了单次的获取,如果要深一步的实现,可以通过定时来获取天气状态,再就是利用cicuitPython的RTC模块来实现时间的设定与读取。
【扩展任务】摇杠控制机械臂
【目的】
通过摇杠来实时控制机械臂
【实现步骤】
- 采用ADC采集摇杠,判断出哪几个按键按下。
- 初始化两个PWM为50Hz的PWM波。
- 根据摇杠的状态,输出控制信号。
【代码实现】
- 引入库
import board
import os
import time
import analogio # 读取ADC
import pwmio # PWM库
- 实初化PWM指定引脚
piezox = pwmio.PWMOut(board.A2, #引脚这A2
duty_cycle=0, #占空比为50%
frequency=50, # 频率为50Hz,产生20ms的PWM波来驱动舵机
variable_frequency=False)
piezoy = pwmio.PWMOut(board.A2, #引脚这A2
duty_cycle=0, #占空比为50%
frequency=50, # 频率为50Hz,产生20ms的PWM波来驱动舵机
variable_frequency=False)
- 初始化摇杠的ADC:
analog_x = AnalogIn(board.A0)
analog_y = AnalogIn(board.A1)
- 读取摇杠的ADC数值,来判断当前的摇杠所在的方向:
def get_x_state():
x_value = analog_x.value
# print("x_value" + str(x_value))
if 34000 > x_value >31000:
return 0 # x释放
elif x_value < 20000:
return 1 # x 往左
elif 50000 > x_value > 40000:
return 2 # x 往右
elif x_value >60000:
return 3 # x键压下
return 0
def get_y_state():
y_value = analog_y.value
# print("y_value" + str(y_value))
if 34000 > y_value >31000:
return 0 # y释放
elif y_value < 20000:
return 1 # y 往下
elif y_value > 40000:
return 2 # y 往上
return 0
- 根据当前的状态,实时修改PWM的占空比来实现机械臂的位置,实现实时控制的目的:
# 65535 = 20ms
# t = 0.5ms——————-舵机会转到 0 ° 65535 // 40 = 1638
# t = 1.0ms——————-舵机会转到 45° 65535 // 20 = 3276
# t = 1.5ms——————-舵机会转到 90° 65535 // = 4915
# t = 2.0ms——————-舵机会转到 135° 65535 // 10 = 6553
# t = 2.5ms——————-舵机会转到 180° 8191
min_x = 1638
min_y = 1638
max_x = 8300
max_y = 5553
this_x = 4951 #开机在90度位置
this_y = 4051
x_step = 100
y_step = 100
while True:
x_sta = get_x_state()
y_sta = get_y_state()
if x_sta == 1:
this_x = this_x-x_step
if this_x < min_x:
this_x = min_x
elif x_sta == 2:
this_x = this_x + x_step
if this_x > max_x:
this_x = max_x
elif x_sta == 3:
this_x = 4915
this_y = 4051
if y_sta == 2:
this_y = this_y-y_step
if this_y < min_y:
this_y = min_y
elif y_sta == 1:
this_y = this_y + y_step
if this_y > max_y:
this_y = max_y
# 更新 pwm
piezoy.duty_cycle = this_y
piezox.duty_cycle = this_x
time.sleep(0.1)
到此,程序编写就完成了。源码如下:
import board
import os
import time
import analogio # 读取ADC
import pwmio # PWM库
from analogio import AnalogIn
analog_x = AnalogIn(board.A0)
analog_y = AnalogIn(board.A1)
piezox = pwmio.PWMOut(board.A2, #引脚这A2
duty_cycle=0, #占空比为50%
frequency=50, # 频率为50Hz,产生20ms的PWM波来驱动舵机
variable_frequency=False)
piezoy = pwmio.PWMOut(board.A3, #引脚这A3
duty_cycle=0, #占空比为50%
frequency=50, # 频率为50Hz,产生20ms的PWM波来驱动舵机
variable_frequency=False)
def get_x_state():
x_value = analog_x.value
# print("x_value" + str(x_value))
if 34000 > x_value >31000:
return 0 # x释放
elif x_value < 20000:
return 1 # x 往左
elif 50000 > x_value > 40000:
return 2 # x 往右
elif x_value >60000:
return 3 # x键压下
return 0
def get_y_state():
y_value = analog_y.value
# print("y_value" + str(y_value))
if 34000 > y_value >31000:
return 0 # y释放
elif y_value < 20000:
return 1 # y 往下
elif y_value > 40000:
return 2 # y 往上
return 0
# 65535 = 20ms
# t = 0.5ms——————-舵机会转到 0 ° 65535 // 40 = 1638
# t = 1.0ms——————-舵机会转到 45° 65535 // 20 = 3276
# t = 1.5ms——————-舵机会转到 90° 65535 // = 4915
# t = 2.0ms——————-舵机会转到 135° 65535 // 10 = 6553
# t = 2.5ms——————-舵机会转到 180° 8191
min_x = 1638
min_y = 1638
max_x = 8300
max_y = 5553
this_x = 4951 #开机在90度位置
this_y = 4051
x_step = 100
y_step = 100
while True:
x_sta = get_x_state()
y_sta = get_y_state()
if x_sta == 1:
this_x = this_x-x_step
if this_x < min_x:
this_x = min_x
elif x_sta == 2:
this_x = this_x + x_step
if this_x > max_x:
this_x = max_x
elif x_sta == 3:
this_x = 4915
this_y = 4051
if y_sta == 2:
this_y = this_y-y_step
if this_y < min_y:
this_y = min_y
elif y_sta == 1:
this_y = this_y + y_step
if this_y > max_y:
this_y = max_y
# 更新 pwm
piezoy.duty_cycle = this_y
piezox.duty_cycle = this_x
time.sleep(0.1)
接线:
开发板 摇杠
3.3V--------------------vcc
GND-------------------GND
A0-----------------------X
A1-----------------------Y
开发板 舵机1
GND-------------------GND
A2-----------------------PWM
开发板 舵机2
GND-------------------GND
A3-----------------------PWM
同时给舵机的电源供上5V电源
实验效果:
开机后操作摇杠,就可以实时控制机械臂。
20231020_164119
【代码】
这次活动,作为我来说,道路曲折,最起先是发货的推迟,再就遇到了器件的问题。但是收获非常多,具体如下:
1、得捷的服务非常好,无论是订单的状态的邮件还是换货都是第一时间耐心的解答,遇到问题也是第一时间给予了解决,可以说德捷是非常优秀的一家公司。
2、这次活动的教程特别丰富,特是乔老师做了专业的精细的教程,通过学习他的课程,我第一时间的掌握了这款开发板的开发,并如期的完成了必做任务。
3、这次活动,非常多的大佬都参与了,这记我从中学习到了非常多的知识。
3、esp32s3的cicuitPython的生态特别好,教程、示例、开源作品应有心有,这让我们学习与开发变得非常容易。
【建议】
虽然生态与资料非常丰富,但是中文的文档不是特别丰富,对与中国的开发者来说,还是有一定的难度。建议官方加强中文文档的丰富,让中国的开发都更容易学习使用。
|