Вы когда-нибудь пробовали заваривать чай, но он получался слишком слабым или горьким? С этой простой и интересной проектной идеей вы сможете создать устройство, которое будет погружать чайный пакетик в воду ровно на то время, которое вам нужно. Вам нужно будет просто прикрепить пакетик, поставить чашку, и устройство сделает всю работу за вас!
Необходимые материалы и инструменты
Материалы:
- Дерево толщиной 4 мм
- Arduino Uno
- Серво (например, SG90)
- Ультразвуковой датчик
- Провода и ленточные кабели для Arduino
- Изолента
- Двусторонний скотч
- Прищепка (или другой маленький зажим)
- Чашка
Инструменты:
- 3D принтер
- Лазерный резак для дерева
- Клеевой пистолет
Шаг 1: Вырезка деревянной основы


Для начала нам нужно подготовить основу для нашего устройства. Для этого вырежьте из 4 мм дерева детали по предоставленному шаблону с помощью лазерного резака.
Шаг 2: Сборка деревянной основы

После вырезки всех деревянных деталей, мы приступаем к сборке. Вам понадобятся:
- Изолента
- Двусторонний скотч
- Горячий клей
- Ультразвуковой датчик
Начните с крепления ультразвукового датчика к передней панели, используя горячий клей для фиксации. Затем соберите основу, соединив две базовые пластины с помощью двустороннего скотча. Продолжайте сборку, прикрепляя боковые и верхние панели, создавая коробку.
Шаг 3: Печать корпуса для Arduino

Для защиты и монтажа Arduino используйте 3D принтер для печати корпуса. Скачайте и распечатайте файлы .stl для верхней и нижней части корпуса. Соберите корпус, поместив Arduino внутрь и закрыв его верхней частью.
Шаг 4: Подключение электроники

Теперь давайте оживим наше устройство. Вам понадобятся:
- Arduino Uno в корпусе
- Ультразвуковой датчик
- Серво
- Провода и ленточные кабели для Arduino
- Двусторонний скотч или горячий клей
Подключите датчик и серво к Arduino по схеме, используя GND, VCC, TRIG, ECHO и другие порты. Загружайте код, чтобы заставить устройство работать.
Код
#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 comenced dipping in miliseconds
bool dipping = false;
bool reset = false;
void setup() {
// enbable 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;
}Шаг 5: Финальная сборка

Для последнего шага нам нужно прикрепить прищепку для чайного пакетика. Используйте двусторонний скотч или горячий клей для крепления прищепки к концу деревянного рычага. Затем соедините рычаг с серво, используя скотч или клей.
Шаг 6: Финальное тестирование

Теперь пришло время протестировать вашу чайную машинку. Подключите Arduino к источнику питания, зафиксируйте чайный пакетик прищепкой и поставьте чашку с горячей водой на устройство. Наслаждайтесь идеально заваренным чаем!
Часто задаваемые вопросы
Можно ли использовать другой тип дерева? Да, но убедитесь, что его толщина составляет около 4 мм, чтобы все детали хорошо подходили друг к другу.
Какой датчик лучше всего использовать? Мы использовали ультразвуковой датчик, но можно попробовать и другие виды датчиков, если вы уверены в их точности.
Могу ли я настроить длительность и глубину погружения чайного пакетика? Да, в коде вы можете изменить значения minPos, maxPos, dipDuration и restingPos под свои предпочтения.
Нужно ли мне обязательно использовать 3D принтер? 3D принтер облегчает создание корпуса, но вы можете использовать другие методы, если у вас нет доступа к принтеру.
Надеюсь, вам понравился этот проект и вы будете наслаждаться идеальным чаем каждый день!
Росукс


