qq215104863549 发表于 2018-4-1 21:17:05

葡萄美酒夜光杯###垫

葡萄美酒夜光杯,一起干了这一杯
说来也是凑巧,为了下次mechbattle,我想自己设计机子,打算从建模开始吧。刚好手上还剩一块cheap,刚好还一个LED灯环,刚好有一块锂电池,于是想着设计点东西,顺便练习建模,积累经验这个智能杯垫就是一个开始:lol

功能:一杯热水放在上面,杯垫会根据温度显示不同的颜色。原理分析:利用LM35温度传感器采集外界温度信息,并将温度信息映射到LED灯上。
材料清单:
Cheapduino x 1(可以更换其他芯片如micro pro)24位RGBLED灯环 x 1LM35温度传感器 x 13.7V锂电池 x 14.2V锂电池充电板 x15V升压板 x 1开关 x 1导线若干

电路分析:原本设计的时候没有加升压的模块,可是在测试的时候发现,LED灯和LM35工作不正常,这才想到这两个模块的供电需要5V,所以添加了一块可调升压模块

程序分析:#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_tGet_AD()//采集温度信息
{
return analogRead(A0);
}
//滤波处理
#define FILTER_N 40
uint16_t filter_buf;
uint16_t Fliter()
{
uint16_t filter_sum = 0;
uint16_t i;
filter_buf = Get_AD();
for (i = 0; i < FILTER_N; i++)
{
    filter_buf = filter_buf;
    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();
}
细节图片:








hnyzcj 发表于 2018-4-2 06:12:37

不错的创意。

jarvis_chan 发表于 2018-4-2 09:32:36

makerOne重出江湖!

qq215104863549 发表于 2018-4-2 11:07:46

jarvis_chan 发表于 2018-4-2 09:32
makerOne重出江湖!

:lol:lol:lol:lol:lol:lol:lol:lol

qq215104863549 发表于 2018-4-2 11:08:35

hnyzcj 发表于 2018-4-2 06:12
不错的创意。

:lol:lol:lol:lol:lol

青夏 发表于 2018-4-3 14:08:52

这种应用其实可以选用源代码的板子。

安卓机器人 发表于 2018-4-3 22:26:54

我的想法是在杯子盖上做:lol

qq215104863549 发表于 2018-4-8 12:56:51

安卓机器人 发表于 2018-4-3 22:26
我的想法是在杯子盖上做

哈哈哈,是哦,还能做盖子

SJHll 发表于 2019-5-4 20:02:41

66666666666
页: [1]
查看完整版本: 葡萄美酒夜光杯###垫