Робот-бариста на Arduino

Суть данной публикации – показать, что не обязательно работать в Boston Dynamics, чтобы создавать роботов.

Ну и заодно посмотреть, что получится, если вынести микроконтроллер за пределы управляемого устройства.

Польза – кроме приготовления кофе, можно пастеризовать молоко, топить воск, да в принципе контролировать многие бытовые приборы не залезая внутрь.

И да, – не все в жизни – пчелы 😉

Итак, нам понадобится Arduino Pro mini, сервопривод SG-90, термистор NTC-3950(100k) и обычный резистор 100k.

Еще – пьезоизлучатель, соединительные провода dupont мама-мама, модуль 4-разрядного цифрового индикатора на TM1637 и powerbank/батарея 18650.

При этом, 5-вольтовый Ардуино, экран и сервопривод нормально заработали от 4-вольтового питания.

Для механической части использовалась досточка 200х200мм, п-образные подвесы 280мм для гипсокартона, саморезы, и конечно-же синяя изолента 😉

Не стану в сотый раз повторять как устанавливать программу для работы с Ардуино, ибо отдельно это сделал тут

Единственное, надо скачать и распаковать в папку /Arduino(№версии)/libraries библиотеку работы с экраном от Гивера

Теперь берем, и заливаем в ардуинку нижеследующий скетч:

#include "GyverTM1637.h" // удобная библиотека работы с дисплеем от Алекс Гивер https://github.com/AlexGyver/GyverLibs/releases/download/GyverTM1637/GyverTM1637.zip
#define CLK 9
#define DIO 8
GyverTM1637 disp(CLK, DIO);

#define B 3950 // B-коэффициент
#define SERIAL_R 110000 // сопротивление последовательного резистора, 102 кОм
#define THERMISTOR_R 100000 // номинальное сопротивления термистора, 100 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм)

const byte tempPin = A3;
const byte beepPin = 2;

int tboil=95; //Температура кипения
int angleON=45; // начальный угол сервопривода (0-180 для SG90)
int angleOFF=135; // угол выключенного состяния (0-180 для SG90)
boolean done=false;

int temp;
int t;
float tr;
float steinhart;

#include <Servo.h>
Servo myservo;

void setup() {
  // put your setup code here, to run once:
  disp.clear();
  disp.brightness(5);  // яркость, 0 - 7 (минимум - максимум)
  pinMode( tempPin, INPUT );
  pinMode( beepPin, OUTPUT );

  myservo.attach(0);
  myservo.write(angleON);
}

void loop() {
  // put your main code here, to run repeatedly:

t = analogRead( tempPin );
    tr = 1023.0 / t - 1;
    tr = SERIAL_R / tr;

    steinhart = tr / THERMISTOR_R; // (R/Ro)
    steinhart = log(steinhart); // ln(R/Ro)
    steinhart /= B; // 1/B * ln(R/Ro)
    steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
    steinhart = 1.0 / steinhart; // Invert
    steinhart -= 273.15; 

    temp=steinhart;
    disp.displayInt(temp);

    if(temp>=tboil){
      myservo.write(angleOFF);
        done=true;
      }
      if (done)
      {
        tone(beepPin,1000);
        delay(500);
        noTone(beepPin);
        delay(500);
        }
        else {
    delay(100);
        }

}

Загрузили? Приступаем к сборке системы.

Для начала немного модифицируем сервопривод, дабы он мог управлять ручкой газовой плиты:

Я использовал контактную гребенку PLS (от ардуино если хотите ;-), зафиксированную термоклеем.

Теперь паяем резисторы:

Только вместо A0 используем пин A3 – тест на внимательность 😉

Бипер (пьезоизлучатель) подключаем между пинами D2(длинный вывод элемента) и GND(короткий)

Светодиодный индикатор на 1637:

С питанием думаю все ясно, сигналы- CLK-D9, DIO-D8.

С подключением сервопривода использую лайфхак – торцевую гребенку программирования (с RX, TX):

Сигнальный провод сервы на RX, питание соответственно рядом.

Теперь при включении на экранике будет отображаться текущая температура датчика, а серва установится в начальное положение (45 градусов, углы и температура срабатывания меняются в скетче – все ясно из комментариев программы).

По достижении температуры срабатывания (95 градусов Цельсия) привод изменит положение на 135 градусов и будет звучать сигнал бипера.

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

Все, зажигаем газ, включаем систему и заводим зубцы сервопривода в контакт с регулятором(ручка находится между ними).

Да, у меня малый огонь плиты – это примерно на пол-одинадцатого, выключение – по часовой стрелке на 12.

Почему точка срабатывания 95 градусов цельсия?

Кофе по-турецки не греется до более высокой температуры (точка экстракции), иначе вкус будет не тот.

В реальности, вкус конечно не как во Львовских кофейнях, но знаете, с турецким чаем у меня тоже не сразу вышло 😉

Ах да, ссылка на видео

Удачных Вам самоделок!

P.S. Газ – не игрушка! Соблюдайте технику безопасности!
Не оставляйте работающую систему без присмотра, после окончании работы проверяйте выключенность конфорок!

Leave a Reply

Your email address will not be published. Required fields are marked *