基于ESP32-C3的月球灯

基于ESP32-C3的月球灯

基于ESP32-C3设计的月球灯控制器,需要搭配特定底座和法兰模型使用。
electronics esp32

零、模型说明

月球模型链接:https://www.thingiverse.com/thing:3242080
法兰、底座模型见附件(.SLDPRT文件为SW 2020创建,请使用2020以上版本打开)。

月球模型需要向热床反法向偏移一定距离,使其具有一定的基准平面安装底座。
接着导入法兰模型,调整到合适的位置使其两者能够良好吻合。
然后合并两者模型,或者直接进行切片(直接切片会有略微挤出溢出-走线重复)。
最后导入打印机打印。
(打印效果见Figure7)

法兰孔建议嵌入M3的土八螺母/铜嵌螺母以获得更好的装配效果。
装配的螺丝采用M3x26(?好像是这个参数,模型不在手边有点忘了,更长也无所谓)。

(好久之前打印的月球模型,当时打印机调教得不好,层纹还是很明显。)

一、效果展示

基于ESP32-C3的月球灯

Figure1 实物图1

基于ESP32-C3的月球灯

Figure2 实物图2

基于ESP32-C3的月球灯

Figure3 爆炸图

二、硬件设计

控制器需要尽可能小巧,因此需要采用体积较小的元件。

2.1 MCU

MCU采用ESP32-C3-MINI-N4,该封装外形小巧,且相对于QFN芯片更易于焊接、外围阻容少。
内置USB JTAG控制器,可以直接使用USB进行烧录,省下一颗USB-TTL芯片的成本和空间(虽然ESP32-C3成本比较高)。
具有WIFI和蓝牙功能,可以接入物联网平台。

2.2 电源管理

电源管理需要满足电池的充电、系统供电的分配和控制。电源架构如下图所示:

基于ESP32-C3的月球灯

Figure4 电源架构

电源管理采用ETA6002。

2.3 灯光

那必须要有 R!G!B!
采用了较为主流的WS2812b灯珠。选用更小封装的型号可能会更好,但由于手头还有不少5050封装的,因此就直接用了。
由于空间有限,只放进了两颗,亮度比较有限。
但,应该没人用这玩意照明吧?

2.4 电池

选用了一个尺寸为L35W30H10mm的聚合物电池,容量为1000mAh。
电池链接:https://item.taobao.com/item.htm?id=589740856789&spm=a1z10.1-c.w4004-22660760862.4.2c3e7f05jPE9V6&skuId=4258503775257
(卡其色 103035-1000毫安)

三、软件设计

3.1 按键功能

在按键功能方面,软件需要实现:灯光的开关、灯光亮度切换、灯光颜色的切换。
本项目采用了单个按键的功能复用实现。
分别为:

  • KEY1长按:发光开/关
  • KEY1双击:发光颜色切换(预设5种)
  • KEY1单击:亮度切换(8个亮度等级)

在按键功能复用上,调用了OneButton库予以实现。

3.2 WS2812b控制

WS2812b是一款可编程的RGB灯珠,可以通过程序进行控制。
本项目采用了FastLED库予以实现控制。

3.3 低功耗&物联网

目前续航效果较差,亮度最高状态下约能连续使用6h。
因此,希望通过让MCU闲时进入低功耗状态以降低MCU的部分功耗、提高续航。

物联网后可以使用APP查看灯的状态、控制灯的状态或者接入米家灯。

目前这两个功能仍在开发中(咕咕)。

四、更多图片

基于ESP32-C3的月球灯

Figure5 实物图3

基于ESP32-C3的月球灯

Figure6 实物图4

基于ESP32-C3的月球灯

Figure7 实物图5

基于ESP32-C3的月球灯

Figure8 实物图6(该侧为Type-C接口和复位按键-需要顶针)

基于ESP32-C3的月球灯

Figure9 实物图7(该侧为多功能按键)

基于ESP32-C3的月球灯

Figure10 实物图8

附录

附录1:源代码

#include <Arduino.h>
#include <FastLED.h>
#include "OneButton.h"

// FastLED
#define NUM_LEDS 2             // LED灯珠数量
#define DATA_PIN 10              // Arduino输出控制信号引脚
#define LED_TYPE WS2812         // LED灯带型号
#define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序
 
uint8_t max_bright = 255;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高
 
CRGB leds[NUM_LEDS];            // 建立光带leds

// OneButton
#define button1_Pin 5
OneButton button1(button1_Pin, true);

// 变量
unsigned char status=0; // LED开关状态
unsigned char brightness=0; // 亮度状态
unsigned char colorStatus=0;  // 颜色状态

// 函数
void click1()
{
  if(status)
  {
    brightness+=32;
    FastLED.setBrightness(brightness);
    FastLED.show();
    if(brightness<10)
    {
      brightness=0;
    }
  }
}

void doubleclick1()
{
  if(status)
  {
    colorStatus++;
    switch(colorStatus)
    {
      case 0: fill_solid(leds, 2, CRGB::White);break;
      case 1: fill_solid(leds, 2, CRGB::LightBlue);break;
      case 2: fill_solid(leds, 2, CRGB::LightCoral);break;
      case 3: fill_solid(leds, 2, CRGB::Pink);break;
      case 4: fill_solid(leds, 2, CRGB::MediumPurple);break;
      case 5: fill_solid(leds, 2, CRGB::Gold);break;
      case 6: colorStatus=0;
    }
    FastLED.show();
  }
}

void longPressStart1()
{
  status=!status;
  if(status & brightness==0)
  {
    brightness=128;
  }
  else if(!status)
  {
    brightness=0;
  }
  FastLED.setBrightness(brightness*status);
  FastLED.show();
}

void setup() {
  // put your setup code here, to run once:
  LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化光带 
  FastLED.setBrightness(brightness);                            // 设置光带亮度
  fill_solid(leds, 2, CRGB::White);
  FastLED.show();
  
  button1.attachClick(click1);
  button1.attachDoubleClick(doubleclick1);
  button1.attachLongPressStart(longPressStart1);
}

void loop() {
  // put your main code here, to run repeatedly:
  button1.tick();
  delay(50);
}

链接:https://oshwhub.com/carele_i/moonlight


评论:
相关文章
小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。


MicroPython 开发ESP32应用之线程介绍及实例分析

MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。


盛思发布掌控板3.0

掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。


ESP32 MicroPython采集模拟传感器数值

使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。


ESP32 使用DAC模拟输出完成两路呼吸灯

ESP32的DAC函数可以实现真正的模拟输出。


在 ESP32 上使用 LEDC (PWM)

ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。


Micropython基于ESP32的多线程开发

本文学习如何使用ESP32开发板来进行多线程的开发。


ESP8266 Arduino WIFI

ESP8266有三种工作模式,分别为:AP,STA,AP混合STA


ESP32 SPI

ESP32有四个SPI外设,分别为SPI0、SPI1、HSPI和VSPI。


ESP32 I2C

ESP32有2个硬件I2C总线接口,接口可以配置为主机或从机模式。

相关创作
太阳能电子纸天气显示器具有小巧、节能环保、易于制作安装等优势。通过利用太阳能充电和低功耗设计,使得这款天气站不仅适合家庭使用,也非常适合用于商业、学校等场所。
热度:16
基于ESP32的电子墨水屏日历,支持通过 OpenWeatherMap 实现天气显示等功能。
热度:89
最新资源
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。