葡萄美酒夜光杯###垫

2018-04-012.5万
AI 快速预览详细 收起
智能杯垫是一个基于Arduino的项目,使用Cheapduino、24位RGB LED灯环和LM35温度传感器,根据水温显示不同颜色。该项目适合零基础新手,无需复杂编程技能即可完成。材料清单包括Cheapduino、LED灯环、LM35温度传感器、锂电池等。程序分析部分详细介绍了如何采集温度信息并将其转换为颜色。最终效果是当热水放在杯垫上时,杯垫会根据水温显示不同的颜色。
葡萄美酒夜光杯###垫图1
葡萄美酒夜光杯,一起干了这一杯

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

葡萄美酒夜光杯###垫图3


功能:一杯热水放在上面,杯垫会根据温度显示不同的颜色。

原理分析:利用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
导线若干


电路分析:

葡萄美酒夜光杯###垫图4
原本设计的时候没有加升压的模块,可是在测试的时候发现,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]

细节图片:

葡萄美酒夜光杯###垫图10

葡萄美酒夜光杯###垫图5

葡萄美酒夜光杯###垫图6

葡萄美酒夜光杯###垫图7

葡萄美酒夜光杯###垫图8


葡萄美酒夜光杯###垫图9

葡萄美酒夜光杯###垫图2


下载附件智能杯垫.rar

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
SJHll
SJHll
66666666666
许培享
许培享
我的想法是在杯子盖上做:lol
qq215104863549
qq215104863549
作者
回复许培享
哈哈哈,是哦,还能做盖子
微笑的rockets
微笑的rockets
这种应用其实可以选用源代码的板子。
铁熊
铁熊
makerOne重出江湖!
qq215104863549
qq215104863549
作者
回复铁熊
:lol:lol:lol:lol:lol:lol:lol:lol
hnyzcj
hnyzcj
不错的创意。
qq215104863549
qq215104863549
作者
回复hnyzcj
:lol:lol:lol:lol:lol
- 没有更多了 -