Ультимативный DIY Кегератор: полное руководство по компонентам и сборке
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino Pro Mini 328 — 3.3V/8MHz (SparkFun) | 7 |
| Усилитель тензодатчика HX711 (SparkFun) | 1 |
| Распределительная плата Leviton 47603-12B 4x12 | 1 |
| Raspberry Pi 2 Model B | 1 |
| Блок питания AC 100-220V → 5V 6A 30W | 1 |
| Датчик движения IR | 1 |
| Морозильная камера 10.6 куб. фут (coffre) | 1 |
| Цифровые почтовые весы Smart Weight | 5 |
| Клавиатура Rii K12 Ultra Slim 2.4 GHz | 1 |
| WiFi-адаптер для Raspberry Pi | 1 |
| Модуль реле 5V (Arduino) | 1 |
| Датчик температуры/влажности DHT11 (4 пина) | 2 |
| Датчик температуры DHT22 | 3 |
| Два стойки для крана из нержавейки (HomeBrewStuff) | 2 |
| Охладитель башни для крана | 1 |
| Датчик давления I2C 0-30 PSI (3.3V) ABPMANN030PG2A3 | 1 |
Необходимые инструменты
- Столярные инструменты (для доработки корпуса морозильника)
- Болтрезы
- Паяльник
- Термоусадочная трубка
О проекте
Заявление об отказе ответственности: Во-первых, этот проект никак не пропагандирует употребление или злоупотребление алкоголём, содержание кегератора полностью зависит от пользователя.
Проект родился из желания лучше управлять содержимым кегератора. Кегератор работает по принципу: держать напиток холодным и поддерживать карбонатизацию на заданном давлении (PSI). К тому же, просто наливая напиток, вы не знаете, сколько осталось в кеге. Было бы обидно, если во время футбол в воскресенье рутовый пиво закончится на полпути.
Цели проекта:
- Поддерживать постоянную температуру напитков, предотвращать перегрев или замерзание
- Обеспечивать оптимальный уровень карбонатизации для лучшего вкуса
- Отслеживать количество напитка в каждом кеге и давать наглядную обратную связь
- Контролировать остаток CO₂ в баллоне для карбонатизации
Основные электронные компоненты и их назначение:
- Морозильная камера (coffre) — используется как охлаждающий блок и рама для создания мебели
- Raspberry Pi 2 на Windows 10 IoT Core — «мозг» системы
- Почтовые весы (5 шт.) — измеряют вес каждого кега и баллона CO₂. Электроника весов заменена на усилитель тензодатчика HX711 и мини-Arduino. Обмен с Raspberry Pi по I2C
- 5 цифровых датчиков температуры — на дне камеры, на нижней стороне крышки, в каждой башне крана (2 шт.) и снаружи для ambiente. Подключены к отдельному Arduino, обмен по I2C
- Датчик давления Honeywell — на воздушных линиях карбонатизации. Регулировка PSI пока ручная, но датчик даёт точное показание давления
- Блок питания 5V 6A — питание Raspberry Pi 2, запас мощности для адресной LED-ленты
- Реле в разрыве питания компрессора — позволяет включать/выключать компрессор для управления температурой
Облачная связь
Ultimate Kegerator содержит веб-сервер для удалённой настройки через REST-сервисы и простого просмотра статуса. Доступен по адресу: https://slsys.homeip.net:9501.
Кроме того, устройство отправляет телеметрию в Windows Azure Event Hub. Стандартный NuGet-пакет для Event Hub не подойдёт, нужна легкая библиотека от Windows Embedded MVP Paolo Patierno: AzureSBLite.


Планы для Stream Analytics:
- Мониторинг и уведомления при выходе температуры за норму
- Уведомления при низком уровне CO₂
- Обнаружение утечки CO₂ (постепенное снижение веса баллона)
Фотографии сборки











Код (C# — превью перед публикацией на GitHub)
Класс Keg
using LagoVista.Common.Commanding;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Xaml;
namespace LagoVista.IoT.Common.Kegerator.Models {
public class Keg : DeviceBase {
int _idx;
TimeSpan _updateInterval;
private Scales.Scale _scale;
public Keg(int idx, Scales.Scale scale, TimeSpan updateInterval) {
_idx = idx;
_updateInterval = updateInterval;
_scale = scale;
}
public override TimeSpan UpdateInterval { get { return _updateInterval; } }
public override void Refresh() {
LastUpdated = DateTime.Now;
LagoVista.Common.PlatformSupport.Services.DispatcherServices.Invoke(() => {
ContentsWeight = Scale.Weight - ContainerWeightLb;
if (FullContentsWeightLb > 0)
PercentFull = Convert.ToInt32((ContentsWeight / (FullContentsWeightLb - ContainerWeightLb)) * 100);
else
PercentFull = 0;
PercentFull = Math.Min(PercentFull, 100);
if (GlassSizeOz > 0)
QtyRemaining = Convert.ToInt32((ContentsWeight * 16) / GlassSizeOz);
else
QtyRemaining = 0;
RaisePropertyChanged("PercentFullHeight");
RaisePropertyChanged("PercentFullDisplay");
});
}
public Scales.Scale Scale { get { return _scale; } }
// ... свойства, методы Save/Load, команды ...
}
}
Класс Scale
using LagoVista.Common.Commanding;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Devices.I2c;
namespace LagoVista.IoT.Common.Kegerator.Scales {
public class Scale : DeviceBase {
Windows.Devices.I2c.I2cDevice _scaleI2CChannel;
int _countOffset;
double? _calibrationFactor = null;
private TimeSpan _updateInterval;
byte _address;
public Scale(byte address) { _address = address; }
// ... методы инициализации I2C, чтения веса, калибровки, обнуления ...
}
}
Класс Kegerator (главный контроллер)
using LagoVista.Common.Commanding;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Devices.I2c;
namespace LagoVista.IoT.Common.Kegerator {
public class Kegerator : INotifyPropertyChanged {
// ... синглтон, инициализация всех устройств (температура, весы, давление, CO2, кеги),
// таймер обновления, веб-сервер REST, отправка в Azure Event Hub ...
}
}
Схемы
Высокоуровневая диаграмма компонентов системы
Производственный процесс
- Система избегания препятствий с ИИ (Q-learning) на Arduino и ультразвуковых датчиках
- Интерактивный гироскопический LED-дисплей на NeoPixel Ring и Arduino
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- DIY-костюм «Облако»: LED-лента, Arduino Nano и детали SparkFun
- Промышленный робот-линейный следователь для транспортировки материалов
- Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
- Умная бутылка для воды на Arduino: мониторинг и напоминания в реальном времени
- DIY Теневой театр на Arduino и адресной LED-ленте: световое шоу к праздникам
- Переносная система видеонаблюдения: робот с камерой на Raspberry Pi и Arduino
- Лучшие станки с проволочной ЭРО: решения точной резки из Тайваня