10078| 8
|
[项目] 葡萄美酒夜光杯###垫 |
葡萄美酒夜光杯,一起干了这一杯 说来也是凑巧,为了下次mechbattle,我想自己设计机子,打算从建模开始吧。刚好手上还剩一块cheap,刚好还一个LED灯环,刚好有一块锂电池,于是想着设计点东西,顺便练习建模,积累经验这个智能杯垫就是一个开始:lol 功能:一杯热水放在上面,杯垫会根据温度显示不同的颜色。 原理分析:利用LM35温度传感器采集外界温度信息,并将温度信息映射到LED灯上。 材料清单: Cheapduino x 1(可以更换其他芯片如micro pro) 24位RGBLED灯环 x 1 LM35温度传感器 x 1 3.7V锂电池 x 1 4.2V锂电池充电板 x1 5V升压板 x 1 开关 x 1 导线若干 电路分析: 原本设计的时候没有加升压的模块,可是在测试的时候发现,LED灯和LM35工作不正常,这才想到这两个模块的供电需要5V,所以添加了一块可调升压模块 程序分析: [mw_shl_code=cpp,true]#include <Adafruit_NeoPixel.h> #include <MsTimer2.h>// #define PIN 9//控制LED灯环引脚 Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800);//定义一个灯环的对象,控制灯环 uint16_t r, g, b;//记录红绿蓝三种颜色目标值 uint16_t rt, gt, bt;//记录红绿蓝三种颜色当前值 //滤波 uint16_t Filter_Value; uint16_t Value; void setup() { Serial.begin(9600);//设置波特率 strip.begin(); strip.show(); MsTimer2::set(20, LEDshow); MsTimer2::start(); Filter_Value = Fliter(); rt = gt = bt = 0; } void loop() { if (inspect())Filter_Value = Fliter(); //检测颜色是否达到目标值 Serial.println(Filter_Value); tempTocolor(Filter_Value); delay(50); } uint16_t Get_AD()//采集温度信息 { return analogRead(A0); } //滤波处理 #define FILTER_N 40 uint16_t filter_buf[FILTER_N + 1]; uint16_t Fliter() { uint16_t filter_sum = 0; uint16_t i; filter_buf[FILTER_N] = Get_AD(); for (i = 0; i < FILTER_N; i++) { filter_buf = filter_buf[i + 1]; filter_sum += filter_buf; } return (uint16_t)(filter_sum / FILTER_N); } bool inspect()//检测颜色是否达到目标值 { if (r != rt || g != gt || b != bt)return false; else return true; } void tempTocolor(uint16_t val)//将温度转换为颜色 { if (val > 110) { r = 127; b = 127; g = 0; } else if (val > 80) { uint16_t k = map(val, 80, 110, 0, 127); r = 255 - k; b = k; g = 0; } else if (val > 50) { uint16_t k = map(val, 50, 80, 0, 255); r = k; b = 0; g = 255 - k; } else if (val > 20) { uint16_t k = map(val, 20, 50, 0, 255); r = 0; b = 255 - k; g = k; } else { r = 0; b = 255; g = 0; } } void LEDshow()//显示颜色 { if (rt < r)rt++; else if (rt > r)rt--; if (gt < g)gt++; else if (gt > g)gt--; if (bt < b)bt++; else if (bt > b)bt--; for (uint16_t i = 0; i < strip.numPixels(); i++) { strip.setPixelColor(i, strip.Color(rt, gt, bt)); } strip.show(); } [/mw_shl_code] 细节图片: 智能杯垫.rar |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed