Вы когда-нибудь пробовали заваривать чай, но он получался слишком слабым или горьким? С этой простой и интересной проектной идеей вы сможете создать устройство, которое будет погружать чайный пакетик в воду ровно на то время, которое вам нужно. Вам нужно будет просто прикрепить пакетик, поставить чашку, и устройство сделает всю работу за вас!
Необходимые материалы и инструменты
Материалы:
- Дерево толщиной 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 принтер облегчает создание корпуса, но вы можете использовать другие методы, если у вас нет доступа к принтеру.
Надеюсь, вам понравился этот проект и вы будете наслаждаться идеальным чаем каждый день!
Росукс