Ви коли-небудь пробували заварювати чай, але він виходив надто слабким чи гірким? З цією простою і цікавою проектною ідеєю ви зможете створити пристрій, який занурюватиме чайний пакетик у воду рівно на той час, який вам потрібно. Вам потрібно буде просто прикріпити пакетик, поставити чашку і пристрій зробить всю роботу за вас!
Необхідні матеріали та інструменти
Матеріали:
- Дерево завтовшки 4 мм
- Arduino Uno
- Серво (наприклад, SG90)
- Ультразвуковий датчик
- Провід та стрічкові кабелі для Arduino
- Ізоляційна стрічка
- Двосторонній скотч
- Прищіпка (або інший маленький затискач)
- Чашка
Інструменти:
- 3D принтер
- Лазерний різак для дерева
- Клейовий пістолет
Крок 1: Вирізання дерев’яної основи
Для початку нам потрібно підготувати основу нашого пристрою. Для цього виріжте з 4 мм дерева деталі за наданим шаблоном за допомогою лазерного різака.
Крок 2: Складання дерев’яної основи
Після вирізки всіх дерев’яних деталей, ми приступаємо до збирання. Вам знадобляться:
- Ізоляційна стрічка
- Двосторонній скотч
- Гарячий клей
- Ультразвуковий датчик
Почніть із кріплення ультразвукового датчика до передньої панелі, використовуючи гарячий клей для фіксації. Потім зберіть основу, з’єднавши дві базові пластини двостороннього скотчу. Продовжуйте складання, прикріплюючи бічні та верхні панелі, створюючи коробку.
Крок 3: Друк корпусу для Arduino
Для захисту та монтажу Arduino використовуйте 3D принтер для друку корпусу. Завантажте та роздрукуйте файли .stl для верхньої та нижньої частини корпусу. Зберіть корпус, помістивши всередину Arduino і закривши його верхньою частиною.
Крок 4: Підключення електроніки
Тепер давайте оживимо наш пристрій. Вам знадобляться:
- Arduino Uno у корпусі
- Ультразвуковий датчик
- Серво
- Провід та стрічкові кабелі для Arduino
- Двосторонній скотч або гарячий клей
Підключіть датчик та серво до Arduino за схемою, використовуючи GND, VCC, TRIG, ECHO та інші порти. Завантажуйте код, щоб змусити пристрій працювати.
Код для Arduino
#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 принтер полегшує створення корпусу, але ви можете використовувати інші методи, якщо ви не маєте доступу до принтера.
Сподіваюся, вам сподобався цей проект і ви будете насолоджуватися ідеальним чаєм щодня!
Росукс