1369|7

115

帖子

8

TA的资源

一粒金砂(高级)

楼主
 

【得捷电子Follow me第2期】节日氛围灯 [复制链接]

 

本帖最后由 alanlan86 于 2023-10-10 12:33 编辑

#综合任务报告
##一、背景

  • 适逢2023的中秋+国庆,双节同庆!学校给家里的小孩布置了一个科技节的手工作业,由此,顺便动手把这个节日氛围灯手搓了一把! ###功能
  • 构想了一下主要的功能有:
  • A、可以根据光的强弱自动打开和调节亮度
  • B、用I2C读取G-Sensor的数值,判断是否有“拍一拍”交互
  • C、可以播放SD卡中存储的wav音乐文件 ##二、硬件介绍

###A、硬件框图

###主控

##SD卡

  • 外围有SD卡(卡座+TF卡),用于存储wav音乐文件;ESP32-S3与SD卡采用的SPI接口进行连接。

##音频DAC

  • 以I2S接口的音频DAC芯片MAX98357,外接一个3W 4欧姆的喇叭,进行音乐播放;MAX98357A无需I2C对其寄存器进行配置,只需通过I2S将音频还原的数据进行传输即可,非常简便易用。

##传感器

  • 以GSensor加速度传感器LIS3DH和模拟光感传感器模块进行环境检测和交互动作检测。LIS3DH是一颗非常常见通用的加速度传感器,通过I2C即可读取数据和控制。模拟的光感传感器,需要采用ESP32-S3的ADC通道进行环境光强度的采集。

##WS2812灯带

  • 根据环境光情况和交互动作,对WS2812B进行RGB颜色调节或者节律控制。WS2812B是一个单线串行控制的LED驱动芯片,同时带LED灯珠,引出对于串行连接和控制非常方便好用。

##引脚连接
| ESP32 |模块 | 说明 |
| ------------ | ------------ | ------------ |
| D5 | BCLK |时钟信号 |
| D6 | LRC | 声道信号 |
| D9 | DIN | 数据信号 |
| A5 | SD_CS | SD卡片选 |
| SCK | SD_SCK | SD时钟线 |
| MO | SD_MOSI | SD MOSI |
| MI | SD_MISO | SD MISO |
| A0 | 光传感器Analog | 环境光传感器模拟输出 |
| SCL | LIS3DH SCL | I2C SCL |
| SDA | LIS3DH SDA | I2C SDA |
| D13 | WS2812B | 灯带控制 |

各个模块的电源引脚按照VCC 3.3V进行连接,其中WS2812B的电源按照5V进行连接。

###B、软件介绍

  • 软件方面为了让代码编写架构更加清晰,采用了多任务方式进行编写。通过引入import asyncio 库,然后分音乐播放、环境光采集、动作检测以及灯控几个任务划分模块。

####SD卡控制

  • 需要使用到circuitpython到的库有:
    1. import storage
    2. import adafruit_sdcard
  • SD卡接口初始化以及挂载文件系统。实现FS文件系统挂载之后,对文件的读写,直接通过/sd进行访问即可。
  1. SD_CS = board.A5
  2. # Connect to the card and mount the filesystem.
  3. #spi = board.SPI()
  4. spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
  5. cs = digitalio.DigitalInOut(SD_CS)
  6. sdcard = adafruit_sdcard.SDCard(spi, cs)
  7. vfs = storage.VfsFat(sdcard)
  8. storage.mount(vfs, "/sd")

####I2S播放

  • 音频的播放用到的库有:
    1. import audiocore
    2. import audiobusio
  • 音频播放任务代码:
  1. audio = audiobusio.I2SOut(bit_clock=board.D5, word_select=board.D6, data=board.D9)
  2. async def AudioPlayer():
  3. while True:
  4. with open("/audio/wangfengxinlicui3.wav", "rb") as wave_file:
  5. wav = audiocore.WaveFile(wave_file)
  6. print("Playing wav file!")
  7. audio.play(wav)
  8. while audio.playing:
  9. #await asyncio.sleep(1)
  10. time.sleep(1)
  11. pass
  12. print("Done!")

####环境光检测

  • 针对环境光检测通过调用import analogio 模拟IO ADC库,进行光强度检测。
  1. async def lightbrighneess(controls):
  2. while True:
  3. #print(analog_pin.value)
  4. controls.brightness = (analog_pin.value/61086)*100
  5. pixel.brightness = (100 - controls.brightness)*1.0/100
  6. await asyncio.sleep(3)

####动作检测

  • 动作检测部分,通过import adafruit_lis3dh 库,读取LIS3DH的加速度值,然后针对3轴的绝对加速度是否大于1g,或求和大于1g判断是否有交互动作。
  1. async def motion_detect(controls):
  2. # Loop forever printing accelerometer values
  3. while True:
  4. # Read accelerometer values (in m / s ^ 2). Returns a 3-tuple of x, y,
  5. # z axis values. Divide them by 9.806 to convert to Gs.
  6. x, y, z = [
  7. value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
  8. ]
  9. #print("x = %0.3f G, y = %0.3f G, z = %0.3f G" % (x, y, z))
  10. if ((abs(x + y + z)>1) or (abs(x) > 1.2) or (abs(y) > 1.2) or (abs(z) > 1.2)):
  11. controls.touch = True
  12. #print("touch\r\n")
  13. #else:
  14. #controls.touch = False
  15. #print("untouch\r\n")
  16. # Small delay to keep things responsive but give time for interrupt processing.
  17. await asyncio.sleep(0.5)

####灯光控制

  • 通过from rainbowio import colorwheel和import neopixel 两个库,可以很便捷地控制WS2812灯带的点亮效果。
  1. async def blink(controls):
  2. """Blink animation on ."""
  3. while True:
  4. for color in range(255):
  5. if (controls.brightness > 0):
  6. if (controls.touch == False):
  7. rainbow(controls.delay, False, color)
  8. await asyncio.sleep(0.05)
  9. else:
  10. for i in range(0,49):
  11. pixel<i> = (0, 0, 0)
  12. await asyncio.sleep(0.5)
  13. for i in range(0,49):
  14. pixel<i> = (255, 255, 255)
  15. await asyncio.sleep(2.5)
  16. controls.touch = False

####主函数

  • 主函数对任务进行创建以及启动。
  1. async def main():
  2. animation_controls = AnimationControls()
  3. #button_task = asyncio.create_task(monitor_button(button, animation_controls))
  4. lightsensor_task = asyncio.create_task(lightbrighneess(animation_controls))
  5. blink_task = asyncio.create_task(blink(animation_controls))
  6. audio_task = asyncio.create_task(AudioPlayer())
  7. motion_task = asyncio.create_task(motion_detect(animation_controls))
  8. # This will run forever, because no tasks ever finish.
  9. await asyncio.gather(blink_task, lightsensor_task, motion_task, audio_task)
  10. asyncio.run(main())

#源码

light_line_gsensor_music.py

(5.91 KB, 下载次数: 4)

#视频展示

播放器加载失败: 未检测到Flash Player,请到安装
节日氛围灯

#必做任务帖汇总:
任务1:
https://bbs.eeworld.com.cn/thread-1254356-1-1.html
任务2:
https://bbs.eeworld.com.cn/thread-1254305-1-1.html
任务3:
https://bbs.eeworld.com.cn/thread-1255110-1-1.html
任务4:
https://bbs.eeworld.com.cn/thread-1254703-1-1.html
https://bbs.eeworld.com.cn/thread-1255865-1-1.html
https://bbs.eeworld.com.cn/thread-1255295-1-1.html

任务5:
https://bbs.eeworld.com.cn/thread-1256691-1-1.html

其他:
【得捷电子Follow me第2期】Adafruit ESP32-S3 TFT Feather选购,小心板载BME280!! - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
https://bbs.eeworld.com.cn/thread-1251802-1-1.html

【得捷电子Follow me第2期】+开箱帖:期待的Adafruit ESP32-S3 TFT Feather到货啦.... - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
https://bbs.eeworld.com.cn/thread-1253411-1-1.html

【得捷电子Follow me第2期】+初体验帖:CircuitPython上手 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
https://bbs.eeworld.com.cn/thread-1253511-1-1.html

【得捷电子Follow me第2期】+上手帖:CircuitPytho Bundle代码包使用 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
https://bbs.eeworld.com.cn/thread-1253570-1-1.html

最新回复

东西不难,关键脑子好使,有创意!脑筋死板的人想不到这么好的方案   详情 回复 发表于 2023-10-17 17:14
点赞 关注
 
 

回复
举报

1717

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
这个效果可以

 

 
 
 

回复

115

帖子

8

TA的资源

一粒金砂(高级)

板凳
 

这个是我小孩做的手工,我是帮忙把灯带丢进去

 
 
 

回复

1634

帖子

0

TA的资源

五彩晶圆(初级)

4
 

这个效果可以啊,这电池藏哪了?灯光刚刚好!

 
 
 

回复

985

帖子

0

TA的资源

纯净的硅(高级)

5
 

不错不错不错,好用方便,节能环保,可玩性高


 
 
 

回复

7145

帖子

11

TA的资源

版主

6
 

不错不错呀,创意非常好,楼主这期作品太优秀了!

 
 
 

回复

115

帖子

8

TA的资源

一粒金砂(高级)

7
 
lkh747566933 发表于 2023-10-12 17:22 这个效果可以啊,这电池藏哪了?灯光刚刚好!

为了ESP32日后循环再用,我用了一个万用板+排母(排座)将pin传出来了,然后电池搞了一个80mAH的手环电池,刚好可以藏在板子的底线位置!

 
 
 

回复

1634

帖子

0

TA的资源

五彩晶圆(初级)

8
 
alanlan86 发表于 2023-10-14 11:17 为了ESP32日后循环再用,我用了一个万用板+排母(排座)将pin传出来了,然后电池搞了一个80mAH的手环电池 ...

东西不难,关键脑子好使,有创意!脑筋死板的人想不到这么好的方案

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
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
快速回复 返回顶部 返回列表