打造你的完美泡茶助手
引言
你是否曾遇到过泡出的茶太淡或太苦?通过这个项目,你可以创建一个设备,为你的茶包提供完美的浸泡时间。只需附上一个茶包并放置你的杯子,设备就会开始工作!它将完美地按照你的喜好浸泡你的茶。
实物图:
材料清单
- 4毫米厚的木材
- Arduino Uno
- SG90伺服电机
- 超声波传感器
- Arduino电缆和软排线
- 胶带
- 双面胶带
- 夹子(或其它小夹具)
- 杯子
所需机器/工具:
- 3D打印机
- 激光木材切割机
- 热熔胶枪
制作步骤
步骤1:切割木质基座
首先,我们需要一个基座来构建我们的泡茶机器。使用激光切割机切割4毫米厚的木材。
开始根据提供的模板激光切割4毫米木材。如果你的激光切割机支持svg文件,可以使用.svg文件。我也包含了原始的Adobe Illustrator文件,以防你的激光切割机需要特定的导出设置。
注意:附带的图片中的前面板没有为超声波传感器预留孔。但是.svg和.ai文件中为这个传感器预留了空间。
步骤2:组装木质基座
当然,在我们切割出木质模板后,我们还需要将其组装起来。
这一步你需要以下材料:
- 胶带
- 双面胶带
- 步骤1中切割的木材
- 热熔胶枪
- 超声波传感器
首先,取"前面板"(带有两个小孔的面板),将你的超声波传感器"眼睛"插入孔中。然后使用一些热熔胶保持超声波传感器的位置。我不得不弯曲我的4个连接针脚,因为它们朝下。针脚应该像图片中那样朝外。
基座板
开始组装,在"基座1"模板顶部添加一些双面胶带。确保不要在圆形开口处粘贴胶带。
在"基座1"和"基座2"之间夹上双面胶带,然后将"基座2"板紧紧压在"基座1"板上。这将形成一个约8毫米厚的基座板,由两个基座板组成。
盒子
在组装基座板后,我们需要制作放在上面的"盒子"。首先取一个"侧板"并将其滑入基座板,另一侧重复此步骤。
现在插入带有已连接超声波传感器的前面板。你可能需要稍微抬起侧面以将其放入。
通过将"顶部"件放在侧面和前板上来组装屋顶。
你可以用一些胶带或热熔胶来固定"盒子",具体取决于你的喜好。我使用了胶带将盒子的侧面固定在一起。
注意:完成所有这些步骤后,你应该还剩下一块木材,这块木材将在后面的步骤中使用。
步骤3:打印
现在我们想要打印一个保护和安装套件,用于我们的Arduino。下载并打印2个Arduino.stl文件,以获得套件的顶部和底部。
组装套件
首先将你的Arduino放入套件的底部部分。如果你有所需的螺丝,可以用螺丝固定,但我直接放了进去。然后取套件的顶盖,轻轻地将其放在底部盖和Arduino上,封闭套件。
对于我们的伺服电机,我们需要一些铰链系统来允许提起茶包。为此,请使用附件中提供的"臂","基座"和"盖子".stl文件。
组装伺服铰链
首先取你的伺服电机,将其放入base.stl的合适插槽中。取cover.stl打印件并像图片一样放在基座上。我使用了双面胶带来固定它,但如果你有合适的螺母和螺栓,也可以使用它们。
在盖子上好后,你可以将臂部连接到基座上。为此,取下伺服臂,将大孔放在现在空的伺服臂连接部分上,然后轻轻旋转臂部,直到另一端适合基座孔。在它点击到位后,用螺丝将原始伺服臂连接到伺服上,并确保你得到所需的旋转,以不限制后续的旋转。
步骤4:电子设备
让我们使其移动。
这一步你需要以下材料:
- 你的Arduino Uno及其套件
- 超声波传感器(在前木板上)
- 伺服电机
- Arduino电缆和软排线
- 双面胶带或热熔胶枪
电子设备
我们想要将Arduino Uno连接到伺服电机和超声波传感器。为了连接这些组件,我使用了第一张图片中提供的布线方案。
首先,将超声波传感器的GND和VCC引脚连接到Arduino的GND和3.3V端口。TRIG和ECHO引脚应按顺序连接到端口2和3。
你想将伺服电机的GND和PWR引脚连接到Arduino的5V和GND引脚。伺服数据应连接到引脚4。理想情况下,你只会将伺服PWR连接到外部电源,但在我的情况下,我不需要它。
代码
cpp
#include <Servo.h>
// pins
const int trigPin = 2; // trig pin for ultrasonic sensor
const int echoPin = 3; // echo pin for ultrasonic sensor
const int servoPin = 4; // pin for writing to servo
// distance
float minCheckDistance = 2.0; // min check distance in CM
float maxCheckDistance = 8.0; // max check distance in CM
float echoDuration, distance;
float averageDistance[10] = {0};
// servo
Servo serv;
const int minPos = 75; // servo maximum position while dipping
const int maxPos = 100; // servo minimum position while dipping
const int restingPos = 130; // servo resting position when not dipping
int targetPos = restingPos;
int pos = restingPos;
// time
unsigned long time = millis();
unsigned long startTime = time;
unsigned long dipDuration = 60000; // duration of commenced dipping in milliseconds
bool dipping = false;
bool reset = false;
void setup() {
// enable pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
serv.attach(servoPin);
serv.write(pos);
delay(300);
}
void loop() {
time = millis();
// insert a distance into the array
distance = checkDistance();
for (int i = 0; i < 9; i++) {
averageDistance[i] = averageDistance[i + 1];
}
averageDistance[9] = distance;
// handle the setting down cup and removing it again
if (checkAverageDistance()) {
if (time >= startTime + dipDuration && dipping) {
dipping = false;
reset = true;
} else if (!dipping && !reset) {
startTime = time;
dipping = true;
}
} else if (!checkAverageDistance()) {
dipping = false;
reset = false;
}
// handle servo
if (!dipping) {
targetPos = restingPos;
} else {
if (pos >= maxPos) {
targetPos = minPos;
} else if (pos <= minPos) {
targetPos = maxPos;
}
}
moveServo();
delay(50);
}
void moveServo() {
if (pos < targetPos) {
pos += 1;
serv.write(pos);
} else if (pos > targetPos) {
pos -= 1;
serv.write(pos);
}
}
float checkAverageDistance() {
// check if the average distance in the last 10 echoes is still around our target (3 echoes or more)
int avg = 0;
for (byte i = 0; i < 10; i++) {
if (averageDistance[i] <= maxCheckDistance && averageDistance[i] >= minCheckDistance) {
avg++;
}
}
return avg >= 3;
}
float checkDistance() {
// pulse the signal so we get echoes
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
echoDuration = pulseIn(echoPin, HIGH);
return (echoDuration * 0.0343) / 2;
}
这段代码为我们的泡茶设备提供动力,通过使用超声波传感器读取物体(茶杯)的距离,我们可以选择开始移动伺服电机。如果茶杯放在传感器前,伺服电机将开始在两个位置(minPos和maxPos)之间来回摆动,持续选择的时间(dipDuration)。如果杯子被移除,伺服电机将被告知返回到休息位置(restingPos)。通过改变这4个值(minPos,maxPos,dipDuration,restingPos),你可以告诉伺服电机浸泡的高度、低度、持续时间和不浸泡时的位置。
将代码更改为你首选的设置,并上传到你的Arduino Uno。
步骤5:手臂
对于设备的最后部分,我们需要一些东西来握住茶包。
这一步你需要以下材料:
- 步骤1中的最后一块木材
- 双面胶带
- 胶带
- 热熔胶枪
- 夹子或其它小夹
完成结果
是时候测试你的泡茶助手了。
首先,将Arduino连接到电源。然后选择你最喜欢的茶叶,烧些开水,倒入杯中。使用夹子将茶包固定在泡茶机的臂上。然后,魔法就发生了。将你的杯子放在圆形的凹槽上,让它将茶包浸入杯中。
希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。
作者:Svan.
注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!