Как стать автором
Обновить

Йогуртница на основе arduino

Время на прочтение 3 мин
Количество просмотров 74K
картинка для привлечения внимания
Все знают, что йогурт очень полезный продукт, да к тому же и вкусный. Под катом небольшое повествование о том, как я решил сделать йогуртницу, немного фото и скетч.

Блуждая по просторам интернета, наткнулся я на такую интересную вещь, как йогуртница. Жена у меня любит йогурт и частенько его покупает. Почитал профильный сайт, вдохновился. Вдохновила сама мысль о том, что его можно легко приготовить дома, причём он получится даже полезней, чем из магазина. После прочтения нескольких обзоров и сравнений, мы с женой решили купить «Moulinex YG230 YOGURTEO». Но вот незадача – город у нас небольшой и в продаже её мы просто не смогли найти. Хотели уже оформлять под заказ и тут меня осенило.
Что такое йогуртница? Грубо говоря – прибор для поддержания определённой температуры в течении определённого времени. Это же просто, почему бы не сделать самому? Конечно! Как раз в тумбочке уже с полгода лежит без дела arduino. Каюсь, грешен, да простят меня гуру микроконтроллеров, но я далёк от этого. Необходимости и времени изучать программирование микроконтроллеров у меня не было, поэтому, интереса ради, купил ардуинку, поморгал светодиодом, убрал в тумбочку и забыл. И вот, у меня появился шанс объяснить жене «зачем я покупаю весь этот хлам, если он потом всё равно без дела лежит в тумбочке».
Помимо ардуины нужны ещё термодатчик DS18B20 и твердотельное реле. Описывать, как всё это соединять, думаю смысла нет – не раз обсуждалось на хабре и профильных сайтах.
Приведу только сам скетч:
#include <OneWire.h>

OneWire ds(10);
byte addr[8];
int active = true, ssrPin = 4, ledPin = 5;
float millisecondsPerGradus, currentTemperature, cookingTemperature = 36.0;
unsigned long totalWorkTime = 28800000; // 8 * 60 * 60 * 1000

void setup(void) {
  Serial.begin(9600);
  pinMode(ssrPin,OUTPUT);
  pinMode(ledPin,OUTPUT);
  while (true) {
    if (!ds.search(addr)) ds.reset_search();
    else break;
    delay(250);
  }
  //предварительный прогрев
  digitalWrite(ssrPin, HIGH);
  delay(10000);
  digitalWrite(ssrPin, LOW);
  delay(1000);
  //замер, за сколько миллисекунд температура воды изменяется на один градус
  thermometer();
  float startTemperature = currentTemperature;
  digitalWrite(ssrPin, HIGH);
  delay(30000);
  digitalWrite(ssrPin, LOW);
  delay(1000);
  thermometer();
  millisecondsPerGradus = 1000.0 / ((currentTemperature - startTemperature) / 30.0);
}

float thermometer(void) {
  byte data[9];
  while (true) {
    ds.reset();
    ds.select(addr);
    ds.write(0x44,1);
    delay(1000);
    ds.reset();
    ds.select(addr);
    ds.write(0xBE);
    for (byte i = 0; i < 9; i++) data[i] = ds.read();
    currentTemperature = (float)((data[1] << 8) | data[0]) / 16.0;
    if (currentTemperature != 85.00) break;
  }
  //Serial.println(currentTemperature);
}

void loop(void) {
  if (!active) {
    delay(5000);
    return;
  }
  if (millis() > totalWorkTime) {
    //завершаем подогрев и оповещаем светодиодом
    digitalWrite(ledPin, HIGH);
    active = false;
    return;
  }
  thermometer();
  unsigned long delayTime;
  if (currentTemperature >= cookingTemperature) {
    delay(1000);
    return;
  }
  else if (currentTemperature > cookingTemperature - 2.0){
    //если температура близка к необходимой, замедляем процесс подогрева
    delayTime = millisecondsPerGradus * ((cookingTemperature - currentTemperature)/3.0);
  }
  else {
    //иначе подогреваем на градус
    delayTime = millisecondsPerGradus;
  }
  digitalWrite(ssrPin, HIGH);
  delay(delayTime);
  digitalWrite(ssrPin, LOW);
  delay(1000);
}


Температура и время подбирались экспериментальным путём, не одна банка йогурта была испорчена. В итоге сошёлся на том, что надо готовить восемь часов (ставлю на ночь) при температуре 36 градусов. Везде пишут, что температура должна быть 38-40 градусов, но при такой температуре за восемь часов йогурт скисал (расслаивался), а за пять часов (до момента начала расслоения), как мне показалось, йогурт не успевал настаиваться и получался хоть и густым, но не таким вкусным. Кстати, точность DS18B20 меня приятно удивила, сверял с ртутным градусником — разница всего в 0,2-0,3 градуса. Об окончании приготовления оповещает светодиод (это же ардуино, она обязана моргать светодиодом в любом проекте, любой сложности).

Ну а теперь фотографии:

«Я его слепила из того, что было», реле с радиатором для хиленького кипятильничка это конечно сильно. Реле и без радиатора не нагревается, но чтобы не потерять радиатор — поставил реле вместе с ним.

Кипятильник, термодатчик и «миксер» чтобы температура воды была одинаковой в любой точке.

Внешний вид конечно с «Moulinex YG230 YOGURTEO» ни в какое сравнение, зато своими руками, из подручных средств, на коленке.

Жена отобрала кастрюлю, теперь йогуртница выглядит так.

На йогурт беру молоко 3,2% жирности (на 2,5% йогурт выходит жидковат). Закваску можно покупать в аптеке, например Эвиталия, но я предпочитаю Активию или Актимель, йогурт получается плотный и однородный, две чайных ложки на такую баночку вполне достаточно.



Готовый йогурт. Аж ложка стоит! Ну, почти стоит.

Вариант сервировки.

Здоровья вам и вашим близким!
P.S.: Удивите свою любимую девушку, подайте на завтрак самодельный йогурт. Как говорится – лучший подарок, это подарок, сделанный своими руками. Йогурт на подарок, конечно, не тянет, но девушка оценит вашу заботу и внимание.
Теги:
Хабы:
+64
Комментарии 53
Комментарии Комментарии 53

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн