版本协议

Public Domain

标签
专业版
#第十届立创电赛#可设置小夜灯

创建时间:1天前

10 0

视频

描述

<div> <p style="line-height:1.8">注:* 为必填项</p> <p style="line-height:1.8"><strong><span style="color:#0093e6">请在报名阶段填写 ↓</span></strong></p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">* 1、项目功能介绍</h3> <hr> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><span style="color:#000000;background-color:#ffffff"><span style="font-size:14px;background-color:#ffffff">基于 CH554 实现一个小夜灯。</span></span></p> <p style="line-height:1.8"><span style="color:#000000;background-color:#ffffff"><span style="font-size:14px;background-color:#ffffff">当下的小夜灯普遍存在着痛点:</span></span></p> <p style="line-height:1.8"><span style="color:#000000;background-color:#ffffff"><span style="font-size:14px;background-color:#ffffff">1.待机时间短</span></span></p> <p style="line-height:1.8"><span style="color:#000000;background-color:#ffffff"><span style="font-size:14px;background-color:#ffffff">2.颜色不可调,夜间太亮光线刺眼</span></span></p> <p style="line-height:1.8"><span style="color:#000000;background-color:#ffffff"><span style="font-size:14px;background-color:#ffffff">3.点亮时间不可调,不方便使用</span></span></p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><span style="color:#000000;background-color:#ffffff"><span style="font-size:14px;background-color:#ffffff">为此,制作了这样一个小夜灯:使用 18650 电池,同时外壳设计上预留了最够的空间,可以根据用户需要自行扩展加大电池通量。颜色和点亮时间可以用过串口自行设置。</span></span></p> <p style="line-height:1.8"> </p> <p>核心部件有2个,一个是 HC-SR602 人体红外感应模块;另外一个是CH554 单片机芯片。此外,外部还有TP4056充电模块,18650电池,XT1861B502MR-G升压芯片,5V开关芯片和SN74AHC1G32DBVR或门芯片。</p> <p>基本原理是 18650和TP4056充电模块配合工作,负责充放电管理。TP4056充电模块自带一个TypeC接口可以用于充电。当18650放电到2.4V时,TP4056充电模块自动停止工作防止过放。然后XT1861芯片负责将2.4-4.2V电压升压到5V 提供给HC-SR602 人体红外感应模块使用。当这个有人触发红外感应模块后,模块输出到或门芯片,经过运算后用于触发SY6280AAC进行供电。之后,CH554 根据存储的颜色控制 WS2812 LED 发光。同时根据设定的时间控制前面提到的或门。这样就可以实现即便人体红外感应模块输出停止工作之后,仍然输出5V。</p> <p> </p> <p><strong>HC-SR602</strong><strong>模块主要参数(在底板上)</strong></p> <ul> <li>工作电压:3.3V-15V;</li> <li>静态电流:20uA;</li> <li>感应距离:最大5M;建议0-3.5M;</li> <li>信号电平输出:H=3.3V(检测到周围有人体);L=0V(检测周围无人体);</li> </ul> <p><strong>XT1861产品特点(在底板上)</strong></p> <p>·       最高效率:94%</p> <p>·       最高工作频率:300KHz</p> <p>·       低静态电流:15µA</p> <p>·       输出电压:1.8V~5.0V(步进 0.1V)</p> <p>·       输入电压:0.9V~6.5V</p> <p>·       低纹波,低噪声 小体积封装</p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">*2、项目属性</h3> <hr> <p style="line-height:1.8"><span style="color:#000000;font-size:14px">首次公开原创项目</span></p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">* 3、开源协议</h3> <hr> <p style="line-height:1.8">Public Domain</p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><strong><span style="color:#0093e6">请在竞赛阶段填写 ↓</span></strong></p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">*4、硬件部分</h3> <hr> <p style="line-height:1.8"><span style="color:#95a5a6"><span style="font-size:14px">这里设计的是主控部分,如果想整体工作起来需要配合底板。具体项目在 <a href="https://oshwhub.com/zoologist/ch554-xiao-ye-deng-20250510" target="_blank">https://oshwhub.com/zoologist/ch554-xiao-ye-deng-20250510</a></span></span></p> <p style="line-height:1.8"><span style="color:#95a5a6"><span style="font-size:14px">这里主控部分完整的主要功能是:</span></span></p> <p style="line-height:1.8"><span style="color:#95a5a6"><span style="font-size:14px">1.接收来自串口的,LED 颜色和时长的设定;</span></span></p> <p style="line-height:1.8"><span style="color:#95a5a6"><span style="font-size:14px">2.工作之后负责控制LED 颜色</span></span></p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">*5、软件部分</h3> <hr> <p style="line-height:1.8"> 代码使用 Arduino 完成:</p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"> </p> <p>#ifndef USER_USB_RAM<br>#error "This example needs to be compiled with a USER USB setting"<br>#endif<br>#include "src/userUsbCdc/USBCDC.h"<br>#include <br>#include "DataFlash.H"<br>#include "include/ch5xx.h"</p> <p style="line-height:1.8"> </p> <p>#define NUM_LEDS 2<br>#define COLOR_PER_LEDS 3<br>#define NUM_BYTES (NUM_LEDS*COLOR_PER_LEDS)<br>__xdata uint8_t ledData[NUM_BYTES];</p> <p style="line-height:1.8"> </p> <p>#define BIT1 2</p> <p style="line-height:1.8"> </p> <p>// USB 串口 Buffer<br>uint8_t recvStr[6];<br>uint8_t recvStrPtr = 0;<br>// 之前保存的颜色值<br>uint8_t rValue, gValue, bValue;<br>uint16_t TimeLighting;</p> <p style="line-height:1.8"> </p> <p>// 定义电源控制引脚<br>#define POWERCTRL 15<br>// 定义LED信号线<br>#define LEDCOLOR 14<br>#define NEOPIXELSHOW neopixel_show_P1_4</p> <p style="line-height:1.8"> </p> <p>unsigned long ElspLighten = 0;<br>unsigned long Elsp = 0;</p> <p style="line-height:1.8"> </p> <p>void SetLEDColor(uint8_t r, uint8_t g, uint8_t b) {<br>  for (uint8_t i = 0; i   {<br>    set_pixel_for_GRB_LED(ledData, i, r,g,b);<br>    NEOPIXELSHOW(ledData, NUM_BYTES);<br>    delay(10);<br>  }<br>}<br>void setup() {<br>  // 供电引脚接管电源<br>  pinMode(POWERCTRL, OUTPUT);<br>  digitalWrite(POWERCTRL, HIGH);</p> <p style="line-height:1.8"> </p> <p>  // LED 颜色控制<br>  pinMode(LEDCOLOR, OUTPUT);</p> <p style="line-height:1.8"> </p> <p><br>  USBInit();</p> <p style="line-height:1.8"> </p> <p>  // 读取颜色信息<br>  Flash_Op_Check_Byte1 = 0x00;<br>  Flash_Op_Check_Byte2 = 0x00;<br>  ReadDataFlash(0, 1, &rValue);<br>  ReadDataFlash(1, 1, &gValue);<br>  ReadDataFlash(2, 1, &bValue);</p> <p style="line-height:1.8"> </p> <p>  // 读取时长<br>  ReadDataFlash(3, 2, &TimeLighting);</p> <p style="line-height:1.8"> </p> <p>  // 这里需要写成这样,避免上电亮一下的问题<br>  delay(10);<br>  //set_pixel_for_GRB_LED(ledData, 0, 0, 0, 0);<br>  //NEOPIXELSHOW(ledData, NUM_BYTES);<br>  SetLEDColor(0,0,0);<br>  delay(10);</p> <p style="line-height:1.8"> </p> <p>  // 读取之前保存的灯颜色<br>  //set_pixel_for_GRB_LED(ledData, 0, rValue, gValue, bValue);<br>  //NEOPIXELSHOW(ledData, NUM_BYTES);<br>  SetLEDColor(rValue, gValue, bValue);<br>  delay(100);</p> <p style="line-height:1.8"> </p> <p>  ElspLighten = millis();<br>}</p> <p style="line-height:1.8"> </p> <p>void Enter_DeepSleep(void)<br>{<br>  // 第一步:关闭所有外设模块<br>  SAFE_MOD = 0x55;       // 进入安全模式<br>  SAFE_MOD = 0xAA;       // 解锁寄存器写保护<br>  PCON &= ~BIT1;         // 确保PD位初始为0<br>  IE_EX = 0x00;          // 关闭扩展中断<br>  IE = 0x00;             // 关闭所有中断<br>  TCON = 0x00;           // 关闭定时器控制<br>  TMOD = 0x00;           // 关闭定时器模式<br>  SAFE_MOD = 0x00;       // 恢复安全模式</p> <p style="line-height:1.8"> </p> <p>  // 第二步:设置IO口为低功耗状态<br>  P1_DIR_PU = 0x00;         // 所有IO设为输入模式<br>  P3_DIR_PU = 0x00;         // 所有IO设为输入模式</p> <p style="line-height:1.8"> </p> <p>  // 第三步:进入停机模式<br>  SAFE_MOD = 0x55;       // 二次确认安全模式<br>  SAFE_MOD = 0xAA;<br>  PCON |= BIT1;           // 置位PD位进入停机模式<br>  PCON |= BIT1;           // 推荐重复写入确保执行</p> <p style="line-height:1.8"> </p> <p>  while (1);<br>}</p> <p style="line-height:1.8"> </p> <p><br>void loop() {<br>  while (USBSerial_available()) {<br>    char serialChar = USBSerial_read();<br>    recvStr[recvStrPtr++] = serialChar;</p> <p style="line-height:1.8"> </p> <p>    if (recvStrPtr == 5) {<br>      // 测试命令<br>      if ((recvStr[0] == 0x55) && (recvStr[1] == 0xCC)) {<br>        USBSerial_print(rValue);<br>        USBSerial_flush();<br>        USBSerial_print(gValue);<br>        USBSerial_flush();<br>        USBSerial_print(bValue);<br>        USBSerial_flush();<br>        USBSerial_println(TimeLighting);<br>        USBSerial_flush();<br>      }</p> <p style="line-height:1.8"> </p> <p>      // 设置颜色<br>      if ((recvStr[0] == 0x55) && (recvStr[1] == 0xAA)) {<br>        // 记录收到的颜色信息<br>        rValue = recvStr[2];<br>        gValue = recvStr[3];<br>        bValue = recvStr[4];</p> <p style="line-height:1.8"> </p> <p>        // 将颜色信息写入 eeprom<br>        Flash_Op_Check_Byte1 = DEF_FLASH_OP_CHECK1;<br>        Flash_Op_Check_Byte2 = DEF_FLASH_OP_CHECK2;<br>        uint8_t result = WriteDataFlash(0, &recvStr[2], 3);<br>        if (result == 0) {<br>          // 写入成功<br>          USBSerial_println(result);<br>          USBSerial_flush();<br>        } else {<br>          // 写入失败<br>          USBSerial_println(result);<br>          USBSerial_println("f1");<br>          USBSerial_flush();<br>        }</p> <p style="line-height:1.8"> </p> <p>        //set_pixel_for_GRB_LED(ledData, 0, rValue, gValue, bValue);<br>        //NEOPIXELSHOW(ledData, NUM_BYTES);<br>        SetLEDColor(rValue, gValue, bValue);</p> <p style="line-height:1.8"> </p> <p>      }</p> <p style="line-height:1.8"> </p> <p>      // 设定时长的命令<br>      if ((recvStr[0] == 0x55) && (recvStr[1] == 0xBB)) {<br>        // 记录收到的颜色信息<br>        TimeLighting = (recvStr[2]) + (recvStr[3] 200) {<br>    recvStrPtr = 0;<br>    Elsp = millis();<br>  }</p> <p style="line-height:1.8"> </p> <p>  // 到达点亮的时间后关闭,如果是插在电脑上则不关闭<br>  if ((millis() - ElspLighten > TimeLighting * 1000UL) && (USBConfiged == 0)) {<br>    // 关灯<br>    //set_pixel_for_GRB_LED(ledData, 0, 0, 0, 0);<br>    //NEOPIXELSHOW(ledData, NUM_BYTES);<br>    SetLEDColor(0, 0, 0);</p> <p style="line-height:1.8"> </p> <p>    digitalWrite(POWERCTRL, LOW);<br>    // 进入省电模式<br>    Enter_DeepSleep();<br>  }</p> <p style="line-height:1.8"> </p> <p><br>}</p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">*6、BOM清单</h3> <hr> <p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">请输入内容…</span></p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">注:项目涉及的BOM清单。在<span style="text-decoration:underline"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件后,BOM将自动生成至项目详情;建议包括型号、品牌、名称、封装、采购渠道、用途等内容。具体内容和形式应以表达清楚项目构成为准。 </span></p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">*7、大赛LOGO验证</h3> <hr> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><img src="//image.lceda.cn/pullimage/bmu5DoZrRZDzLDXlIfQtkrymLkoImxyUKvMxbDeR.png"></p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><img src="//image.lceda.cn/pullimage/daSwxo3h1lji1eiJk6vBoQUlanRdxwo8dt27S3A8.png"></p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><img src="//image.lceda.cn/pullimage/gsjKhaF72WDjZglxARy8iEoceEI0X7YooiiRdbqG.png"></p> <p style="line-height:1.8"> </p> <h3 style="line-height:1.8">* 8、演示您的项目并录制成视频上传</h3> <hr> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;</span></p> <p style="line-height:1.8"><span style="color:#95a5a6;font-size:14px">视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。</span></p> <p style="line-height:1.8"> </p> <p style="line-height:1.8"><span style="font-size:14px"><a href="/posts/42551e8f2f2548cabc1c36626a42da94" target="_blank">前往查看更多详情 ></a></span></p> <p style="line-height:1.8"> </p> </div>

文档

BOM

暂无

附件

附件名 下载
Ch554NightLight.zip
NightLight.7z
工作演示.mp4

评论(0)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow