12 июня 2013

Машина для заваривания чая на Arduino



Решил поделиться с вами своей поделкой, а заодно и повысить настроение. Вы никогда не задумывались, почему кофеварки есть почти в каждом доме, а аппаратом для быстрого приготовления стакана чая может похвастать далеко не каждый? Подробности об изготовлении несколько бесполезного простого аппарата для заваривания чая под катом.

Во-первых, у меня на полке лежит Arduino, а точнее ее совместимый аналог Freeduino. Думаю, нет нужды ее описывать.

Во-вторых, завалялось много приятных мелочей, а именно сервопривод, по размерам напоминающий этот:



Сначала была идея собрать манипулятор и поиграться с ним, но из подручных материалов был только картон. Где-то в середине процесса сборки стало понятно, что лучше отложить сборку на некоторое время, пока не появится пластик для изготовления балок. Все равно нормальный манипулятор сделать из картона и стяжек за полчаса не получилось бы. Забыл сказать, что клея под рукой не было, да и не очень хотелось вообще что-то клеить, поэтому крепилось абсолютно все стяжками, которые сосед по общежитию купил в огромном количестве.

Осталась картонная балка, прикрученная стяжками к сервоприводу. Прикрутил так хорошо, что жалко было ломать. Решил приделать ее к нерабочему утюгу. Чтобы вертикально стояла и могла махать. Зачем? Сам не знаю.



Во время очередного чаепития меня осенило, что движения балки отлично подходят, чтобы вместо меня макать пакет с чаем! Даже одной степени свободы достаточно, чтобы отлично заварить чай и выбросить пакетик прямо в урну. Допив чай, я побежал крепить утюг на подставку. Подставкой стала треснувшая крышка от ашановского «Универсального ящика». Ее уже видно на картинке выше.

Был придуман простенький алгоритм приготовления чая:

Ждем пока пользователь повесит пакетик, поставит кружку с кипятком и подтвердит свое согласие нажатием кнопки
Медленно купаем пакетик в кружке покачиваниями балки
Медленно вынимаем пакетик
Совершаем резкое движение балкой, за счет которого, пакетик улетает в урну, стоящую с другой стороны утюга
Готов! Чай! Орел!

Так как игрушка вряд ли проживет больше месяца, было решено ничего не паять, а собрать все на макетной плате, соединив все жилами из витой пары. Сборка длилась около 15 минут.

Во время сборки пришла в голову мысль, что чай бывает крепкий и не очень. Решил прикрутить реостат, на котором устанавливается количество погружений пакетика. Ну и два светодиода, для отладки и наглядности режима работы, ожидание и приготовление. Получилась схема:



Стало лень искать токоограничивающие резисторы для светодиодов. Решил просто подать на них ШИМом меньше 5 вольт и уповать на удачу.

Кнопка замыкает 2 пин на землю, так как изначально он подтянут внутренним резистором контроллера на напряжение питания и имеет значение HIGH при чтении.

Сервоприводу хватило общего питания Arduino, благо он один тут прожорливый. В итоге все устройство спокойно работает от USB, да вообще от любых пяти вольт, которые можно найти в комнате.

По алгоритму накидал простенький код:
#include <Servo.h>

Servo first;

const char minzav=55;
const char maxzav=73;

const char ready=135;
const char delete1=175;
const char sp1=100;
const char sp2=50;

void setup()
{
first.attach(11);
pinMode(2,INPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}

void replacespeed(int a,int b,int sp) //перемещение балки с задержкой sp между итерациями
{

if (a<=b)
{
int i=a;
while (i<b)
{
first.write(i);
i++;
delay(sp);
};
} else
{ int i=a;
while (i>b)
{
first.write(i);
i--;
delay(sp);
};};
}

void zavarka(int krep) // процесс макания пакетика. в процедуру передается крепость в диапазоне от 0 до 15
{
for (int i=0; i<=krep; i++)
{replacespeed(maxzav,minzav,sp1);
replacespeed(minzav,maxzav,sp1);};
}

void LEDS(int z) //процедура индикации. в зависимости от значения 1, 2, 0 будет гореть либо первый, либо второй, либо ни один светодиоды
{
if (z==0) {digitalWrite(5,LOW);digitalWrite(6,LOW);};
if (z==1) {analogWrite(5,200);digitalWrite(6,LOW);};
if (z==2) {digitalWrite(5,LOW);analogWrite(6,200);};
}

int krepost;
void loop()
{
first.write(ready); //ожидание
LEDS(1); //индикация режима ожидания
while (digitalRead(2)==HIGH){}; //ждем нажатия кнопки, пин подтянут внутренним резистором на +5, при нажатии замкнется на 0 и выйдет из цикла
LEDS(2);//индикация режима работы
krepost=map(analogRead(0),0,1023,0,15);
replacespeed(ready,maxzav,sp2);//плавно приближаемся к стакану вместе с пакетом
zavarka(krepost); //завараваем чай
replacespeed(maxzav,ready,sp2);//возвращаемся с пакетом в исходное состояние
delay(200); //задержки нужны для того, чтобы сервопривод успел переместиться до конца и принять следующую команду
first.write(delete1); //выбрасываем пакет
delay(200);
}

Никогда не испытывал такой эйфории от стакана чая! Только ради этого ощущения стоило собрать эту штуку. Можно собирать тем, кто только знакомится с микроконтроллерами или платформой Arduino.

Напоследок несколько фотографий и, конечно, видео.




+1

Комментарии 0

Регистрация в один клик!


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.