×

WTF智能水杯开源分享

消耗积分:0 | 格式:zip | 大小:0.14 MB | 2022-11-09

分享资料个

描述

1. 摘要

WTF是一款智能水杯,可以测量内部水温,也可以通过语音提示用户,这款水杯不易倾斜。它对每个人都有用,尤其是对于盲人和视障用户。

WTF 是一个为用户提供杯子中视对象功能的人,并用这个杯子为所有的人提供声音。

2. 简介

全世界有2.17亿人患有视力障碍,其中3600万人完全失明。饮用水是必不可少的。然而,视障人士可能会遇到一些危险和不便。因此,我们计划设计一个杯子来帮助这些人避免这些危险。该杯子将具有使其能够清楚地通知其用户的功能。

在当今社会中,全世界有2.17亿人有度至重度的约见中,似乎没有这些,约3600万人完全失明生活中的饮水是必须的,但是视觉上的方便是人在饮水中的。我们可能会在水杯方面设计一个可能有危险和提醒用户的能力。

3. 硬件介绍

3.1 Arduino纳米3.0

pYYBAGNomLeAElHXAAAbqviBFiE044.png
知乎
 

左边的是Arduino Uno,很常见。Uno 功能齐全,但对我们的项目来说有点太大了。我们正在做一个杯子,我们不能在里面放一个普通尺寸的计算器。

最开始是阿杜诺的图片系列,但Arduino Uno的功能对我们来说这个中杯的案子有点说得过去,完整的版本了。

另一个是我们的主角,Arduino Nano。更小、更轻、更便宜。我买的那件要 100 新台币(约合 3.3 美元)。它的尺寸为 43.18 毫米 * 17.78 毫米。

再来的板子更创造了Arduino Nano的主角。我们这块板子更小更便宜,只用了100块台在森工的网站上买的,大概是43.18 mm * 17.78 mm。

3.2 LM35

LM35是一款温度传感器,可用于测量-50℃至150℃之间的水温。这是一个适合喝水的区间。

LM35是温度感测,可测范围大约是-50℃到150℃,是满符合水温状态的区间。

然而,还有另一个温度传感器 DS18B20 是防水的。这对于测量液体温度非常有用。我们选择 LM35 的原因是我们计划将传感器放置在玻璃杯之外,并且不会损坏杯体。尽管如此,我还是建议你试试 DS18B20,也许它更准确。

所以另一款DS18B20是推荐的因为有温度感测器,但是我们本来就不打算将杯子测度更正所以这个,我还是非常你可以看的,因为选择它的准确度好喔。

3.3 DFPlayer 迷你版

显然,它只是一个迷你 mp3 播放器。它需要一个存储 mp3 文件的 sd 卡和一个普通的扬声器。如果您正在寻找一款声音播放器,我认为除了这一款之外没有太多选择。

就像字样的作品,这是一个驱动mp3器的模组。除了这个还需要这张专辑跟前几张或这张专辑来完成放送。而且除了我觉得你在城市之外也很重要上其他太多的选择了。

4.电路图

pYYBAGNomMCAUBVDAAFmwVgOTCg130.png
在 circuito.io 上制作
 

连接方法如上图。

连接的方式就像这张图

我所做的结果如下。

我做的角色像下面这个

poYBAGNomMiAPkg7AADDMduvFIc289.png
被我捕捉
 

但是我觉得不太容易理解所以请去我在circuito.io上做的那个~

但我不觉得这样的做法中还有什么端倪,所以建议我在circuito.io做的连接图吧~

5. 逐个连接

5.1 LM35

pYYBAGNomMuAIsSZAACxhsL6E60062.png
 

这是一个非常简单的步骤(如果您只想测量温度)。输入代码并运行后,就完成了。

这步骤很简单(如果很容易只是想温度)。在你输入完成后是而且跑动后测完成了。

/*Code designed by Sujay Alaspure in SA Lab */
const int sensor=A5; // Assigning analog pin A5 to variable 'sensor'
float tempc; //variable to store temperature in degree Celsius
float tempf; //variable to store temperature in Fahreinheit
float vout; //temporary variable to hold sensor reading
void setup() {
pinMode(sensor,INPUT); // Configuring sensor pin as input
Serial.begin(9600);
}
void loop() {
vout=analogRead(sensor); //Reading the value from sensor
vout=(vout*500)/1023;
tempc=vout; // Storing value in Degree Celsius
tempf=(vout*1.8)+32; // Converting to Fahrenheit
Serial.print("in DegreeC=");
Serial.print("\t");
Serial.print(tempc);
Serial.print(" ");
Serial.print("in Fahrenheit=");
Serial.print("\t");
Serial.print(tempf);
Serial.println();
delay(500); //Delay of 1 second for ease of viewing }

尽管如此,我们不会测量空气,我们要测量的是穿过玻璃的水。所以考虑到精度会下降和反射时间会变长的原因,我们需要扩大测量间隔并修正输出。下图是我们做交换公式的笔记,左边是实物,右边是我们从LM35得到的输入。

在考虑他的准确度下降以及玻璃反应时间增加的情况下,需要调整他的输出及感测器下面的图是当时我们为转换做的记录,从这张图是实际有的,右边是LM35传出来的结果的分数。

poYBAGNomM6AfXlqAABzMOk9ujE885.png
 

以下代码是在新公式交换之后。

这样的改变之后我们的程序码变成了下面的样子。

//sensor
const int sensor=A5; // Assigning analog pin A5 to variable 'sensor'
float tempc; //variable to store temperature in degree Celsius
float tempf; //variable to store temperature in Fahreinheit
float vout; //temporary variable to hold sensor reading
char rT='24';

void loop(){
vout=analogRead(sensor); //Reading the value from sensor
vout=(vout*500)/1023;
if (vout<19.5){
Serial.print("lower than 10");
}
else if (vout>=19.5 and vout<21){
Serial.print("about 15");
}
else if (vout>=21 and vout<22){
Serial.print("about 20");
}
else if (vout>=22 and vout<24){
Serial.print("about 25");
}
else if (vout>=24 and vout<24.5){
Serial.print("about 30");
}
else if (vout>=24.5 and vout<26.5){
Serial.print("about 35");
}
else if (vout>=26.5 and vout<28.5){
Serial.print("about 40");
}
else if (vout>=28.5 and vout<29.5){
Serial.print("about 45");
}
else if (vout>=29.5 and vout<31.5){
Serial.print("about 50");
}
else if (vout>=31.5 and vout<32.5){
Serial.print("about 55");
}
else{
Serial.print("higher than 60, warnning, its hot.");
}
Serial.print("in DegreeC=");
Serial.print("\t");
Serial.print(tempc);
Serial.print(" ");
Serial.print("in WTF=");
Serial.print("\t");
Serial.print(rT);
Serial.println();
}

参考:https ://www.instructables.com/id/Arduino-Temperature-Sensor-Using-LM35/

5.2 DFPlayer 迷你版

教程博客中有很多代码,我只取我们需要的部分:

他给了很多行程式,我只取了我的回应码:

#include "Arduino.h"
#include "SoftwareSerial.h"                    // 採用SoftwareSerial程式庫
#include "DFRobotDFPlayerMini.h"        // 採用DFRobotDFPlayerMini程式庫

SoftwareSerial mySoftwareSerial(2, 3);  // mySoftwareSerial(RX, TX), 宣告軟體序列傳輸埠
                                        // 用來與DFPlayerMini通訊用
DFRobotDFPlayerMini myDFPlayer;         //宣告MP3 Player

void setup() 
{
    Serial.begin(115200);                 // 定義Serial傳輸速率115200bps
    mySoftwareSerial.begin(9600);  // 定義mySoftwareSerial傳輸速率9600bps, DFPlayerMini           的通訊速率為9600bps.

myDFPlayer.setTimeOut(500); // 設定通訊逾時為500ms

//----Set volume----
    myDFPlayer.volume(10);     // 設定音量, 範圍0~30.
//----Set device we use SD as default---- // 設定SD卡
    myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//----Mp3 control---- // 設定MP3參數
    myDFPlayer.enableDAC();     //Enable On-chip DAC
//----Mp3 play----  // 設定MP3播放參數
    myDFPlayer.play(1);  // 播放第1首音樂
}

不要忘记导入它请求的库。

详情见参考/从下面的链接看更详细的教学

pYYBAGNomNKAQbFrAABpyP1xzdw060.png
 

在这里,我通过Sound Of Text录制了 11 个 mp3 文件并保存到我的 micro SD 卡中,然后插入 DFPlayer Mini。

记录文件有点像“大约15°C”或“高于60°C,警告,很热。”。

在这里我用 Sound Of Text录了11个mp3文件到我的SD卡里,然后插入micro DFPlayer Mini里。

这些音档的内容大应该是近似度“或像”“60度,小心高温。”

5.3 电源

pYYBAGNomNWAOpwyAADViCBna3c636.png
 

这部分没有代码!干杯! 唯一需要做的就是像上图那样连接电池(不是 LED 部分,只有电池)

没有程序要!恭喜!只要照上图接好电池就好(不要管LED,)

6.完成代码

#include "Arduino.h"
#include "SoftwareSerial.h"                    // 採用SoftwareSerial程式庫
#include        // 採用DFRobotDFPlayerMini程式庫
//mp3
/*Code designed by Sujay Alaspure in SA Lab */
SoftwareSerial mySoftwareSerial(2, 3);
DFRobotDFPlayerMini myDFPlayer;         //宣告MP3 Player
void printDetail(uint8_t type, int value);  //印出詳情
//sensor
const int sensor=A5; // Assigning analog pin A5 to variable 'sensor'
float tempc; //variable to store temperature in degree Celsius
float tempf; //variable to store temperature in Fahreinheit
float vout; //temporary variable to hold sensor reading
char rT='24';
//toggle
boolean state = false;
void setup() {
//toggle
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(7, INPUT);
digitalWrite(7, HIGH);
//MP3 Player
Serial.begin(115200);                 // 定義Serial傳輸速率115200bps
mySoftwareSerial.begin(9600);  // 定義mySoftwareSerial傳輸速率9600bps, DFPlayerMini的通訊速率為9600bps.
myDFPlayer.setTimeOut(500); // 設定通訊逾時為500ms
//----Set volume----
myDFPlayer.volume(30);     // 設定音量, 範圍0~30.
//----Set different EQ----  // 設定EQ(等化器 Equalizer)
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
//----Set device we use SD as default---- // 設定SD卡
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//----Mp3 control---- // 設定MP3參數
myDFPlayer.enableDAC();     //Enable On-chip DAC
pinMode(sensor,INPUT); // Configuring sensor pin as input
Serial.begin(9600);
}

void loop() {
//MP3 player
if (myDFPlayer.available())  // 監視MP3有沒有回應
{                                          // 有的話印出詳情
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
//toggle
if(digitalRead(7) != HIGH){
state = !state;
digitalWrite(13, state);
temp();
delay(2000);}
} //Delay of 1 second for ease of viewing

void temp(){
vout=analogRead(sensor); //Reading the value from sensor
vout=(vout*500)/1023;
if (vout<19.5){
Serial.print("lower than 10");
myDFPlayer.play(4);
}
else if (vout>=19.5 and vout<21){
Serial.print("about 15");
myDFPlayer.play(2);
}
else if (vout>=21 and vout<22){
Serial.print("about 20");
myDFPlayer.play(3);
}
else if (vout>=22 and vout<24){
Serial.print("about 25");
myDFPlayer.play(5);
}
else if (vout>=24 and vout<24.5){
Serial.print("about 30");
myDFPlayer.play(7);
}
else if (vout>=24.5 and vout<26.5){
Serial.print("about 35");
myDFPlayer.play(6);
}
else if (vout>=26.5 and vout<28.5){
Serial.print("about 40");
myDFPlayer.play(10);
}
else if (vout>=28.5 and vout<29.5){
Serial.print("about 45");
myDFPlayer.play(9);
}
else if (vout>=29.5 and vout<31.5){
Serial.print("about 50");
myDFPlayer.play(8);
}
else if (vout>=31.5 and vout<32.5){
Serial.print("about 55");
myDFPlayer.play(11);
}
else{
Serial.print("higher than 60, warnning, its hot.");
myDFPlayer.play(1);
}
Serial.print("in DegreeC=");
Serial.print("\t");
Serial.print(tempc);
Serial.print(" ");
Serial.print("in WTF=");
Serial.print("\t");
Serial.print(rT);
Serial.println();
}

7.外观

外部设计采用底部加重的半圆形锅形,此设计分为两部分,主要材料如下:

外部设计底部很重的半圆形,而可供选择的圆形用途为口腔内进行两式使用的多种形式,使用以下形式的材料:

poYBAGNomNiALI1DAAD377Sjt6c367.jpg
 

先用木板将鞋面做成一个与玻璃大小相匹配的圆环和18块三角形木片,按照边的大小排列,与圆环接合,形成鞋面的骨架杯的一部分,然后盖上表面的黑布。

首先在上半部用1个圆形木片的圆形覆盖面,在圆形上半部用1块圆形木片覆盖黑色的圆形小片,按照边长的大小进行排列,并在玻璃上接合。

pYYBAGNomNuAY1VGAAEf7JyJ8I8138.jpg
 

用葫芦在下半部分抹平不规则的表面,也用红布盖住。使用两种颜色来区分上下部分。

下半部则用葫芦,将不规则的磨平并用上红色两面,用两个颜色盖头部分。

poYBAGNomN6AF2itAAGqm3XYFQw181.jpg
 

8. 结果

首先,我们看一下内部操作:

首先先看看内部的准入吧:

 

物质和外部

实物和外貌

pYYBAGNomOGAWawpAAFxPo3Tkfw530.jpg
 

9. 结论

缺点:时间和预算紧张,无法选择一些更好的组件。并且可能添加一些功能,例如告诉用户温度正在测量。

时间长度限制,使用效果的时间长度有限,使用效果稍有不同。

Hope this tutorial will help you~

希望這個教程能幫到你~


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !