- PVSM.RU - https://www.pvsm.ru -

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

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

Блуждая по просторам интернета, наткнулся я на такую интересную вещь, как йогуртница. Жена у меня любит йогурт и частенько его покупает. Почитал профильный сайт, вдохновился. Вдохновила сама мысль о том, что его можно легко приготовить дома, причём он получится даже полезней, чем из магазина. После прочтения нескольких обзоров и сравнений, мы с женой решили купить «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 градуса. Об окончании приготовления оповещает светодиод (это же ардуино, она обязана моргать светодиодом в любом проекте, любой сложности).

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

Йогуртница на основе arduino
«Я его слепила из того, что было», реле с радиатором для хиленького кипятильничка это конечно сильно. Реле и без радиатора не нагревается, но чтобы не потерять радиатор — поставил реле вместе с ним.
Йогуртница на основе arduino
Кипятильник, термодатчик и «миксер» чтобы температура воды была одинаковой в любой точке.
Йогуртница на основе arduino
Внешний вид конечно с «Moulinex YG230 YOGURTEO» ни в какое сравнение, зато своими руками, из подручных средств, на коленке.
Йогуртница на основе arduino
На йогурт беру молоко 3,2% жирности (на 2,5% йогурт выходит жидковат). Закваску можно покупать в аптеке, например Эвиталия, но я предпочитаю Активию или Актимель, йогурт получается плотный и однородный, две чайных ложки на такую баночку вполне достаточно.
Йогуртница на основе arduino

Йогуртница на основе arduino
Готовый йогурт. Аж ложка стоит! Ну, почти стоит.
Йогуртница на основе arduino
Вариант сервировки.

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

Автор: Shrim

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/news/58754

Ссылки в тексте:

[1] йогурт: http://ru.wikipedia.org/wiki/%D0%99%D0%BE%D0%B3%D1%83%D1%80%D1%82

[2] Источник: http://habrahabr.ru/post/219033/