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




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

Блуждая по просторам интернета, наткнулся я на такую интересную вещь, как йогуртница. Жена у меня любит йогурт и частенько его покупает. Почитал профильный сайт, вдохновился. Вдохновила сама мысль о том, что его можно легко приготовить дома, причём он получится даже полезней, чем из магазина. После прочтения нескольких обзоров и сравнений, мы с женой решили купить «Moulinex YG230 YOGURTEO». Но вот незадача – город у нас небольшой и в продаже её мы просто не смогли найти. Хотели уже оформлять под заказ и тут меня осенило.
Что такое йогуртница? Грубо говоря – прибор для поддержания определённой температуры в течении определённого времени. Это же просто, почему бы не сделать самому? Конечно! Как раз в тумбочке уже с полгода лежит без дела arduino. Каюсь, грешен, да простят меня гуру микроконтроллеров, но я далёк от этого. Необходимости и времени изучать программирование микроконтроллеров у меня не было, поэтому, интереса ради, купил ардуинку, поморгал светодиодом, убрал в тумбочку и забыл. И вот, у меня появился шанс объяснить жене «зачем я покупаю весь этот хлам, если он потом всё равно без дела лежит в тумбочке».
Помимо ардуины нужны ещё термодатчик DS18B20 и твердотельное реле. Описывать, как всё это соединять, думаю смысла нет – не раз обсуждалось на хабре и профильных сайтах.
Приведу только сам скетч:
<code class="cpp">#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); } </code>


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

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


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


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


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


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


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




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


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

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

Источник: habrahabr.ru/post/219033/