579|0

6968

帖子

11

TA的资源

版主

楼主
 

【得捷电子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)

【心得体会】

  1. 开发板提供了cicuitPython的board库,同时也提供了显示屏的驱动库,再就是有乔老师的教学视频与源码,使得我们可以快速的实现自己想要的功能。
  2. 第一个任务的难点是创建开发环境,下载cicuitPython固件,再有就是选择合适的中文字库,这些前期有了老师提供的源码与字库,也是可以轻松的完成任务的。
  3. 值得大家注意的是中文字库不能选择太大的,会提示下载不下文件的错误提示。

任务2:网络功能测试

得捷电子Follow me第2期】任务2:网络功能使用 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)

实现效果:

【心得体会】

  1. 此任务,也是官方提供了标准的wifi库,根据老师的提示可以快速的实现联网功能,同时结合任务1的前提,我们可以轻松实现联网与IP地址的展示。
  2. 值得注意是,在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模块来实现时间的设定与读取。

 

【扩展任务】摇杠控制机械臂

【目的】

通过摇杠来实时控制机械臂

【实现步骤】

  1. 采用ADC采集摇杠,判断出哪几个按键按下。
  2. 初始化两个PWM为50Hz的PWM波。
  3. 根据摇杠的状态,输出控制信号。

【代码实现】

  1. 引入库
    import board
    import os
    import time
    import analogio # 读取ADC
    import pwmio # PWM库
  2. 实初化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)
  3. 初始化摇杠的ADC:
    analog_x = AnalogIn(board.A0)
    analog_y = AnalogIn(board.A1)
  4. 读取摇杠的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

     

  5. 根据当前的状态,实时修改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

【代码】

code.zip (808.05 KB, 下载次数: 5)
【总结】

这次活动,作为我来说,道路曲折,最起先是发货的推迟,再就遇到了器件的问题。但是收获非常多,具体如下:

1、得捷的服务非常好,无论是订单的状态的邮件还是换货都是第一时间耐心的解答,遇到问题也是第一时间给予了解决,可以说德捷是非常优秀的一家公司。

2、这次活动的教程特别丰富,特是乔老师做了专业的精细的教程,通过学习他的课程,我第一时间的掌握了这款开发板的开发,并如期的完成了必做任务。

3、这次活动,非常多的大佬都参与了,这记我从中学习到了非常多的知识。

3、esp32s3的cicuitPython的生态特别好,教程、示例、开源作品应有心有,这让我们学习与开发变得非常容易。

【建议】

虽然生态与资料非常丰富,但是中文的文档不是特别丰富,对与中国的开发者来说,还是有一定的难度。建议官方加强中文文档的丰富,让中国的开发都更容易学习使用。

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表