Съдържание:

CocktailMaker: 22 стъпки
CocktailMaker: 22 стъпки

Видео: CocktailMaker: 22 стъпки

Видео: CocktailMaker: 22 стъпки
Видео: Cocktail Machine EN 2022 2024, Ноември
Anonim
CocktailMaker
CocktailMaker

Коктейли, чудесен начин да завършите уморителен ден или да започнете вълнуващо парти. Отиваш в бара, поръчваш симпатично питие, сядаш и чакаш небесната смес да пристигне. В края на нощта плащате сметката, давате бакшиш на бакшиша и сте на път. Но какво ще стане, ако ви кажа, че има начин да се насладите на същия вкусен коктейл, без да ходите до бара или дори да харчите много пари. Всичко, което ще ви отнеме, е малко от свободното ви време и малко творчество. Продължавайте да четете и аз ще ви обясня стъпка по стъпка как да направите своя собствена машина за коктейли у дома.

Консумативи

За случая

- MDF с дебелина 6 мм

- 2 x 374 мм / 462 мм

- 2 x 280 мм / 462 мм

- 2 x 174 мм / 250 мм

- 1 x 162 мм / 250 мм

- 1 x 150 мм / 250 мм

- 1 x 180 мм / 162 мм

- 1 x 180 мм / 362 мм

- 1 x 362 мм / 100 мм

- 1 x 374 мм / 292 мм

- MDF с дебелина 12 мм

- 1 x 374 мм / 292 мм

- 2 x панти

- винтове

- лепило за дърво

За електрониката

- 1 x LCD дисплей 16x2

- 1 x 5V 8-канално релейно табло

- 1 x 12V DC 100W захранване

- 1 х малиново пи 3В+

- 8 x 12V DC Дозираща помпа

- 1 x PCA8574p I2C I/O разширител

- 1 х платка

- 1 x 330 Ohm резистор

- 2 x 470 ома резистор

- 1 х щепсел за разпределение

- 1 x инфрачервен сензор за избягване на препятствия

- 1 x ултразвуков модул

- 1 x магнитен превключвател за врати

- Меден проводник

Екстра

- 1 x малка фуния

- 1 x гъвкав капак от нутела

- 8м гъвкава тръба с дебелина 4 мм

- 3 x фиксатор

- бяла боя

- 1 х коктейл шейкър

Напитки

- 1 х бутилка джин

- 1 х бутилка ром

- 1 х бутилка водка

- 1 х бутилка текила

- 1 х бутилка тройна сек

- 1 х бутилка сок от лайм

- 1 x бутилка обикновен сироп

- 1 х бутилка кола

(по избор)

- 8 равни бутилки

Стъпка 1: Изчертаване на дупките

Изчертаване на дупките
Изчертаване на дупките

Започваме с измерване и изчертаване на необходимите дупки върху дървото.

  • преден панел (374 мм/462 мм)

    • На 6,5 см отгоре, в центъра на панела, нарисуваме правоъгълник с размера на нашия LCD дисплей.
    • на дъното, в центъра на панела, рисуваме правоъгълник с височина 25 см и ширина 15 см за вратата.
  • заден панел на отделението за електроника (362 мм/100 мм)

    изчертайте 8 пъти повърхността на помпите на този панел, за да направите всички помпи подходящи

  • горен панел на шейкърната камера (180 мм/162 мм)

    • нарисувайте цирк, голям колкото края на фунията в центъра на панела
    • На 3 см от ръба на късата страна начертайте формата на двата отвора, необходими за прилепване на ултразвуковия модул.
    • в предния десен ъгъл нарисувайте малка дупка, на 1 см от двете страни. През него преминаха два проводника.
  • десния страничен панел на шейкърната камера (174 мм/250 мм)

    На 10 см от дъното (къса страна), изчертайте двата отвора, необходими, за да може инфрачервеният сензор да се побере (в центъра)

Стъпка 2: Рязане/пробиване на отворите

Рязане/пробиване на отворите
Рязане/пробиване на отворите
Рязане/пробиване на отворите
Рязане/пробиване на отворите

Сега, след като извадихме дупките си, е време да вземем някои тежки машини и да ги изрежем/режем/пробием. Използвах обикновена бормашина и фреза и за по -малко от час работата беше свършена.

Ако сте като мен и имате затруднения при изрязването на начертаните линии, можете да използвате файл след това, за да поправите грешките си.

Стъпка 3: Лепене на корпуса

Залепване на калъфа
Залепване на калъфа
  • За външната страна

    • Започнете, като залепите задния панел (най-големия) върху долния панел (дебелия) под ъгъл от 90 градуса.
    • Добавете страните (2 x 280 мм/462 мм).
    • Ще оставим отпред и отгоре отворени засега
  • за вътрешността

    • Започнете, като направите камерата на шейкъра.

      • залепете двете страни (2 x 174 мм/250 мм) върху задния панел (162 мм/250 мм)
      • добавете горния панел (180 мм/162 мм) с двата отвора за ултразвуковия модул, обърнат към задния панел. Този панел трябва да покрива перфектно страните на трите панела.
  • за отделението за електроника

    залепете панела на двигателя върху долния панел (362 мм/180 мм)

  • залепете камерата на шейкъра в центъра на предната част на машината (оставете 6 мм за предния панел.
  • залепете отделението за електроника в горната част на машината, на 6 мм отпред. Панелът на двигателя трябва да е обърнат към задния панел.

Стъпка 4: Схемите

Схемите
Схемите
Схемите
Схемите

Преди да започнем да свързваме всички електронни компоненти, нека да разгледаме схемите.

Стъпка 5: Запояване на помпите

Запояване на помпите
Запояване на помпите

Уверете се, че всички основания са свързани. По този начин лесно можем да ги свържем към земята на захранването.

Стъпка 6: Свързване на релейното табло към помпите

Свързване на релейното табло към помпите
Свързване на релейното табло към помпите
  • Свържете всички COM на релейната платка, за да можем лесно да ги свържем към 12V на захранването.
  • Свържете всяко НЕ на релейната платка с различна помпа (+).

Стъпка 7: Добавете захранването и Raspberry Pi

Добавете захранването и Raspberry Pi
Добавете захранването и Raspberry Pi

Нямате нищо против предния панел на снимката, просто го поставих там, за да имам представа колко място ще има за електрониката.

  • свържете релейната платка така

    • 5V към 5V щифта на малиновото пи
    • GND към GND на малиновото пи
    • всеки IN към GPIO щифт на малиновото пи
  • свържете серията GND щифтове на помпите с 0V на захранването и серията COM на релейната платка с 12V на захранването.
  • Сега, ако изпълните прост скрипт, който активира всички свързани GPIO щифтове, можете да тествате запояването си и да поправите всички грешки, преди да има много проводници в отделението. Всички помпи трябва да стартират

Стъпка 8: Добавете инфрачервения сензор

Добавете инфрачервения сензор
Добавете инфрачервения сензор
Добавете инфрачервения сензор
Добавете инфрачервения сензор
Добавете инфрачервения сензор
Добавете инфрачервения сензор
  • първо пробих дупка в средата на отделението за електроника, така че кабелите от шейкърната да могат да се изкачат нагоре.
  • започнете с конфигуриране на сензора вдясно

    • свържете VDD към 3.3V на малиновото пи
    • свържете GND към GND на малиновото пи
    • поставете малко парче картон между приемника и предавателя
    • поставете шейкъра на около 5 см от сензора
    • вземете отвертка и завъртете тримера отгоре, докато светодиодът OUT изгасне.
    • тествайте шейкъра напред -назад и вижте дали сензорът реагира на движенията. (светодиодът OUT трябва да се включва и изключва).
    • повторете, ако е необходимо.
  • поставете приемника и предавателя през отворите, които направихме по -рано.
  • свържете изхода OUT към GPIO пина на малиновото пи.

Стъпка 9: Свържете ултразвуковия модул

Свържете ултразвуковия модул
Свържете ултразвуковия модул
Свържете ултразвуковия модул
Свържете ултразвуковия модул
  • поставете модула в отворите в горната част на шейкърната камера, които направихме по -рано.
  • свържете VCC с петте волта на малиновото пи.
  • свържете спусъка с GPIO щифт
  • направете разделител на напрежение между GND и ехото (както е показано на снимката)
  • свържете GDN с GND на малиновото пи.
  • свържете ехото с GPIO щифт

ако не разбирате какво искам да кажа с делител на напрежение, погледнете още веднъж схемите. той гарантира, че 5V ехото е понижено до 3.3V.

Стъпка 10: Инсталирайте вратата

Инсталирайте вратата
Инсталирайте вратата
Инсталирайте вратата
Инсталирайте вратата
  • Използвайте малки винтове, за да прикрепите пантите към вратата и към предния панел.
  • дупка с пръсти за по -лесно отваряне на вратата.

Стъпка 11: Инсталирайте превключвателя за врати

Инсталирайте превключвателя за врати
Инсталирайте превключвателя за врати
Инсталирайте превключвателя за врати
Инсталирайте превключвателя за врати

Използвайте винтове или лепило, за да прикрепите двете части на превключвателя на вратата към вратата и вътрешността на шейкърната камера.

Стъпка 12: Направете държач за тръби

Направете държач за тръби
Направете държач за тръби
  • изрежете осем парчета тръба с приблизително 20 см
  • използвайте кръгъл предмет (използвах гъвкав капак от нутела), за да ги държите

Стъпка 13: Поставете фунията

Поставете фунията
Поставете фунията
  • поставете фунията в последния отвор в горния панел на шейкърната камера.
  • поставете държача на тръбата във фунията и го закрепете с колчета за дрехи.

Стъпка 14: Прикрепете тръбите към помпата

Прикрепете тръбите към помпата
Прикрепете тръбите към помпата

прикрепете другата страна на тръбите към разпределителната страна на помпите.

Стъпка 15: Рязане на тръби за бутилки

Рязане на тръби за бутилки
Рязане на тръби за бутилки
Рязане на тръби за бутилки
Рязане на тръби за бутилки
Рязане на тръби за бутилки
Рязане на тръби за бутилки
Рязане на тръби за бутилки
Рязане на тръби за бутилки

изрежете тръбите с различни размери, така че всяка бутилка да бъде свързана с помпа. Прикрепете ги към неизползваната страна на помпите.

Стъпка 16: Добавете щепсела за разпространение

Добавете щепсела за разпространение
Добавете щепсела за разпространение
Добавете щепсела за разпространение
Добавете щепсела за разпространение
  • отрежете щепсела на конектора
  • пробийте дупка отстрани на отделението за електроника
  • прокарайте кабела през отвора
  • поставете отново конектора на конектора

Стъпка 17: Свържете Lcd

Свържете Lcd
Свържете Lcd
  • свържете lcd, както е показано на схемите
  • използвайте I2C i/o разширител, защото няма да има достатъчно GPIO щифтове
  • това е единственият път, когато имаме нужда от малка дъска

Стъпка 18: Залепете предния панел

сега, когато LCD (последният ни компонент) е свързан, можем да залепим предния панел към нашата машина.

Стъпка 19: Боядисване

Живопис
Живопис
Живопис
Живопис
Живопис
Живопис
Живопис
Живопис

не забравяйте да покриете недървените части с лента и да боядисате машината в цвят по ваш избор.

Стъпка 20: Напълнете машината

Напълнете машината
Напълнете машината

Последното нещо, което трябва да направим, преди да можем да качим кода и да се насладим на вкусен коктейл, е да напълним машината с малко алкохол и малко смесители.

Стъпка 21: Създайте базата данни

Създайте базата данни
Създайте базата данни
Създайте базата данни
Създайте базата данни

направете връзка с малиновото пи и създайте базата данни.

СЪЗДАЙТЕ БАЗА ДАННИ, АКО НЕ СЪЩЕСТВА `cocktailmaker` / *! 40100 НАСТРОЙКИ НА СЕКЦИИ ПО ДЕФАЛМЕНТ utf8 * /; ИЗПОЛЗВАЙТЕ` cocktailmaker`; -MySQL dump 10.13 Distrib 5.7.17, за Win64 (x86_64)--Хост: 127.0.0.1 База данни: cocktailmaker---------------------- --------------------------------- Версия на сървъра 5.7.20-log

/ *! 40101 SET @OLD_CHARACTER_SET_CLIENT = @@ CHARACTER_SET_CLIENT */;

/ *! 40101 SET @OLD_CHARACTER_SET_RESULTS = @@ CHARACTER_SET_RESULTS */; / *! 40101 SET @OLD_COLLATION_CONNECTION = @@ COLLATION_CONNECTION */; / *! 40101 ЗАДАВАНЕ НА ИМЕНА utf8 */; / *! 40103 SET @OLD_TIME_ZONE = @@ TIME_ZONE */; / *! 40103 SET TIME_ZONE = '+00:00' */; / *! 40014 SET @OLD_UNIQUE_CHECKS = @@ UNIQUE_CHECKS, UNIQUE_CHECKS = 0 */; / *! 40014 SET @OLD_FOREIGN_KEY_CHECKS = @@ FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0 */; / *! 40101 SET @OLD_SQL_MODE = @@ SQL_MODE, SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO' */; / *! 40111 SET @OLD_SQL_NOTES = @@ SQL_NOTES, SQL_NOTES = 0 */;

--

-Структура на маса за маса `cocktaillogboek`-

ДРОП ТАБЛИЦА АКО ИСЪСТВА `cocktaillogboek`;

/ *! 40101 SET @saved_cs_client = @@ character_set_client */; / *! 40101 SET character_set_client = utf8 */; CREATE TABLE `cocktaillogboek` (` id_cocktail_log` int (11) NOT NULL AUTO_INCREMENT, `aantal` tinyint (4) DEFAULT NULL,` datum` datetime DEFAULT CURRENT_TIMESTAMP, `cocktail_id` int (11) NOT NULL_ PRIMARY K, `cocktail_id`), KEY` fk_Cocktaillogboek_Cocktails1_idx` (`cocktail_id`), CONSTRAINT` fk_Cocktaillogboek_Cocktails1` ВЪНШЕН КЛЮЧ (`cocktail_id`) РЕФЕРЕНЦИИ,, коктейли` = ВЪЗМОЖ 5 КАРТЕТА ПО УМОЛЧАНЕ = utf8; / *! 40101 SET character_set_client = @saved_cs_client */;

--

-Дъмпинг данни за таблица `cocktaillogboek`-

ЗАКЛЮЧВАЙТЕ ТАБЛИЦИ `cocktaillogboek` НАПИСАЙТЕ;

/ *! 40000 АЛТЕР ТАБЛИЦА `cocktaillogboek` КЛЮЧОВЕ ЗА ИЗКЛЮЧВАНЕ */; ВМЕСТВАНЕ НА `cocktaillogboek` СТОЙНОСТИ (1, 1, '2019-05-31 18:06:24', 1), (2, 1, '2019-05-31 18:06:24', 2), (3, 2, '2019-05-31 18:06:24', 1), (4, 2, '2019-05-31 18:06:24', 2); / *! 40000 АЛТЕР ТАБЛИЦА `cocktaillogboek` АКТИВИРАНИ КЛЮЧОВЕ */; ОТКЛЮЧВАЙТЕ ТАБЛИЦИ;

--

-Структура на масата за „коктейли“-

ДРОП ТАБЛИЦА АКО ИСНАВА `коктейли`;

/ *! 40101 SET @saved_cs_client = @@ character_set_client */; / *! 40101 SET character_set_client = utf8 */; СЪЗДАЙТЕ ТАБЛИЦА `коктейли` (` id_cocktail` int (11) NOT NULL AUTO_INCREMENT, `naam_cocktail` tinytext,` code_cocktail` varchar (45) DEFAULT NULL, `inhoud_cocktail` float DEFAULT NULL, PRIMARY KEYY (` id_cock` код_коктейл_UNIQUE` (`код_коктейл`)) ДВИГАТЕЛ = InnoDB AUTO_INCREMENT = 3 КАРТЕТА ПО подразбиране = utf8; / *! 40101 SET character_set_client = @saved_cs_client */;

--

-Дъмпинг данни за трапезни `коктейли`-

ЗАКЛЮЧВАНЕ НА ТАБЛИЦИ `коктейли` НАПИСАЙТЕ;

/ *! 40000 АЛТЕР ТАБЛИЦА `коктейли` КЛЮЧОВЕ ЗА ИЗКЛЮЧВАНЕ */; ВСТАВЕТЕ В „коктейли“СТОЙНОСТИ (1, „студен островен чай с дълъг остров“, „1q3n2q3n3q3n4q3n5q3x6q3n8q2“, 20), (2, „текила изгрев“, „2q5x7q5x9q3 ', 13); / *! 40000 АЛТЕР ТАБЛИЦА `коктейли` АКТИВИРАНИ КЛЮЧОВЕ */; ОТКЛЮЧВАЙТЕ ТАБЛИЦИ;

--

-Структура на масата за "dranken"-

ДРОП ТАБЛИЦА АКО СЪЩЕСТВА `dranken`;

/ *! 40101 SET @saved_cs_client = @@ character_set_client */; / *! 40101 SET character_set_client = utf8 */; CREATE TABLE `dranken` (` id_drank` int (11) NOT NULL AUTO_INCREMENT, `naam_drank` tinytext,` tijd_per_centiliter` float DEFAULT NULL, `inhoud_drank` float DEFAULT NULL,` pomp_drank` минимум (4) NULT id_drank`)) ДВИГАТЕЛ = InnoDB AUTO_INCREMENT = 12 КАРТЕТА ПО подразбиране = utf8; / *! 40101 SET character_set_client = @saved_cs_client */;

--

-Дъмпингови данни за таблица `dranken`-

ЗАКЛЮЧВАЙТЕ ТАБЛИЦИ `dranken` ПИШЕТЕ;

/ *! 40000 АЛТЕР ТАБЛИЦА `dranken` КЛЮЧОВЕ ЗА ИЗКЛЮЧВАНЕ */; ВМЕСТВАЙТЕ В `dranken` СТОЙНОСТИ (1, 'джин', 20, 70, 1), (2, 'текила', 20, 70, 2), (3, 'wodka', 20, 70, 3), (4, „тройна секунда“, 20, 70, 4), (5, „ром“, 20, 70, 5), (6, „уиски“, 20, 70, NULL), (7, „кола“, 15, 100, 6), (8, "sinaasappelsap", 25, 100, 7), (9, "limoensap", 20, 100, 8), (10, "гренадин", 30, 100, 9), (11, „suikersiroop“, 30, 100, 10); / *! 40000 АЛТЕР ТАБЛИЦА `dranken` АКТИВИРАНИ КЛЮЧОВЕ */; ОТКЛЮЧВАЙТЕ ТАБЛИЦИ;

--

-Структура на масата за таблица `dranken_cocktails`-

ИЗТРОЙТЕ ТАБЛИЦА, АКО ИМА „dranken_cocktails“;

/ *! 40101 SET @saved_cs_client = @@ character_set_client */; / *! 40101 SET character_set_client = utf8 */; СЪЗДАЙТЕ ТАБЛИЦА `dranken_cocktails` (` Dranken_id_drank` int (11) NOT NULL, `Cocktail_id_cocktail` int (11) NOT NULL, PRIMARY KEY (` Dranken_id_drank`, `Cocktail_id_cocktail`), KEY_cock_cock_cock_cock fk_Dranken_has_Cocktail_Dranken1_idx` (`Dranken_id_drank`) ограничението` fk_Dranken_has_Cocktail_Cocktail1` ВЪНШНА KEY (`Cocktail_id_cocktail`) СПРАВКИ` cocktails` (`id_cocktail`) ON DELETE действие от UPDATE никакво действие, ограничение` fk_Dranken_has_Cocktail_Dranken1` външен ключ (`Dranken_id_drank`) позоваванията` dranken` (`id_drank`) ON DELETE NO ACTION ON UPDATE NO ACTION) ДВИГАТЕЛ = InnoDB DEFAULT CHARSET = utf8; / *! 40101 SET character_set_client = @saved_cs_client */;

--

-Дъмпинг данни за таблица `dranken_cocktails`-

ЗАКЛЮЧВАЙТЕ ТАБЛИЦИ `dranken_cocktails` ПИШЕТЕ;

/ *! 40000 АЛТЕР ТАБЛИЦА `dranken_cocktails` КЛЮЧОВЕ ЗА ИЗКЛЮЧВАНЕ */; / *! 40000 АЛТЕР ТАБЛИЦА `dranken_cocktails` АКТИВИРАНИ КЛЮЧОВЕ */; ОТКЛЮЧВАЙТЕ ТАБЛИЦИ;

--

-Структура на масата за "софт" на масата-

ДРОП ТАБЛИЦА АКО СЪЩЕСТВАВА „меки“;

/ *! 40101 SET @saved_cs_client = @@ character_set_client */; / *! 40101 SET character_set_client = utf8 */; CREATE TABLE `softs` (` bruisend_drank` tinyint (4) DEFAULT NULL, `drank_id` int (11) NOT NULL, KEY` fk_Softs_Dranken1_idx` (`drank_id`), CONSTRAINT` fk_Softs_Dranken1ENE `(` id_drank`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARSET = utf8; / *! 40101 SET character_set_client = @saved_cs_client */;

--

-Дъмпингови данни за таблицата `меки '-

ЗАКЛЮЧВАЙТЕ ТАБЛИЦИ `меки` ПИШЕТЕ;

/ *! 40000 АЛТЕР ТАБЛИЦА `меки` КЛЮЧОВЕ ЗА ИЗКЛЮЧВАНЕ */; ВМЕСТВАНЕ НА "софт" СТОЙНОСТИ (1, 7), (0, 8), (0, 9), (0, 10), (0, 11); / *! 40000 АЛТЕР ТАБЛИЦА `softs` АКТИВИРАНИ КЛЮЧОВЕ */; ОТКЛЮЧВАЙТЕ ТАБЛИЦИ;

--

-Структура на масата за „спиртни напитки“-

ДРОП ТАБЛИЦА АКО СЪЩЕСТВАВА „спиртни напитки“;

/ *! 40101 SET @saved_cs_client = @@ character_set_client */; / *! 40101 SET character_set_client = utf8 */; СЪЗДАВАЙТЕ ТАБЛИЦА `спиртни напитки` (` алкохол_процент_пиене` миниатюрен текст, `сорт_пие` миниатюрен,` пити_ид` int (11) НЕ НУЛ, КЛЮЧ `fk_Spirits_Dranken_idx` (` drank_id`), ОГРАНИЧИТЕ '' fk_Spirits_Dranken` ЗАПИТАН` `(` id_drank`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARSET = utf8; / *! 40101 SET character_set_client = @saved_cs_client */;

--

-Дъмпинг данни за таблица `спиртни напитки`-

ЗАКЛЮЧВАЙТЕ ТАБЛИЦИ `духове` НАПИСАЙТЕ;

/ *! 40000 АЛТЕР ТАБЛИЦА `спиртни напитки` КЛЮЧОВЕ ЗА ИЗКЛЮЧВАНЕ */; ВЪВЕЖДАЙТЕ СТОЙНОСТИ на „спиртни напитки“(„40“, „джин“, 1), („35“, „текила“, 2), („37.5“, „wodka“, 3), („40“, „тройни секунди ', 4), ('37.5', 'ром', 5), ('37.5 ',' уиски ', 6); / *! 40000 АЛТЕР ТАБЛИЦА `спиртни напитки` АКТИВИРАНИ КЛЮЧОВЕ */; ОТКЛЮЧВАЙТЕ ТАБЛИЦИ;

--

-Дъмпинг събития за база данни „коктейлмейкър“-

--

- Дъмпинг процедури за база данни „коктейлмейкър“- / *! 40103 SET TIME_ZONE =@OLD_TIME_ZONE * /;

/ *! 40101 SET SQL_MODE =@OLD_SQL_MODE */;

/ *! 40014 SET FOREIGN_KEY_CHECKS =@OLD_FOREIGN_KEY_CHECKS */; / *! 40014 SET UNIQUE_CHECKS =@OLD_UNIQUE_CHECKS */; / *! 40101 SET CHARACTER_SET_CLIENT =@OLD_CHARACTER_SET_CLIENT */; / *! 40101 SET CHARACTER_SET_RESULTS =@OLD_CHARACTER_SET_RESULTS */; / *! 40101 SET COLLATION_CONNECTION =@OLD_COLLATION_CONNECTION */; / *! 40111 SET SQL_NOTES =@OLD_SQL_NOTES */;

-Дъмпингът приключи на 2019-06-03 14:56:53

Стъпка 22: Написване на кода

Писане на кодекса
Писане на кодекса

Много часове работа преминаха в тази програма, за щастие за вас имам хранилище на github.

Ето линк към кода.

Препоръчано: