Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Octopod:Smart IoT Home / Проект автоматизации промышленности

Компоненты и расходные материалы

Arduino UNO
× 1
Arduino MKR WiFi 1010
Либо этот, либо любой другой Wi-Fi ESP8266 / ESP32Это не было доступно в моей стране, поэтому я выбрал NodeMCU ESP8266
× 1
Maxim Integrated MAX32630FTHR
Вы можете выбрать между MAX32620FTHR, Arduino 1010 или любой платой ESP8266. с этой платой вам понадобится внешний Wi-Fi Модуль или микросхема Esp8266 для Interent
× 1
Raspberry Pi Zero Wireless
Вы также можете использовать обычный Raspi 2/3!
× 1
Датчик температуры и влажности DHT11 (4 контакта)
× 1
Seeed Grove - датчик газа (MQ2)
× 1
Датчик влажности почвы SparkFun (с винтовыми клеммами)
× 1
Датчик движения PIR (общий)
Необязательно
× 1
Считыватель RFID (общий)
× 1
Реле (универсальное)
Желательно 2 канала
× 1
Общий катод, рассеянный RGB
× 1
Модуль камеры Raspberry Pi
× 1
Сервоприводы (Tower Pro MG996R)
× 1
Зуммер
× 2
Модуль Bluetooth HC-05
Необязательно
× 1
LED (общий)
× 4
Настенный адаптер / блок питания
× 2
Карта памяти
более 4 ГБ и предпочтительно класса 10 (требуется для ОС Raspberry Pi)
× 1

Необходимые инструменты и машины

Пистолет для горячего клея (общий)
3D-принтер (общий)
Необязательно
Ручные инструменты
Плоскогубцы, ножницы, резак и т. д.

Приложения и онлайн-сервисы

Блинк
OpenCV

Об этом проекте

Существует множество проектов автоматизации Интернета вещей, но, поверьте, ничего подобного нет! Octopod создан с использованием NodeMCU (MAX32620FTHR или Arduino MKR 1010), Arduino Uno, и Raspberry Pi 3 . Octopod позволяет сделать ваш дом умным. Octopod отправляет вам различные данные, например температуру . , влажность, и качество газа внутри вашего дома / офиса / промышленности. Octopod отправляет вам уведомление всякий раз, когда он обнаруживает любое движение внутри и сообщает, когда нужно поливать растения . Вы также можете управлять своей техникой через Blynk приложение на вашем смартфоне. Octopod даже обеспечивает настоящее освещение настроения!

Octopod оснащен крошечной камерой . , который отправляет вам прямую трансляцию . В этой камере также используется искусственный интеллект . обнаруживать людей в поле зрения и отправляет вам их фотографии . Кроме того, он оснащен RFID . дверной замок система ! Замечательно, правда?

Как все работает?

К NodeMCU подключены несколько датчиков, релейный модуль и светодиоды RGB. Он подключен к приложению Blynk на смартфоне через Wi-Fi, которое отправляет все данные и позволяет вам управлять своим домом.

Raspberry Pi также подключен к Wi-Fi, что позволяет вам видеть прямую трансляцию через камеру Pi. Мы также установили библиотеки OpenCV на Pi и настроили Pi так, чтобы он обнаруживал любых людей в поле зрения и отправлял вам их изображения по электронной почте.

Умный дверной блок использует RFID-модуль. Когда разрешенный RFID попадает в зону его действия, он автоматически открывает дверь.

ШАГ 1. Кодирование главного осьминога

Я добавил комментарии почти к каждой строчке, так что вы не только копируете, но и понимаете. Здесь я в двух словах расскажу, что происходит на самом деле при выполнении кода!

  • Включая библиотеки:

В этом коде используются 2 основные библиотеки:библиотека Blynk для обеспечения совместимости кода с приложением Blynk, а вторая библиотека - это библиотека температуры DHT11, которая преобразует необработанные данные с датчика в температуру и влажность. Чтобы загрузить эти библиотеки, просто перейдите по указанным ссылкам в коде и загрузите их. Затем перейдите в Arduino IDE Скетч → Включить библиотеку → Добавить библиотеку .zip и выберите загруженные библиотеки.

  #include  // Включить библиотеку Blynk # include  // Включить библиотеку Blynk # include  // Включить библиотеку датчика DHT # определить BLYNK_PRINT Serial  

Это некий код Blynk, который помогает вам подключить ваш nodemcu к Интернету, а затем аутентифицировать его в вашем приложении.

  // Вы должны получить токен аутентификации в приложении Blynk .// Перейдите в настройки проекта (значок ореха) .char auth [] ="Your Auth Key"; // Ваши учетные данные WiFi .// Установить пароль к "" для открытых сетей. char ssid [] ="Ваш WiFi SSID"; char pass [] ="Ваш WiFi Pass";  
  • Определение контактов и целых чисел:

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

  #define DHTPIN 2 // К какому цифровому контакту подключен датчик температуры и влажности to # define pirPin 12 // Какой цифровой контакт датчика влажности почвы подключен к int pirValue; // Место для хранения прочитанного PIR Valueint SoleValue; // Место для хранения прочитанного значения влажности почвыint PIRpinValue; // Место для хранения значения, отправленного Blynk App Pin V0int SOILpinValue; // Поместите для хранения значения, отправленного Blynk App Pin V1  
  • BLYNK_WRITE ():

С помощью этого кода мы сообщаем приложению Blynk, что оно может использовать контакты V0 и V1, чтобы сообщить коду, включены ли обнаружение движения и проверка влажности почвы.

  BLYNK_WRITE (V0) // Вывод VO из приложения Blynk сообщает, включено ли обнаружение движения {PIRpinValue =param.asInt (); } BLYNK_WRITE (V1) // вывод V1 из приложения Blynk сообщает, включена ли влажность почвы {SOILpinValue =param.asInt (); }  
  • void sendSensor ():

Этот код берет данные из DHT11 и отправляет их на выводы V5 и V6 соответственно.

  void sendSensor () {int h =dht.readHumidity (); int t =dht.readTemperature (); // или dht.readTemperature (true) для Фаренгейта if (isnan (h) || isnan (t)) {Serial.println ("Не удалось прочитать с датчика DHT!"); // чтобы проверить, не отправляет ли датчик ложные значения return; } // Вы можете отправить любое значение в любое время. // Пожалуйста, не отправляйте более 10 значений в секунду. Blynk.virtualWrite (V5, h); // отправляем влажность на вывод V5 Blynk.virtualWrite (V6, t); // отправляем температуру на вывод V7}  
  • void getPirValue () и void getSoilValue ():

Считывает цифровое значение с датчиков, затем запускает условие if-else для проверки состояния датчика. Если датчик находится в требуемом состоянии, он отправляет уведомление из приложения Blynk.

  void getPirValue (void) {pirValue =digitalRead (pirPin); if (pirValue) // цифровой вывод PIR дает высокое значение при обнаружении человека {Serial.println ("Обнаружено движение"); Blynk.notify («Обнаружено движение»); }} void getSoilValue (void) {почваValue =digitalRead (почвопин); if (почваValue ==HIGH) // цифровой вывод датчика почвы дает низкое значение, когда влажность меньше {Serial.println ("Water Plants"); Blynk.notify («Водные растения»); }}  
  • void setup ():

В настройке мы делаем несколько вещей, которые должны быть выполнены только один раз. Например:запуск последовательной связи с фиксированной скоростью передачи данных, авторизация этого кода в приложении Blynk, начало считывания показаний датчика Dht, затем сообщение в Твиттере о том, что ваш проект Smart Home находится в сети, а затем сообщение узлу, что Pir Pin и датчик почвы Пин предназначен только для ввода.

  void setup () {// Консоль отладки Serial.begin (9600); Blynk.begin (auth, ssid, pass); // Вы также можете указать server://Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); //Blynk.begin(auth, ssid, pass, IPAddress (192,168,1,100), 8442); dht.begin (); // Начинает DHT чтение Blynk.tweet («ОСЬМИНОГ В СЕТИ!»); // Твиттер вашего Twitter. Дескриптор, который вы проецируете, находится в сети pinMode (pirPin, INPUT); // Определение того, что Pir Pin должен принимать только ввод pinMode (почваPin, INPUT); // Определение того, что контакт датчика почвы должен принимать только ввод // Настройка функции, которая будет вызываться каждую секунду timer.setInterval (1000L, sendSensor);}  
  • void loop ():

В цикле мы пишем то, что нужно делать снова и снова. Здесь мы убеждаемся, что код, который мы написали перед установкой, работает. Затем мы пишем 2 оператора If-Else, которые проверяют состояние контактов V0 и V1, а затем соответственно получают значения от датчиков.

  void loop () {Blynk.run (); timer.run (); if (PIRpinValue ==HIGH) // Вывод VO из приложения Blynk сообщает, включено ли обнаружение движения {getPirValue (); } if (SOILpinValue ==HIGH) // Вывод V1 из приложения Blynk сообщает, включена ли влажность почвы {getSoilValue (); }}  

ШАГ 2. Кодирование смарт-замка RFID

Если честно, это простой и легкий код, который не требует особых объяснений. Но я все же расскажу вам в двух словах, что это делает. Существует две версии кода, одна из которых предназначена для подключения дверного блока к Bluetooth, чтобы он сообщал вам, когда ваша дверь открыта через последовательный терминал. Другое отправляет на последовательный порт, чтобы его можно было просмотреть, если вы подключите Arduino к компьютеру. Я предпочитаю простую версию без Bluetooth. Итак, поехали!

  • Перейдите в «Скетч» → «Включить библиотеку» → «Управление библиотекой» → введите в строке поиска MFRC522 и установите библиотеку. Затем перейдите в Файл → Примеры → Пользовательские библиотеки → MFRC522 → dumpInfo Sketch. В начале вы можете прочитать, как подключить контакты (или обратитесь к картинке). Затем запустите код, откройте монитор последовательного порта и поднесите одну карту Rfid к модулю MFRC522 и подождите 5 секунд. Затем запишите UID карты аналогичным образом, запишите UID других ваших карт и цепочек ключей.
  • Затем скачайте любой код, который вам нравится. Откройте код и перейдите к этой строке. Здесь вместо этих X добавьте UID карты, которую вы хотите использовать, чтобы открыть дверь. Теперь вы готовы, просто загрузите код.
  if (content.substring (1) ==«XX XX XX XX») {}  

В этом коде мы делаем две основные вещи, которые находятся в части кода If-Else. В случае, если мы сообщаем Arduino, что если UID карты совпадает с упомянутым UID, заставьте сервопривод двигаться (чтобы дверь открылась) и мигает несколькими светодиодами и издает несколько звуков, используя зуммер. В противном случае, если UID не заставят мигать некоторые светодиоды и не издают какие-то звуки с помощью зуммера.

ШАГ 3. Настройка искусственного интеллекта для обнаружения человека в Raspberry Pi

В этом пошаговом руководстве мы узнаем, как сделать интеллектуальную камеру безопасности. Камера будет отправлять вам электронное письмо всякий раз, когда обнаруживает объект, и если вы находитесь в той же сети Wi-Fi, вы можете получить доступ к видеозаписи в реальном времени с камеры, введя IP-адрес своего Raspberry Pi. Я покажу вам, как создать умную камеру с нуля. Поехали!

Требования:

1. OpenCV (библиотека компьютерного зрения с открытым исходным кодом)

2. Малина Pi 3B

3. Камера Raspberry Pi V2

Предположения:

1. Raspberry Pi 3 с установленным Raspbian Stretch. Если у вас еще нет ОС Raspbian Stretch, вам необходимо обновить ОС, чтобы воспользоваться новыми функциями Raspbian Stretch.

Чтобы обновить Raspberry Pi 3 до Raspbian Stretch, вы можете загрузить его здесь и следовать этим инструкциям по обновлению (или этим для маршрута NOOBS, который рекомендуется для новичков).

Примечание. Если вы обновляете Raspberry Pi 3 с Raspbian Jessie до Raspbian Stretch, есть вероятность возникновения проблем. Действуйте на свой страх и риск и обратитесь за помощью на форумы Raspberry Pi. Важно:я рекомендую вам приступить к новой установке Raspbian Stretch! Обновление с Raspbian Jessie не рекомендуется.

2. Физический доступ к вашему Raspberry Pi 3, чтобы вы могли открывать терминал и выполнять команды Удаленный доступ через SSH или VNC. Я буду выполнять большую часть этого руководства через SSH, но пока у вас есть доступ к терминалу, вы можете легко следовать за ним.

  • Шаг 1. ПРИКЛЮЧЕНИЕ КАМЕРЫ К МАЛИНЕ PI 3

1. Откройте модуль камеры Raspberry Pi. Помните, что камера может быть повреждена статическим электричеством. Прежде чем вынимать камеру из серого антистатического пакета, убедитесь, что вы разрядились, прикоснувшись к заземленному объекту (например, радиатору или корпусу ПК).

2. Установите модуль камеры Raspberry Pi, вставив кабель в Raspberry Pi. Кабель вставляется в разъем, расположенный между портами Ethernet и HDMI, причем серебристые разъемы обращены к порту HDMI.

3. Загрузите Raspberry Pi.

4. В командной строке запустите sudo raspi-config. Если опции «камера» нет в списке, вам нужно будет выполнить несколько команд, чтобы обновить Raspberry Pi. Запустите «sudo apt-get update» и «sudo apt-get upgrade»

5. Снова запустите «sudo raspi-config» - теперь вы должны увидеть опцию «камера».

КОМАНДА-

  $ sudo raspi-config  

6. Перейдите к опции «камера» и включите ее (смотреть в опции интерфейса). Выберите «Готово» и перезагрузите Raspberry Pi или просто введите следующее:

  $ sudo reboot  
  • Шаг 2. ОТКРОЙТЕ УСТАНОВКУ CV

Если вы устанавливаете OpenCV впервые или только начинаете работать с Rasbian Stretch. Это идеальный учебник для вас.

Шаг №1. Расширьте файловую систему

Вы используете новую версию Raspbian Stretch? Если это так, первое, что вам следует сделать, это расширить файловую систему, включив в нее все доступное пространство на карте micro-SD:

КОМАНДА-

  $ sudo raspi-config  

затем выберите пункт меню «Дополнительные параметры» и выберите «Расширить файловую систему». При появлении запроса вы должны выбрать первый вариант «A1. Разверните файловую систему », нажмите Enter на клавиатуре, нажмите стрелку вниз до кнопки« »и перезагрузите Pi. Если вы используете карту емкостью 8 ГБ, вы можете использовать около 50% доступного пространства, поэтому достаточно просто удалить движок LibreOffice и Wolfram, чтобы освободить место на PI:

КОМАНДА-

  $ sudo apt-get purge wolfram-engine $ sudo apt-get purge libreoffice * $ sudo apt-get clean $ sudo apt-get autoremove  

После удаления Wolfram Engine и LibreOffice вы можете освободить почти 1 ГБ!

Шаг № 2: Установить зависимости

Это не первый раз, когда я обсуждаю, как установить OpenCV на Raspberry Pi, поэтому я оставлю эти инструкции в более коротком виде, чтобы вы могли пройти процесс установки:я также включил количество времени требуется выполнить каждую команду (некоторые зависят от скорости вашего Интернета), поэтому вы можете соответствующим образом спланировать установку OpenCV + Raspberry Pi 3 (сама OpenCV компилируется примерно за 4 часа - подробнее об этом позже). Первый шаг - обновить все существующие пакеты:

КОМАНДА-

  $ sudo apt-get update &&sudo apt-get upgrade  

Затем нам нужно установить некоторые инструменты разработчика, включая CMake, который помогает нам настроить процесс сборки OpenCV:Raspbian Stretch:установите OpenCV 3 + Python на Raspberry Pi

КОМАНДА-

  $ sudo apt-get install build-essential cmake pkg-config  

Затем нам нужно установить несколько пакетов ввода-вывода изображений, которые позволяют загружать с диска файлы изображений различных форматов. Примеры таких форматов файлов включают JPEG, PNG, TIFF и т. Д .:Raspbian Stretch

КОМАНДА-

  $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev  

Так же, как нам нужны пакеты ввода-вывода изображений, нам также нужны пакеты ввода-вывода для видео. Эти библиотеки позволяют нам читать различные форматы видеофайлов с диска, а также работать напрямую с видеопотоками

КОМАНДА-

  $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev  

Библиотека OpenCV поставляется с подмодулем с именем highgui, который используется для отображения изображений на нашем экране и создания базовых графических интерфейсов пользователя. Чтобы скомпилировать модуль highgui, нам необходимо установить библиотеку разработки GTK:Raspbian Stretch:установите OpenCV 3 + Python на свой Raspberry Pi

КОМАНДА-

  $ sudo apt-get install libgtk2.0-dev libgtk-3-dev  

Многие операции внутри OpenCV (а именно операции с матрицами) можно оптимизировать дополнительно, установив несколько дополнительных зависимостей:

КОМАНДА-

  $ sudo apt-get install libatlas-base-dev gfortran  

Эти библиотеки оптимизации особенно важны для устройств с ограниченными ресурсами, таких как Raspberry Pi. Наконец, давайте установим заголовочные файлы Python 2.7 и Python 3, чтобы мы могли скомпилировать OpenCV с привязками Python:Raspbian Stretch

КОМАНДА-

  $ sudo apt-get install python2.7-dev python3-dev  

Если вы работаете с новой установкой ОС, возможно, эти версии Python уже являются последней версией (вы увидите сообщение об этом в терминале). Если вы пропустите этот шаг, вы можете заметить ошибку, связанную с тем, что файл заголовка Python.h не найден при запуске make для компиляции OpenCV. Шаг № 3:Загрузите исходный код OpenCV

Шаг № 3. Загрузите OpenCV исходный код

Теперь, когда наши зависимости установлены, давайте возьмем архив OpenCV 3.3.0 из официального репозитория OpenCV. Эта версия включает модуль dnn, который мы обсуждали в предыдущем посте, где мы проводили глубокое обучение с OpenCV (Примечание:по мере выпуска будущих версий openCV вы можете заменить 3.3.0 на номер последней версии):

КОМАНДА-

  $ cd ~ $ wget -O opencv.zip   https://github.com/Itseez/opencv/archive/3.3.0.zi ...>> p $ unzip opencv.zip 

Нам понадобится полная установка OpenCV 3 (например, чтобы иметь доступ к таким функциям, как SIFT и SURF), поэтому нам также нужно получить репозиторий opencv_contrib:Raspbian Stretch:установите OpenCV 3 + Python на Raspberry Pi

КОМАНДА-

  $ wget -O opencv_contrib.zip   https://github.com/Itseez/opencv_contrib/archive/...>>3.3.0$ распаковать opencv_contrib.zip  

Возможно, вам потребуется развернуть указанную выше команду с помощью кнопки «<=>» во время копирования и вставки. .Zip в 3.3.0.zip может показаться обрезанным в некоторых браузерах. Полный URL-адрес архива OpenCV 3.3.0:https://github.com/Itseez/opencv_contrib/archive / ... Примечание:убедитесь, что ваши версии opencv и opencv_contrib совпадают (в данном случае 3.3.0) . Если номера версий не совпадают, вы, вероятно, столкнетесь с ошибками времени компиляции или выполнения. Шаг №4:Python 2.7 или Python 3? Прежде чем мы сможем начать компиляцию OpenCV на нашем Raspberry Pi 3, нам сначала нужно установить pip, менеджер пакетов Python

КОМАНДА-

  $ wget    https://bootstrap.pypa.io/get-pip.py> 
>> 
> $ sudo python get-pip.py $ sudo python3 get-pip.py  

При выполнении этих команд вы можете получить сообщение о том, что pip уже обновлен, но лучше не пропускать этот шаг. Если вы давний читатель PyImageSearch, то знаете, что я большой поклонник как virtualenv, так и virtualenvwrapper.

Установка этих пакетов не является обязательным требованием, и вы можете полностью установить OpenCV без них, но, тем не менее, я настоятельно рекомендую вам установить их, поскольку другие существующие руководства PyImageSearch (а также будущие руководства) также используют виртуальные среды Python.

Я также предполагаю, что в оставшейся части этого руководства у вас установлены и virtualenv, и virtualenvwrapper. Итак, учитывая это, какой смысл использовать virtualenv и virtualenvwrapper? Во-первых, важно понимать, что виртуальная среда - это специальный инструмент, используемый для хранения зависимостей, требуемых разными проектами, в разных местах путем создания изолированных, независимых сред Python для каждого из них. Короче говоря, он решает дилемму «Project X зависит от версии 1.x, но Project Y требует 4.x».

Он также сохраняет ваши глобальные пакеты сайтов аккуратными и свободными от беспорядка. Если вам нужно полное объяснение того, почему виртуальные среды Python являются хорошей практикой, обязательно прочтите этот отличный пост в блоге на RealPython. В сообществе Python стандартной практикой является использование каких-либо виртуальных сред, поэтому я настоятельно рекомендую вам сделать то же самое:

КОМАНДА-

  $ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~ / .cache / pip  

Теперь, когда установлены и virtualenv, и virtualenvwrapper, нам нужно обновить наш файл ~ / .profile. добавьте следующие строки в конец файла:Raspbian Stretch

КОМАНДА-

  $ nano ~ / .profile  

Скопируйте и вставьте следующие строки в конец файла:

КОМАНДА-

   #  virtualenv и virtualenvwrapperWORKON_HOME =$ HOME / .virtualenvs source /usr/local/bin/virtualenvwrapper.sh  

ИЛИ

Вы должны просто использовать cat и перенаправление вывода для обработки обновления ~ / .profile:

КОМАНДА-

  $ echo -e "\ n # virtualenv и virtualenvwrapper">> ~ / .profile $ echo "exportWORKON_HOME =$ HOME / .virtualenvs">> ~ / .profile $ echo "source / usr / local / bin / virtualenvwrapper.sh ">> ~ / .profile  

Теперь, когда у нас обновлен ~ / .profile, нам нужно перезагрузить его, чтобы изменения вступили в силу. Вы можете принудительно перезагрузить файл ~ / .profile, выполнив выход, а затем снова войдя в систему.

Закрытие экземпляра терминала и открытие нового

Или мой личный фаворит

КОМАНДА-

  $ source ~ / .profile  

Примечание :Я рекомендую запускать исходный файл ~ / .profile каждый раз, когда вы открываете новый терминал, чтобы убедиться, что ваши системные переменные настроены правильно. Создание виртуальной среды Python Теперь давайте создадим виртуальную среду Python, которую мы будем использовать для разработки компьютерного зрения:

КОМАНДА-

  $ mkvirtualenv cv -p python2  

Эта команда создаст новую виртуальную среду Python с именем cv с использованием Python 2.7.

Если вместо этого вы хотите использовать Python 3, вам следует использовать эту команду:

КОМАНДА-

  $ mkvirtualenv cv -p python3 

Опять же, я не могу достаточно подчеркнуть этот момент:виртуальная среда cv Python полностью независима и отделена от версии Python по умолчанию, включенной в загрузку Raspbian Stretch.

Любые пакеты Python в глобальном каталоге site-packages не будут доступны для виртуальной среды cv. Точно так же любые пакеты Python, установленные в пакетах сайтов cv, не будут доступны для глобальной установки Python.

Помните об этом, когда работаете в виртуальной среде Python, и это поможет избежать путаницы и головной боли. Как проверить, находитесь ли вы в виртуальной среде «cv», если вы когда-нибудь перезагружаете Raspberry Pi; выйти из системы и снова войти в систему; или откройте новый терминал, вам нужно будет использовать команду workon для повторного доступа к виртуальной среде cv.

В предыдущих сообщениях блога я видел, как читатели использовали команду mkvirtualenv - в этом нет необходимости! Themkvirtualenv command is meant to be executed only once:to actually create the virtual environment. After that, you can use workon and you’ll be dropped down into your virtual environment:

COMMAND-

$ source ~/.profile $ workon cv 

To validate and ensure you are in the cv virtual environment, examine your command line — if you see the text (cv) preceding your prompt, then you are in the cv virtual environment:Make sure you see the “(cv)” text on your prompt, indicating that you are in the cv virtual environment.

Otherwise, if you do not see the (cv) text, then you are not in the cv virtual environment:

If you do not see the “(cv)” text on your prompt, then you are not in the cv virtual environment and need to run “source” and “workon” to resolve this issue. To fix this, simply execute the source and workon commands mentioned above. Installing NumPy on your Raspberry Pi Assuming you’ve made it this far, you should now be in the cv virtual environment (which you should stay in for the rest of this tutorial).

Step #4 :Installing NumPy on your Raspberry Pi

Our only Python dependency is NumPy, a Python package used for numerical processing:

COMMAND-

$ pip install numpy  

the NumPy installation can take a bit of time.

Step #5:Compile and Install OpenCV

COMMAND-

$ workon cv 

Once you have ensured you are in the cv virtual environment, we can setup our build using CMake:

COMMAND-

$ cd ~/opencv-3.3.0/ $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \ -D BUILD_EXAMPLES=ON .. 

Now, before we move on to the actual compilation step, make sure you examine the output of CMake! Start by scrolling down the section titled Python 2 and Python 3 . If you are compiling OpenCV 3 for Python 2.7, then make sure your Python 2 section includes valid paths to the Interpreter, Libraries, numpy and packages

Checking that Python 3 will be used when compiling OpenCV 3 for Raspbian Stretch on the Raspberry Pi 3. Notice how the Interpreter points to our python2.7 binary located in the cv virtual environment. The numpy variable also points to the NumPy installation in the cv environment.

Again, the Interpreter points to our python3.5 binary located in the cv virtual environment while numpy points to our NumPy install.

In either case, if you do not see the cv virtual environment in these variables paths, it’s almost certainly because you are NOT in the cv virtual environment prior to running CMake! If this is the case, access the cv virtual environment using workon cv and re-run the cmake command outlined above.

Configure your swap space size before compiling Before you start the compile process, you should increase your swap space size. This enables OpenCV to compile with all four cores of the Raspberry PI without the compile hanging due to memory problems.

Open your /etc/dphys-swapfile and then edit the CONF_SWAPSIZE variable

COMMAND-

$ nano /etc/dphys-swapfile  

and then edit the following section of the file:#set size to absolute value, leaving empty (default) then uses computed value # you most likely don't want this, unless you have an special disk situation

# CONF_SWAPSIZE=100 CONF_SWAPSIZE =1024 

Notice that I’ve commented out the 100MB line and added a 1024MB line. This is the secret to getting compiling with multiple cores on the Raspbian Stretch. If you skip this step, OpenCV might not compile.

To activate the new swap space, restart the swap service:

COMMAND-

$ sudo /etc/init.d/dphys-swapfile stop $ sudo /etc/init.d/dphys-swapfile start  

Note:It is possible to burn out the Raspberry Pi microSD card because flash memory has a limited number of writes until the card won’t work. It is highly recommended that you change this setting back to the default when you are done compiling and testing the install (see below). To read more about swap sizes corrupting memory, see this page. Finally, we are now ready to compile OpenCV:

COMMAND-

$ make -j4 

The -j4 switch stands for the number of cores to use when compiling OpenCV. Since we are using a Raspberry Pi 2, we’ll leverage all four cores of the processor for a faster compilation.

However, if your make command errors out, I would suggest starting the compilation over again and only using one core

$ make clean$ make  

Once OpenCV 3 has finished compiling.Our OpenCV 3 compile on Raspbian Stretch has completed successfully.

From there, all you need to do is install OpenCV 3 on your Raspberry Pi 3:

COMMAND-

$ sudo make install$ sudo ldconfig  

Step #6 :Finish installing OpenCV on your Pi

We’re almost done — just a few more steps to go and you’ll be ready to use your Raspberry Pi 3 with OpenCV 3 on Raspbian Stretch.

For Python 2.7:

#5 Provided your Step without error, OpenCV should now be installed in/usr/local/lib/python2.7/site-pacakges . You can verify this using the ls command:

COMMAND-

$ ls -l /usr/local/lib/python2.7/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895772 Mar 20 20:00 cv2.so  

Note:In some cases, OpenCV can be installed in /usr/local/lib/python2.7/dist-packages(note the dist-packages rather than site-packages ). If you do not find the cv2.so bindings insite-packages , we be sure to check dist-packages . Our final step is to sym-link the OpenCV bindings into our cv virtual environment for Python 2.7:

COMMAND-

$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/ $ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so  

For Python 3:After running make install , your OpenCV + Python bindings should be installed in/usr/local/lib/python3.5/site-packages . Again, you can verify this with the ls command:

COMMAND-

$ ls -l /usr/local/lib/python3.5/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895932 Mar 20 21:51 cv2.cpython-34m.so  

I honestly don’t know why, perhaps it’s a bug in the CMake script, but when compiling OpenCV 3 bindings for Python 3+, the output .so file is named cv2.cpython-35m-arm-linux-gnueabihf.so(or some variant of) rather than simply cv2.so (like in the Python 2.7 bindings). Again, I’m not sure exactly why this happens, but it’s an easy fix. All we need to do is rename the file:

COMMAND-

$ cd /usr/local/lib/python3.5/site-packages/ $ sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so  

After renaming to cv2.so , we can sym-link our OpenCV bindings into the cv virtual environment

for Python 3.5:

COMMAND-

$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ $ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so  

Step #7:Testing your OpenCV 3 install

Congratulations, you now have OpenCV 3 installed on your Raspberry Pi 3 running Raspbian Stretch! But before we pop the champagne and get drunk on our victory, let’s first verify that your OpenCV installation is working properly.

Open up a new terminal, execute the source and workon commands, and then finally attempt to import the Python + OpenCV bindings:

COMMAND-

$ source ~/.profile$ workon cv $ python>>> import cv2>>> cv2.__version__ '3.3.0'>>>  

OpenCV 3 has been successfully installed on my Raspberry Pi 3 + Python 3.5 environment . Once OpenCV has been installed, you can remove both the opencv-3.3.0 and opencv_contrib-3.3.0 directories to free up a bunch of space on your disk:

COMMAND-

$ rm -rf opencv-3.3.0 opencv_contrib-3.3.0  

However, be cautious with this command! Make sure OpenCV has been properly installed on your system before blowing away these directories. A mistake here could cost you hours in compile time.

Open your /etc/dphys-swapfile and then edit the CONF_SWAPSIZE variable COMMAND-

# set size to absolute value, leaving empty (default) then uses computed value# you most likely don't want this, unless you have an special disk situation CONF_SWAPSIZE=100 #CONF_SWAPSIZE=1024 

Notice that I’ve commented out the 1024MB line and uncommented the 100MB line. As stated above, larger swap spaces may lead to memory corruption, so I recommend setting it back to 100MB. If you skip this step, your memory card won’t last as long. To revert to the smaller swap space, restart the swap service

COMMAND-

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
  • STEP 4:Setting Up Python Program

You can verify that the camera works by running.

COMMAND-

$ raspistill -o image.jpg 

which will save a image from the camera in your current directory.

After you checked the camera is working. Now download all the python files and models from below link :

LINK:

https://drive.google.com/file/d/0B98uoD6BbkpqZU9FT...

You can open up the file inspector and view the image.

Make sure you are using the virtual environment by typing the following commands:

COMMANDS-

$ source ~/.profile $ workon cv  

Next, navigate to the repository directory,

COMMANDS-

$ cd Smart-Security-Camera  

and install the dependencies for the project

COMMANDS-

$ pip install -r requirements.txt  

To get emails when objects are detected, you'll need to make a couple modifications to the mail.py file. Open mail.py with vim vim mail.py , then press i to edit. Scroll down to the following section

# Email you want to send the update from (only works with gmail)fromEmail ='[email protected]' fromEmailPassword ='password1234' # Email you want to send the update to toEmail ='[email protected]'  

and replace with your own email/credentials.

The mail.py file logs into a gmail SMTP server and sends an email with an image of the object detected by the security camera. Press esc then ZZ to save and exit.

You can also modify the main.py file to change some other properties.

email_update_interval =600 # sends an email only once in this time intervalvideo_camera =VideoCamera(flip=True) # creates a camera object, flip verticallyobject_classifier =cv2.CascadeClassifier("models/fullbody_recognition_model.xml") # an opencv classifier facial_recognition_model.xml fullbody_recognition_model.xml upperbody_recognition_model.xml 

Run the program python main.py

You can view a live stream by visiting the IP address of your pi in a browser on the same network. You can find the IP address of your Raspberry Pi by typing ifconfig in the terminal and looking for the inet address. Visit :5000 in your browser to view the stream.

Note:

To view the live stream on a different network than your Raspberry Pi, you can use ngrok to expose a local tunnel. Once downloaded, run ngrok with ./ngrok http 5000 and visit one of the generated links in your browser. Note:The video stream will not start automatically on startup. To start the video stream automatically, you will need to run the program from your /etc/rc.local file see this video for more information about how to configure that. Receiving Emails When receiving an email for the first time, you might get the following notification from Google:

By default, Google blocks apps from using SMTP without permissions. We can solve this by clicking on the allow "less secure apps" link and toggle the feature on. The next object detected will send an email.

STEP 4:Blynk App Interface Setup

This is one of the easiest and fun steps. So let's get started. Shall we?

  • Downloading the Blynk App is the first obvious step. Download it from App Store or Google Play Store. Sign Up or Login in the app to get started.
  • Click on New Project to create a new project. Name it whatever you like. In devices Choose NodeMCU. In connection type choose WiFi and click on Create.
  • Now you will get a Auth key on your Email. Make sure to copy that and add that to your code.
  • Now click on the + sign to add widgets. You may need to buy some energy!
  • Now add three Gauge's. Click on of the Gauge's, name it Temperature. Choose a color of you choice for this gauge. In the pin choose Virtual Pin V6. Set the range from 0 to 50 °C ( not sure for °F), make the label °C/ °F and keep the reading rate to Push.
  • Repeat this for other two Gauges using data as shown in the pictures.
  • Now, add a zeRGBa and set R to digital Pin GP15, B to GP3 and B to GP1.
  • Now add 4 Buttons, change there colors accordingly. Set them as shown in the pictures.
  • Add a SuperChart, add 3 data streams Temperature, Humidity and gas, set there colors, there pins, Range and Suffix.
  • Now, add tabs. Go to the second tab and add Twitter, Notifications, Email and Eventor. In Twitter add you twitter username and password. In Notifications, Switch on Notify when hardware goes off. In Email, set your Email address. In Eventor you can set many triggers, see the picture for the triggers that I have set up.
  • You are done. now click on the play button to use the interface that you have created. You can change the interface as you like. It is really simple and fun process!

STEP 5:Making Octopod Structure

Warning - This is going to be one of most time-consuming process!

NOTE:You can skip this step and 3D print the enclosure that I have provided!

Actually, this step is optional yet the most important step! You can just take a shoe box and avoid all of this hard work. But on the contrary, this hard work makes the project unique. The idea for this unique design striked me while, I was doing my math homework. This shape is inspired from an octagon. Rather, This is a 3D octagon! So let's get started!

Making the Structure:

  • Take your cardboard and draw a rectangle of 9 cm x 9.5 cm (You can change the dimensions as per your convince). Now, joining end to end draw 4 of theses similar rectangles (8 if your cardboard is long enough).
  • Now make partial cuts (somewhat like paper creases) in between these rectangles and cut out this whole long piece. Repeat this process until you have 4 of these long pieces.
  • Now, using a D draw a 135° and cut it out as shown in the images. Make 16 of these same angles.
  • Using Glue gun glue these angles in between the small pieces. Repeat this for all the joints.
  • Now using glue gun join 2 of these open structures to make a closed structure (somewhat octagon) .
  • Now glue the other two open structure perpendicularly, making a 3-D shape.
  • Now Cut 4 More pieces of of 9 x 9.5 cm and glue them in between all the empty spaces.
  • Now you will be left with only 8 open triangles. Using Acrylic Butter paper cut 8 triangles, which will fit on these open areas, but don't glue them now.

Paint Job:

For this you need to head out towards an open area! Wear your Mask and Gloves and just make one coat over the structure that you have created. You can go to Youtube, to learn proper ways to make a perfect coat. Now let this dry for 4- 5 Hours and then apply 1 more coat. I think 3 coats will be good for this.

That's it! You have arrived with a unique piece of art.

STEP 6:Making Door Lock Enclosure

Really simple. Just take a Shoe Box and apply 2- 3 even coats of spray. And maybe for design make check pattern using duck tape like we did!

STEP 7:Assembling the Octopod

I have tried to make this step as simple as possible, by making the schematic diagram. Refer the picture or the file, and make connections accordingly. I will briefly explain all the connections!

  • We have connected the nodeMCU to a large size Solderless Breadboard. We have also connected Breadboard power supply on the breadboard. NodeMCU, all the sensors, LED's and other components are powered by the power supply.
  • Following are the sensor connections:DHT11D4 / GP2 MQ2A0 / adc00 Soil Moisture SensorD2 / GP4 PIRD6 / GP1 RGB R → D8 / GP15, G → Rx / GP3, B → Tx / GP1 RelayLn1D0 / GP16, Ln2D5 / GP14 Make the following connections.
  • For powering this you can use Power Bank or a Wall Adapter, which will be connected to the breadboard Power supply.
  • Now, take your Raspberry Pi along with the Raspberry Pi Camera. Make a small hole in one of the walls of the cardboard and glue or tape your Raspberry Camera.

Now, insert all these electronics inside, through any open triangle and close the triangle by using the cut outs of acrylic butter paper that we made. It is better to leave 1 or 2 open, in case something inside needs to be fixed! Also let the prongs of the Soil Moisture Sensor sit outside.

All done! We have completed the making process of the Octopod! Now, Just switch On the power and keep your Octopod over the dining Table or maybe on the Guest's Table and enjoy! To see the live feed from the Raspberry Pi, just open a browser and put in the IP address of the Pi. Enjoy!

STEP 8:Assembling the Door Lock

After uploading the code on your Arduino just make the connections as shown in the picture or in fritzing file! It is quite simple. Then take the handy shoe box that we made make 2 holes in it for the LED's to pop out. and allow the servo to stand out. These days mechanical locks like servo's are also available in the market, though servo works just as fine. This is just an experiment, so please so please don't use this as you actual lock! Glue the Rfid to one wall of the box and also glue the small breadboard and Arduino. You can use a wall adapter or a Power bank to power this. Just power the Arduino and you will be good to go! Done!

CONCLUSION:

This was a really fun project to do!

I was really happy how it turned out. I think the lights look really well, and i think its well worth making even one of these as a side lamp. I really can't thank creators of Blynk and OpenCV libraries enough, they are both really excellent pieces of software and made this project possible! As always, if you have any questions on any part of the process please let me know and I will be happy to try help. Thanks a lot! And Please Vote for Us!

-Saksham

Arduino Blog

Full Instructable

UPDATE:

I have been working on integrating this system with Amazon Alexa, I am almost done. Will upload the code in 2-3 days!

Код

  • octopod.ino
  • octopod_door.ino
  • octopod_door_bluetooth.ino
octopod.inoArduino
This is the main code for Arduino MKR 1010 (NodeMCU in my case)
If you are using MAX32620FTHR, download libraries for it. Then change the board in board settings. Also change the pin as given bellow
ESP MAX
AO - - - - - - - - - - - - GPIO2
A1 - - - - - - - - - - - - - GPIO1

Soil Sensor MAX
analog sensor - - - GPIO3

Gas Sensor (MQ2) MAX
sensor - - - - - - - - - - - GPIO4

PIR Sensor MAX
sensor - - - - - - - - - - - -GPIO0

Relay MAX
1 - - - - - - - - - - - - - - - - - M0
2 - - - - - - - - - - - - - - - - - M1
/*************************************************************************** OCTOPOD:A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM Download latest Blynk library here:https://github.com/blynkkk/blynk-library/releases/latestDownload latest DHT Sensor library here:https://github.com/adafruit/DHT-sensor-library***************************************************************************/#include  //Include ESP8266 Wifi Library#include  //Include Blynk Library#include  //Include DHT sensor library#define BLYNK_PRINT Serial// You should get Auth Token in the Blynk App.// Go to the Project Settings (nut icon).char auth[] ="Your Blynk Auth Key";// Your WiFi credentials.// Set password to "" for open networks.char ssid[] ="Your WiFi SSID";char pass[] ="Your WiFi Password";#define DHTPIN 2 // What digital pin temperature and humidity sensor is connected to#define soilPin 4 // What digital pin soil moist ure sensor is connected to#define gasPin A0 // What analog pin gas sensor is connected to#define pirPin 12 // What digital pin soil moisture sensor is connected to int pirValue; // Place to store read PIR Valueint soilValue; // Place to store read Soil Moisture Valueint PIRpinValue; // Place to store the value sent by Blynk App Pin V0int SOILpinValue; // Place to store the value sent by Blynk App Pin V1// Uncomment whatever type you're using!#define DHTTYPE DHT11 // DHT 11//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321//#define DHTTYPE DHT21 // DHT 21, AM2301DHT dht(DHTPIN, DHTTYPE);BlynkTimer timer;// This function sends Arduino's up time every second to Virtual Pin (5).// In the app, Widget's reading frequency should be set to PUSH. This means// that you define how often to send data to Blynk App.BLYNK_WRITE(V0) //VO pin from Blynk app tells if Motion Detection is ON{ PIRpinValue =param.asInt(); } BLYNK_WRITE(V1) //V1 pin from Blynk app tells if Soil Moisture is ON{ SOILpinValue =param.asInt(); } void sendSensor(){ int h =dht.readHumidity(); int t =dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); // to check if sensor is not sending any false values return; } // You can send any value at any time. // Please don't send more that 10 values per second. Blynk.virtualWrite(V5, h); // send humidity to pin V5 Blynk.virtualWrite(V6, t); // send temperature to pin V7}void getPirValue(void){ pirValue =digitalRead(pirPin); if (pirValue) //digital pin of PIR gives high value on human detection { Serial.println("Motion detected"); Blynk.notify("Motion detected"); }}void getSoilValue(void){ soilValue =digitalRead(soilPin); if (soilValue ==HIGH) //digital pin of soil sensor give low value when humidity is less { Serial.println("Water Plants"); Blynk.notify("Water Plants"); }}void setup(){ // Debug console Serial.begin(9600); Blynk.begin(auth, ssid, pass); // You can also specify server://Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442); dht.begin (); // Begins DHT reading Blynk.tweet("OCTOPOD IS ONLINE! "); // Tweating on your Twitter Handle that you project is online pinMode(pirPin,INPUT); // Defining that Pir Pin is meant to take Input Only pinMode(soilPin,INPUT); // Defining that Soil Sensor Pin is meant to take Input Only // Setup a function to be called every second timer.setInterval(1000L, sendSensor);}void loop(){ Blynk.run(); timer.run(); if (PIRpinValue ==HIGH) //VO pin from Blynk app tells if Motion Detection is ON { getPirValue(); } if (SOILpinValue ==HIGH) //V1 pin from Blynk app tells if Soil Moisture is ON { getSoilValue(); }} 
octopod_door.inoArduino
Code for Automatic Door Lock Control (NO BLUETOOTH VERSION)
/*********************************************************************************************************** OCTOPOD:A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM ARDUINO RFID DOOR LOCK CODELibrary Required - MFRC522 ************************************************************************************************************/#include #include #include  #define SS_PIN 10#define RST_PIN 9#define LED_G 5 //define green LED pin#define LED_R 4 //define red LED#define BUZZER 2 //buzzer pinMFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.Servo myServo; //define servo name void setup() { Serial.begin(9600); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 myServo.attach(3); //servo pin myServo.write(0); //servo start position pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT); noTone(BUZZER); Serial.println("Put your card to the reader..."); Serial.println();}void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content=""; байтовое письмо; for (byte i =0; i  
octopod_door_bluetooth.inoArduino
Code for Automatic Door Lock Control (Bluetooth Version)
/*********************************************************************************************************** OCTOPOD:A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM ARDUINO RFID DOOR LOCK CODELibrary Required - MFRC522 ************************************************************************************************************/#include SoftwareSerial BTserial(0, 1); // RX | TX#include #include #include #define SS_PIN 10#define RST_PIN 9#define LED_G 5 //define green LED pin#define LED_R 4 //define red LED#define BUZZER 2 //buzzer pinMFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.Servo myServo; //define servo namevoid setup(){ BTserial.begin(9600); // Initiate a serial communication BTserial.println("Waiting for connections..."); SPI.begin (); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 myServo.attach(3); //servo pin myServo.write(0); //servo start position pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT); noTone(BUZZER); BTserial.println("Put your card to the reader..."); BTserial.println();}void loop(){ // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor BTserial.print("UID tag :"); String content =""; байтовое письмо; for (byte i =0; i  

Изготовленные на заказ детали и корпуса

This is the basic design that you can use if you want to make the enclosure out of Cardboard/ Wood like me! octopod_v2_ukTmIJ0uMl.f3dProper Enclosure that you can 3D Print! octo_2_v3_sii4tuCF7d.f3d

Схема

Pin configuration might be different with Arduino MKR 1010 Without Bluetooth
For Bluetooth connect Rx (HC-05) --> Tx (Arduino)
Tx (HC-05) --> Rx (Arduino)
and 5v to 5v
Ground to Ground ESP MAX
AO - - - - - - - - - - - - GPIO2
A1 - - - - - - - - - - - - - GPIO1

Soil Sensor MAX
analog sensor - - - GPIO3

Gas Sensor (MQ2) MAX
sensor - - - - - - - - - - - GPIO4

PIR Sensor MAX
sensor - - - - - - - - - - - -GPIO0

Relay MAX
1 - - - - - - - - - - - - - - - - - M0
2 - - - - - - - - - - - - - - - - - M1

Производственный процесс

  1. Приложения домашней автоматизации
  2. Коварные жертвы вредоносной рекламы на IoT умного дома
  3. МАЛИНОВАЯ АВТОМАТИЗАЦИЯ ДОМА
  4. Умные жалюзи
  5. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  6. Система автоматизации и безопасности умного дома с использованием 1Sheeld
  7. Tech-TicTacToe
  8. Таймер обратного отсчета Arduino
  9. Умный дверной замок с использованием страницы входа в WiFi от Arduino и ESP8266
  10. Автоматизация в индустрии 4.0