月球模型链接:https://www.thingiverse.com/thing:3242080
法兰、底座模型见附件(.SLDPRT文件为SW 2020创建,请使用2020以上版本打开)。
月球模型需要向热床反法向偏移一定距离,使其具有一定的基准平面安装底座。
接着导入法兰模型,调整到合适的位置使其两者能够良好吻合。
然后合并两者模型,或者直接进行切片(直接切片会有略微挤出溢出-走线重复)。
最后导入打印机打印。
(打印效果见Figure7)
法兰孔建议嵌入M3的土八螺母/铜嵌螺母以获得更好的装配效果。
装配的螺丝采用M3x26(?好像是这个参数,模型不在手边有点忘了,更长也无所谓)。
(好久之前打印的月球模型,当时打印机调教得不好,层纹还是很明显。)
控制器需要尽可能小巧,因此需要采用体积较小的元件。
MCU采用ESP32-C3-MINI-N4,该封装外形小巧,且相对于QFN芯片更易于焊接、外围阻容少。
内置USB JTAG控制器,可以直接使用USB进行烧录,省下一颗USB-TTL芯片的成本和空间(虽然ESP32-C3成本比较高)。
具有WIFI和蓝牙功能,可以接入物联网平台。
电源管理需要满足电池的充电、系统供电的分配和控制。电源架构如下图所示:
电源管理采用ETA6002。
那必须要有 R!G!B!
采用了较为主流的WS2812b灯珠。选用更小封装的型号可能会更好,但由于手头还有不少5050封装的,因此就直接用了。
由于空间有限,只放进了两颗,亮度比较有限。
但,应该没人用这玩意照明吧?
选用了一个尺寸为L35W30H10mm的聚合物电池,容量为1000mAh。
电池链接:https://item.taobao.com/item.htm?id=589740856789&spm=a1z10.1-c.w4004-22660760862.4.2c3e7f05jPE9V6&skuId=4258503775257
(卡其色 103035-1000毫安)
在按键功能方面,软件需要实现:灯光的开关、灯光亮度切换、灯光颜色的切换。
本项目采用了单个按键的功能复用实现。
分别为:
在按键功能复用上,调用了OneButton库予以实现。
WS2812b是一款可编程的RGB灯珠,可以通过程序进行控制。
本项目采用了FastLED库予以实现控制。
目前续航效果较差,亮度最高状态下约能连续使用6h。
因此,希望通过让MCU闲时进入低功耗状态以降低MCU的部分功耗、提高续航。
物联网后可以使用APP查看灯的状态、控制灯的状态或者接入米家灯。
目前这两个功能仍在开发中(咕咕)。
#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 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。
掌控板3.0升级了主控,还主打AI。带有双麦克风阵列,增加了音频解码芯片,板载了一个1W喇叭,还把之前的单色屏幕换成了1.47寸的彩色屏幕,有更多的可玩性。
使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。
ESP32的DAC函数可以实现真正的模拟输出。
ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。
本文学习如何使用ESP32开发板来进行多线程的开发。
ESP8266有三种工作模式,分别为:AP,STA,AP混合STA
ESP32有四个SPI外设,分别为SPI0、SPI1、HSPI和VSPI。
ESP32有2个硬件I2C总线接口,接口可以配置为主机或从机模式。
专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。