====== Сигнализация для холодильника — твой персональный диетолог ====== ** [[slot-box:start#хочу_собрать|Проекты на Arduino и Slot Shield]] ** Похудеть просто — нужно меньше есть. Особенно после 6 вечера и раньше 7 утра. Но что делать, если по ночам из холодильника подозрительным образом исчезают продукты? Как пресечь ночной дожор и выявить лунатика? Поможет устройство на Slot Shield. {{ :slot-box:firge-alarm-system:fridge_alarm.jpg?nolink |}} Устройство работает по расписанию, ориентируясь на время c модуля RTC. Как только устройство переходит в режим сигнализации, контроллер начинает опрашивать фоторезистор. В закрытом холодильнике света нет, но стоит хотя бы приоткрыть дверцу, сработает противообжорная сирена — запищит баззер и замигает маячок из светодиодной матрицы. Любой лунатик проснётся, любой воришка — устыдится. * Платформы: [[amp>product/arduino-uno?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Arduino Uno]], [[amp>product/arduino-leonardo?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Arduino Leonardo]], [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Iskra Neo]] * Язык программирования: Arduino (C++) ===== Что потребуется ===== [[amp>collection/firge-alarm-system?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki | Полный сет]] компонентов проекта. В сет входят: * [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Iskra Neo]] * [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Troyka Slot Shield]] * [[amp>product/troyka-light-sensor?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|фоторезистор]] * [[amp>product/troyka-buzzer?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|пьезопищалка]] * [[amp>product/troyka-rtc?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|часы реального времени]] * [[amp>product/troyka-rgb-led-4x4?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|RGB матрица 4×4]] ===== Видеоинструкция ===== {{youtube>SLMwb3Q3LaY?large}} ===== Как собрать ===== Установите [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Troyka Slot Shield]] на [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|Iskra Neo]] {{ :slot-box:gps-speedometr:step1.png |}} Переверните [[amp>product/troyka-light-sensor?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|датчик освещённости]] на 180 градусов и вставьте в средний слот нижнего ряда {{ :slot-box:firge-alarm-system:step-02.png?nolink |}} Вставьте [[amp>product/troyka-buzzer?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|пьезопищалку]] в правый верхний слот. {{ :slot-box:firge-alarm-system:step-03.png?nolink |}} Вставьте модуль [[amp>product/troyka-rtc?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|часов реального времени]] в левый верхний слот. {{ :slot-box:firge-alarm-system:step-04.png?nolink |}} Установите цветную [[amp>product/troyka-rgb-led-4x4?utm_source=proj&utm_campaign=slot-proj-15&utm_medium=wiki|LED матрицу 4×4]] {{ :slot-box:firge-alarm-system:step-05.png?nolink |}} ===== Скетч ===== Прошейте контроллер скетчем через [[../установка-и-настройка-arduino-ide|Arduino IDE]]. // библиотека для работы I²C #include // библиотека для работы с часами реального времени #include "TroykaRTC.h" // библиотека для работы с RGB-матрицей #include // библиотека для работы с датчиком освещённости (Troyka-модуль) #include // номер пина, к которому подключена RGB-матрица #define MATRIX_PIN A2 // пин сенсора освещённости #define LIGHT_PIN A1 // пин зуммера #define BUZZER_PIN 4 // количество светодиодов в матрице #define LED_COUNT 16 // создаём объект для работы с часами реального времени RTC clock; // создаём объект класса Adafruit_NeoPixel Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, MATRIX_PIN, NEO_GRB + NEO_KHZ800); // создаём объект для работы с датчиком освещённости // и передаём ему номер пина выходного сигнала LIGHT sensorLight(LIGHT_PIN); bool state = false; void setup() { // открываем последовательный порт Serial.begin(9600); // инициализация RGB-матрицы matrix.begin(); } void loop() { // считываем текущее время в часах int hour = clock.getHour(); // если текущий период времени попадает в диапазон с 18:00 до 7:00 if (hour > 18 && hour < 7) { // считываем показания с датчика освещенности в Люксах int sensorLightValue = sensorLight.readLight(); Serial.println(sensorLightValue); // если показание более 50 люкс if (sensorLightValue > 50) { tone(BUZZER_PIN, 1000, 400); state = !state; if (state) { // заполняем RGB-матрицу по сегментам «бегущий огонь» красного цвета colorWipe(matrix.Color(255, 0, 0), 10); } else { // заполняем RGB-матрицу по сегментам «бегущий огонь» синего цвета colorWipe(matrix.Color(0, 0, 255), 10); } } else { // гасим RGB-матрицу по сегментам «бегущая тень» colorWipe(matrix.Color(0, 0, 0), 10); } } delay(500); } // функция заполнения каждого сегмента void colorWipe(uint32_t c, uint8_t wait) { for (uint16_t i = 0; i < matrix.numPixels(); i++) { // заполняем текущий сегмент выбранным цветом matrix.setPixelColor(i, c); matrix.show(); // ждём delay(wait); } } ====== Часто задаваемые вопросы ====== > Где скачать необходимые библиотеки и как их установить? * [[https://github.com/amperka/TroykaRTC|Библиотека для работы с часами реального времени]] * [[https://github.com/adafruit/Adafruit_NeoPixel|библиотека для RGB матрицы]] * [[https://github.com/amperka/TroykaLight|библиотека для работы с фоторезистором]] * [[программирование:библиотеки|Как установить библиотеки]]