Проект Система Умного дома (Smart Home) на arduino
- Войдите на сайт для отправки комментариев
Кхм. Так вот. Тут вообще зарегистрировался год назад для поиска решения одного вопроса (Вроде бы решение проблемы с питанием чего-то там но не важно) Недавно решил начать новый проект и тут преподаватель подсказал начать типа свой "блог" как на ютубе ваши АлексГайверы и так далее. Но так как тут новичок то немного познакомлюсь с вами.
Меня звать Николай, 14 лет. Живу на Сахалине, Корсаков, разглашать подробности, тобишь улица, квартира не буду :)
Вообще, проектами ардуино познакомился от того же АлексГайвера, и досих пор заел на его канале. Тогда лет мне было 12. В школе начали преподавание "робототехники" с помощью конструктора ЛЕГО. Тут начались мои азы в робототехники. Узнал, что такое блочное программирование...
Далее в нашей залу... в нашем городе появился центр по робототехнике, лодостроению, автостроению, аэростроению и робототехнике как Техносфера. Туда я и пошёл, где обитаю по сей день.
Теперь ближе к тематике моего проекта. Мой умный дом реализован на одной пока что ардуино нано. (Есть идея подключить ардуино уно как вспомогательную ну или вторую в выполнении каких-либо целей, например освещение или ещё что либо что скорее всего будет реализовано из-за малого кол-ва портов на нано если не найду шилд, увеличивающий кол-во портов)
Система умного дома будет состоять из:
#include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // создаем экземпляр MFRC522 instance. int CODE = "92 7A 20 37"; const int SVET_RED = 5; const int SVET_GREEN = 7; const int BUZZER = 6; void setup() { Serial.begin(9600); // запускаем последовательную коммуникацию SPI.begin(); // инициализируем шину SPI mfrc522.PCD_Init(); // инициализируем MFRC522 pinMode(SVET_RED, OUTPUT); pinMode(SVET_GREEN, OUTPUT); pinMode(BUZZER, OUTPUT); for(int b=0; b < 20; b++) { //Будущая эмуляция. Хочу сделать условие, если связь с считывателем есть, то выскакивает надпись об успешной загрузке. Если нет то ошибка digitalWrite(SVET_RED, HIGH); digitalWrite(SVET_GREEN, HIGH); delay(100); digitalWrite(SVET_GREEN, LOW); digitalWrite(SVET_RED, LOW); Serial.println("LOADING..."); delay(100); } delay(1000); digitalWrite(BUZZER, HIGH); Serial.println("LOADING COMPLETED"); delay(550); digitalWrite(SVET_RED, HIGH); digitalWrite(BUZZER, LOW); Serial.println("Поднесите карту к считывателю"); } void loop() { // ищем новые карты: if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // выбираем одну из карт: if ( ! mfrc522.PICC_ReadCardSerial()) { return; } // показываем UID на мониторе порта: Serial.print("UID tag :"); // "UID тега: " String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } //Закончили показ UID Serial.println(); Serial.print("Message : "); // "Сообщение: " content.toUpperCase(); if (content.substring(1) == CODE) // впишите здесь UID тега, которому вы хотите дать доступ { Serial.println("Authorized access"); // "Доступ открыт" Serial.println(); for(int b=0; b < 20; b++) { digitalWrite(SVET_RED, LOW); digitalWrite(SVET_GREEN, HIGH); digitalWrite(BUZZER, HIGH); delay(100); digitalWrite(SVET_GREEN, LOW); digitalWrite(BUZZER, LOW); delay(100); } digitalWrite(SVET_RED, HIGH); delay(5000); Serial.println("Поднесите карту к считывателю"); digitalWrite(SVET_GREEN, HIGH); delay(100); digitalWrite(SVET_GREEN, LOW); for(int j=0; j < 10; j++) { digitalWrite(SVET_GREEN, HIGH); delay(100); digitalWrite(SVET_GREEN, LOW); delay(100); } return; } else { Serial.println(" Access denied"); // "Запрос на доступ отклонен" Serial.println(); digitalWrite(BUZZER, HIGH); delay(5000); digitalWrite(BUZZER, LOW); for(int b=0; b < 20; b++) { digitalWrite(SVET_GREEN, LOW); digitalWrite(SVET_RED, HIGH); delay(100); digitalWrite(SVET_RED, LOW); delay(100); } digitalWrite(SVET_RED, HIGH); delay(5000); Serial.println("Поднесите карту к считывателю"); for(int j=0; j < 10; j++) { digitalWrite(SVET_GREEN, HIGH); delay(100); digitalWrite(SVET_GREEN, LOW); delay(100); } } }
Сделать весь список на одном контроллере не получится. Разделяй на 3-4 независимых блока. Например, нет нужды управлять светом в туалете той же системой, что управляет пожарной сигнализацией.
Сделать весь список на одном контроллере не получится. Разделяй на 3-4 независимых блока. Например, нет нужды управлять светом в туалете той же системой, что управляет пожарной сигнализацией.
Разумеется, жду 3 новых контроллера ардуино зеро, самое главное что они 32 битные и поддерживают одну библиотеку о которой сейчас сказать не могу, забыл название, но библиотека на многозадачность
Продолжение:
Где-то 10 и 11 октября занимался подготовкой считывателя, ну там проводки паял и тд. Проверку прошёл успешно, сделал отдельную плату с двумя индикаторами и пищалкой. (Фото сделать не успел, телефон сел, завтра сделаю фотки и принесу вам))
Поправил логику и пошёл пилить корпус... из фанеры... У этого человека явно шизофрения
Делал я делал, получилось как у рукожопа, делал до сегодняшнего дня. Сегодня подхожу к директору насчёт сломанного станка. Он мне говорит про лазерный станок. Я такой (Что?)
Оказывается на этом станке можно вырезать отдельно запчасти из фанеры, а я как полный просто дебил делал всё вручную... 3 дня...
Пока шли в его кабинет чтобы он показал как делать программу для этого сея чуда, он задал мне вопрос "Почему не сделал на 3D принтере?" И таким вопросом я сам задался...
За 5 минут он сделал мне примерную схему корпуса для считывателя, коробка с отверстиями под винты и т.п. И я был приятно удивлён, что пол коллектива училось по роликом Гайвера, и он сказал что я могу посмотреть его тутор по Чего-то там фьюжн.
Я реально был удивлён, что весь коллектив центра смотрит гайвера, даже наш ### ##### который успел побывать и дальнобоем, программистом в 3-ёх областях. (Да, он дедуля, но весёлый))
Так вот...
Сегодня ночь с кружкой вкусного чая и с тарелкой маминых пирожков с капустой буду смотреть туториал и тренироваться "пахать" в Автодеск Фьюжн (Во, вспомнил)
Всем спасибо за чтение этих каракулей с куча ошибок, поливайте в меня грязью в виде объяснений что я не так делаю, всем удачи, добра и позитива)
P.S. Фото буду делать завтра, и выложу их сюда, скорее всего провода, идущие к считывателю буду менять. И да, зелёный светодиод ###но
То ТС, пока перенес в "Общие", когда и если наполните конкретикой, вернем в "Проекты".
правильно говорят разбить функционал на несколько МК, так как в коде при не совсем умелом программировании и множестве функционала на единственном МК одно может мешать другому. Проводов опять же будет меньше. Зеро совсем не обязательно. 328я мега спокойно это потянет ну или 2560. Связывать контроллеры, имхо, лучше проводами по CAN или RS485.
Рекомендую посмотреть это и это
Зеро совсем не обязательно. 328я мега спокойно это потянет ну или 2560.
Обычно сначала составляют ТЗ на систему, потом подбирают контроллер под необходимые ресурсы. Если вопрос цены не стоит, то можно и хороший взять. Я б на stm32f411 или esp32 нацелился. Последний и WiFi BT имеет. Сейчас это оптимальное из того, что среде ардуино программируется с поставленными задачами справится.
"хорошим" это что значит? хороший МК это тот, который наиболее подходит под задачу. В ваших хотелках МК в основном будет дрыгать ногами, или опрашивать эти ноги. Тут важнее количество ног, а у зеро их маловато.
Имхо, мега_мини - это наилучшее решение для домашней автоматики. Крепить и подключать ее удобнее классических уно- и мега- подобных. Более компактна, что может пригодится, если идти путём разделения системы на сеть контроллеров по помещениям.
Хотя если не брезговать радиоканалом, то есп тут однозначно рулит.
"хорошим" это что значит?
Если попутно с реализацией проекта вы осваиваете проц, который намного превосходит заезженный 328Р, расширяя тем самым свои горизонты, то по-Вашему этот проц не хорош? Или Вы хотите поспорить на тему Зеро не лучше Наны?
Ничего против Мега-мини не имею, у самого есть достаточно сложные пректы, реализованные на нем. Но больше к нему я не вернусь, потому что есть ATSAM3x8e. А теперь хочу перейти на SAMD51. И так далее, от хорошего к еще лучшему. Прогресс, однако. ;)
Не хватает ног - есть расширители ай2сишные. Если бы у меня стоял выбор делать на Меге или на зеро с расширителем - выбрал бы второе. И даже отсутствие ЕЕПРОМА меня не остановило бы. Но на вкус и цвет все фломастеры разные, так что все вышесказанное сугубо имхо.