Octopod: Slimme IoT Automatisatie Oplossing voor Thuis en Industrie
Onderdelen en benodigdheden
| Arduino UNO | × | 1 |
| Arduino MKR WiFi 1010 | × | 1 |
| Maxim Integrated MAX32630FTHR | × | 1 |
| Raspberry Pi Zero Wireless | × | 1 |
| DHT11 Temperatuur & Vochtigheidssensor (4 pinnen) | × | 1 |
| Seeed Grove - Gas Sensor (MQ2) | × | 1 |
| SparkFun Bodemvochtigheidssensor (met Schroefklemmen) | × | 1 |
| PIR-bewegingsensor (standaard) | × | 1 |
| RFID-lezer (standaard) | × | 1 |
| Relais (standaard) | × | 1 |
| RGB Diffused Common Cathode | × | 1 |
| Raspberry Pi Camera Module | × | 1 |
| Servo's (Tower Pro MG996R) | × | 1 |
| Buzzer | × | 2 |
| HC-05 Bluetooth-module | × | 1 |
| LED (standaard) | × | 4 |
| Wandaadapter / Powerbank | × | 2 |
| Geheugenkaart | × | 1 |
Nodige tools en machines
- Lijmpistool (standaard)
- 3D-printer (standaard) - Optioneel
- Handgereedschap (Noodlenoot tang, schaar, mes, etc.)
Apps en online diensten
- Blynk
- OpenCV
Over dit project
Er zijn veel IoT-automatiseringsprojecten, maar vertrouw me, er is niets als dit! Octopod is gemaakt met NodeMCU (MAX32620FTHR of Arduino MKR 1010), Arduino Uno, en Raspberry Pi 3. Octopod maakt je huis slim. Octopod stuurt je allerlei data zoals temperatuur, vochtigheid, en luchtkwaliteit binnen in je huis/kantoor/industrie. Octopod stuurt je melding wanneer het enige beweging detecteert en vertelt je wanneer je je planten water moet geven. Je kunt ook je apparaten besturen via een Blynk-applicatie op je smartphone. Octopod maakt zelfs echte stemmingsverlichting mogelijk!
Octopod is uitgerust met een kleine camera, die live feed stuurt. Deze camera gebruikt ook kunstmatige intelligentie om mensen in haar zicht te detecteren en stuur je hun foto's. Daarnaast heeft het een RFID deurslot systeem! Geweldig, toch?



Hoe alles werkt
De NodeMCU is verbonden met een reeks sensoren, een relaismodule en RGB-leds. Het is verbonden met de Blynk-app op een smartphone via WiFi, wat alle data stuurt en je je huis laat besturen.
De Raspberry Pi is ook via WiFi verbonden, waarmee je de live feed via de Pi-camera kunt zien. We hebben ook OpenCV-bibliotheken op de Pi geïnstalleerd, en de Pi geconfigureerd om eventuele mensen in haar zicht te detecteren en hun afbeeldingen te e-mailen.
De slimme deureenheid gebruikt een RFID-module. Wanneer de toegestane RFID binnen bereik komt, opent het de deur automatisch.
STAP 1: Hoofd-Octopod programmeren
Ik heb op bijna elke regel commentaar toegevoegd, zodat je niet alleen kopieert maar het begrijpt. Hier vertel ik in een notendop wat er gebeurt wanneer de code uitgevoerd wordt!
- Bibliotheken includen:
Deze code gebruikt 2 hoofdbibliotheken, de Blynk-bibliotheek om de code compatibel te maken met de Blynk-applicatie en de andere bibliotheek is de DHT11-temperatuurbibliotheek, die de ruwe data van de sensor omzet in temperatuur en vochtigheid. Om deze bibliotheken te downloaden, ga naar de gegeven links in de code en download ze. Ga dan in Arduino IDE → Sketch → Bibliotheek toevoegen → .zip-bibliotheek toevoegen, en selecteer je gedownloade bibliotheken.
#include<ESP8266WiFi.h> // ESP8266 WiFi-bibliotheek includeren
#include<BlynkSimpleEsp8266.h> // Blynk-bibliotheek includeren
#include<dht.h> // DHT-sensorbibliotheek includeren
#define BLYNK_PRINT Serial
Dit is een stukje Blynk-code dat je helpt je NodeMCU met het internet te verbinden en het vervolgens te authenticeren bij je app.
// Je zou Auth Token in de Blynk-app moeten krijgen.
// Ga naar Projectinstellingen (moer-icoon).
char auth[] = "Jouw Auth Key";
// Jouw WiFi-gegevens.
// Stel wachtwoord in op "" voor open netwerken.
char ssid[] = "Jouw WiFi SSID";
char pass[] = "Jouw WiFi Wachtwoord";
- Pinnen en integers definiëren:
In dit segment definiëren we de pinnen van onze verschillende sensoren. Je kunt ze naar believen wijzigen. We definiëren ook enkele integers die we tijdens de code gaan gebruiken.
#define DHTPIN 2 // Welke digitale pin temperatuur- en vochtigheidssensor aangesloten is
#define soilPin 4 // Welke digitale pin bodemvochtigheidssensor aangesloten is
#define gasPin A0 // Welke analoge pin gassensor aangesloten is
#define pirPin 12 // Welke digitale pin bodemvochtigheidssensor aangesloten is
int pirValue; // Plaats om gelezen PIR-waarde op te slaan
int soilValue; // Plaats om gelezen bodemvochtigheidswaarde op te slaan
int PIRpinValue; // Plaats om de waarde op te slaan verzonden door Blynk App Pin V0
int SOILpinValue; // Plaats om de waarde op te slaan verzonden door Blynk App Pin V1
- BLYNK_WRITE() :
Met deze code vertellen we de Blynk-app dat het Pin V0 en Pin V1 kan gebruiken om de code te vertellen of Bewegingsdetectie en Bodemvochtigheidstest AAN staan.
BLYNK_WRITE(V0) // V0-pin van Blynk-app vertelt of Bewegingsdetectie AAN is
{ PIRpinValue = param.asInt(); }
BLYNK_WRITE(V1) // V1-pin van Blynk-app vertelt of Bodemvochtigheid AAN is
{ SOILpinValue = param.asInt(); }
- void sendSensor() :
Deze code haalt data van DHT11, maakt het bruikbaar, en stuurt het naar Pin V5 en V6 respectievelijk.
void sendSensor(){
int h = dht.readHumidity();
int t = dht.readTemperature(); // of dht.readTemperature(true) voor Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
// om te checken of sensor geen valse waarden stuurt
return;
}
// Je kunt elke waarde op elk moment sturen.
// Stuur niet meer dan 10 waarden per seconde.
Blynk.virtualWrite(V5, h); // vochtigheid sturen naar pin V5
Blynk.virtualWrite(V6, t); // temperatuur sturen naar pin V7
}
- void getPirValue() & void getSoilValue() :
Leest de digitale waarde van de sensoren, voert dan een if-else voorwaarde uit om de sensorstatus te checken. Als de sensor in de vereiste staat is, stuurt het een melding via de Blynk-app.
void getPirValue(void){
pirValue = digitalRead(pirPin);
if (pirValue) // digitale pin van PIR geeft hoge waarde bij mensdetectie
{
Serial.println("Beweging gedetecteerd");
Blynk.notify("Beweging gedetecteerd");
}}
void getSoilValue(void){
soilValue = digitalRead(soilPin);
if (soilValue == HIGH) // digitale pin van bodemsensor geeft lage waarde bij lage vochtigheid
{
Serial.println("Planten water geven");
Blynk.notify("Planten water geven");
}}
- void setup() :
In de setup doen we een paar dingen die maar één keer bedoeld zijn. Zoals: Seriële communicatie starten op vaste baudrate, deze code autoriseren voor de Blynk-applicatie, DHT-sensorlezing beginnen, dan tweeten naar je Twitter-handle dat je Slimme Huis Project online is, dan de node vertellen dat PIR-pin en Bodemsensor-pin alleen bedoeld zijn voor input.
void setup(){
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
// Je kunt ook server specificeren:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
dht.begin(); // Start DHT-lezen
Blynk.tweet("OCTOPOD IS ONLINE! "); // Tweeten naar je Twitter-handle dat project online is
pinMode(pirPin,INPUT); // Definiëren dat PIR-pin alleen input is
pinMode(soilPin,INPUT); // Definiëren dat bodemsensor-pin alleen input is
// Functie instellen om elke seconde aangeroepen te worden
timer.setInterval(1000L, sendSensor);
}
- void loop() :
In de loop schrijven we dingen die herhaald moeten worden. Hier zorgen we ervoor dat de code die we voor setup schreven draait. Dan schrijven we 2 If-Else-statements die de statussen van Pin V0 en Pin V1 checken en dan de waarden van de sensoren ophalen.
void loop(){
Blynk.run();
timer.run();
if (PIRpinValue == HIGH) // V0-pin van Blynk-app vertelt of Bewegingsdetectie AAN is
{
getPirValue();
}
if (SOILpinValue == HIGH) // V1-pin van Blynk-app vertelt of Bodemvochtigheid AAN is
{
getSoilValue();
}
}
STAP 2: RFID Slim Slot programmeren
Eerlijk gezegd is dit een eenvoudige code die niet veel uitleg nodig heeft. Maar ik vertel je toch in een notendop wat het doet. Er zijn twee versies van de code, één als je de deureenheid met Bluetooth wilt verbinden zodat het je vertelt wanneer je deur open is via de seriële terminal. De andere stuurt naar serieel zodat het bekeken kan worden als je je Arduino met je computer verbindt. Ik kies de simpele zonder Bluetooth-versie. Dus hier gaan we!
- Ga naar Sketch → Bibliotheek toevoegen → Bibliotheek beheren → Typ in zoekbalk MFRC522 en installeer de bibliotheek. Ga dan naar Bestand → Voorbeelden → Aangepaste Bibliotheken → MFRC522 → dumpInfo Sketch. In het begin kun je lezen hoe je pinnen verbindt (of verwij naar de afbeelding). Draai de code en open seriële monitor en houd een van je RFID-kaarten voor de MFRC522-module en wacht 5 seconden. Noteer dan de kaart-UID op dezelfde manier noteer de UID's van je andere kaarten en sleutelhangers.
- Download dan welke code je wilt. Open de code en ga naar deze regel. Hier in plaats van deze X's voeg de UID van de kaart toe die je wilt gebruiken om de deur te openen. Nu ben je klaar, upload gewoon de code.
if (content.substring(1) == "XX XX XX XX") { }
In deze code doen we twee hoofddingen, dat is in het If-Else-deel van de code. In if vertellen we de Arduino dat als de UID van de kaart overeenkomt met de genoemde UID, de servo moet bewegen (zodat de deur open gaat) en sommige LEDs knipperen en geluid maken met de buzzer. Else als de UID's niet overeenkomen, laat sommige LEDs knipperen en geluid maken met de buzzer.



STAP 3: Raspberry Pi Mensdetectie AI Setup
In deze gestructureerde stap leren we hoe een Slimme Beveiligingscamera te maken. De camera stuurt je een e-mail wanneer het een object detecteert en als je op hetzelfde WiFi-netwerk zit, kun je de live beelden van de camera bekijken door het IP-adres van je Raspberry Pi in te typen. Ik laat je zien hoe je de slimme camera vanaf nul maakt. Laten we gaan!
Vereisten :
1. OpenCV (Open Source Computer Vision Library)
2. Raspberry Pi 3B
3. Raspberry Pi Camera V2
Aannames:
1. Raspberry Pi 3 met Raspbian Stretch geïnstalleerd. Als je Raspbian Stretch OS nog niet hebt, moet je je OS upgraden om te profiteren van de nieuwe features van Raspbian Stretch.
Om je Raspberry Pi 3 te upgraden naar Raspbian Stretch, kun je het hier downloaden en deze upgrade-instructies volgen (of deze voor de NOOBS-route die aanbeginners wordt aangeraden).
Let op: Als je je Raspberry Pi 3 upgraded van Raspbian Jessie naar Raspbian Stretch, is er potentieel voor problemen. Ga op eigen risico te werk, en raadpleeg de Raspberry Pi-forums voor hulp. Belangrijk: Het is mijn aanbeveling dat je doorgaat met een verse installatie van Raspbian Stretch! Upgraden vanaf Raspbian Jessie wordt niet aangeraden.
2. Fysieke toegang tot je Raspberry Pi 3 zodat je een terminal kunt openen en commando's kunt uitvoeren. Remote toegang via SSH of VNC. Ik doe het merendeel van deze tutorial via SSH, maar zolang je toegang hebt tot een terminal, kun je gemakkelijk volgen.
- Stap 1: CAMERA AAN RASPBERRY PI 3 BEVESTIGEN
1. Open je Raspberry Pi-cameramodule. Wees je bewust dat de camera beschadigd kan worden door statische elektriciteit. Voordat je de camera uit de grijze antistatische zak haalt, zorg dat je ontladen bent door een geaarde voorwerp aan te raken (bijv. een radiator of PC-behuizing).
2. Installeer het Raspberry Pi-cameramodule door de kabel in de Raspberry Pi te steken. De kabel past in de connector tussen de Ethernet- en HDMI-poorten, met de zilveren connectors naar de HDMI-poort gericht.
3. Start je Raspberry Pi op.
4. Voer vanaf de prompt "sudo raspi-config" uit. Als de "camera"-optie niet gelist is, moet je een paar commando's uitvoeren om je Raspberry Pi te updaten. Voer "sudo apt-get update" en "sudo apt-get upgrade" uit.
5. Voer "sudo raspi-config" opnieuw uit - je zou nu de "camera"-optie moeten zien.
COMMANDO-
$ sudo raspi-config
6. Navigeer naar de "camera"-optie, en schakel het in (kijk in interfacing-optie). Selecteer "Finish" en herstart je Raspberry Pi of typ gewoon het volgende:
$ sudo reboot
- Stap 2: OPEN CV INSTALLATIE
Als dit je eerste keer is dat je OpenCV installeert of je net begint met Raspbian Stretch. Dit is de perfecte tutorial voor je.
Stap #1: Bestandsysteem uitbreiden
Gebruik je een verse installatie van Raspbian Stretch? Zo ja, dan is het eerste wat je moet doen je bestandssysteem uitbreiden om alle beschikbare ruimte op je micro-SD-kaart te gebruiken:
COMMANDO-
$ sudo raspi-config
selecteer dan het menu-item "Advanced Options" gevolgd door "Expand filesystem". Een keer gevraagd, selecteer de eerste optie, "A1. Expand File System", druk Enter op je toetsenbord, pijl naar beneden naar de ""-knop, en herstart je Pi. Als je een 8GB-kaart gebruikt, gebruik je misschien bijna 50% van de beschikbare ruimte, dus een simpele ding om te doen is zowel LibreOffice als Wolfram-engine te verwijderen om ruimte vrij te maken op je PI:
COMMANDO-
$ sudo apt-get purge wolfram-engine
$ sudo apt-get purge libreoffice*
$ sudo apt-get clean
$ sudo apt-get autoremove
Na het verwijderen van de Wolfram Engine en LibreOffice, kun je bijna 1GB terugwinnen!
Stap #2: Afhankelijkheden installeren
Dit is niet de eerste keer dat ik bespreek hoe OpenCV op de Raspberry Pi te installeren, dus houd ik deze instructies korter, zodat je door het installatieproces kunt werken: Ik heb ook de tijd opgenomen die elk commando kost (sommige hangen af van je internetsnelheid) zodat je je OpenCV + Raspberry Pi 3-installatie kunt plannen (OpenCV zelf duurt ongeveer 4 uur om te compileren — meer over dit later). De eerste stap is bestaande pakketten updaten en upgraden:
COMMANDO-
$ sudo apt-get update && sudo apt-get upgrade
We moeten dan enkele ontwikkelaarstools installeren, inclusief CMake, wat ons helpt het OpenCV-buildproces te configureren: Raspbian Stretch: OpenCV 3 + Python installeren op je Raspberry Pi
COMMANDO-
$ sudo apt-get install build-essential cmake pkg-config
Vervolgens moeten we enkele afbeelding I/O-pakketten installeren die ons toestaan verschillende afbeeldingsbestandsformaten van schijf te laden. Voorbeelden van dergelijke formaten zijn JPEG, PNG, TIFF, etc.: Raspbian Stretch
COMMANDO-
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Net als we afbeelding I/O-pakketten nodig hebben, hebben we ook video I/O-pakketten nodig. Deze bibliotheken stellen ons in staat om verschillende videobestandsformaten van schijf te lezen alsook direct met videostreams te werken
COMMANDO-
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
De OpenCV-bibliotheek komt met een submodule genaamd highgui die gebruikt wordt om afbeeldingen op ons scherm te tonen en basis-GUI's te bouwen. Om de highgui-module te compileren, moeten we de GTK-ontwikkelbibliotheek installeren: Raspbian Stretch: OpenCV 3 + Python installeren op je Raspberry Pi
COMMANDO-
$ sudo apt-get install libgtk2.0-dev libgtk-3-dev
Veel operaties binnen OpenCV (naamlijk matrixoperaties) kunnen verder geoptimaliseerd worden door een paar extra afhankelijkheden te installeren:
COMMANDO-
$ sudo apt-get install libatlas-base-dev gfortran
Deze optimalisatiebibliotheken zijn vooral belangrijk voor resource-beperkte apparaten zoals de Raspberry Pi. Ten slotte, laten we zowel Python 2.7- als Python 3-headerbestanden installeren zodat we OpenCV met Python-bindings kunnen compileren: Raspbian Stretch
COMMANDO-
$ sudo apt-get install python2.7-dev python3-dev
Als je met een verse installatie van het OS werkt, is het mogelijk dat deze versies van Python al op de nieuwste versie staan (je ziet een terminalbericht dat dit aangeeft). Als je deze stap overslaat, kun je een foutmelding zien gerelateerd aan het Python.h-headerbestand dat niet gevonden wordt bij het uitvoeren van make om OpenCV te compileren.
Stap #3: OpenCV-broncode downloaden
Nu we onze afhankelijkheden geïnstalleerd hebben, laten we het 3.3.0-archief van OpenCV ophalen uit de officiële OpenCV-repository. Deze versie bevat de dnn-module die we bespraken in een eerdere post waar we Deep Learning met OpenCV deden (Opmerking: Als toekomstige versies van OpenCV uitkomen, kun je 3.3.0 vervangen door het nieuwste versienummer):
COMMANDO-
$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
$ unzip opencv.zip
We willen de volledige installatie van OpenCV 3 (om toegang te hebben tot features zoals SIFT en SURF, bijvoorbeeld), dus we moeten ook de opencv_contrib-repository ophalen: Raspbian Stretch: OpenCV 3 + Python installeren op je Raspberry Pi
COMMANDO-
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
$ unzip opencv_contrib.zip
Je moet misschien het bovenstaande commando uitbreiden met de "<=>"-knop tijdens kopiëren en plakken. De .zip in 3.3.0.zip kan in sommige browsers afgeknipt lijken. De volledige URL van het OpenCV 3.3.0-archief is: https://github.com/Itseez/opencv_contrib/archive/... Let op: Zorg dat je opencv- en opencv_contrib-versies hetzelfde zijn (in dit geval 3.3.0). Als de versienummers niet overeenkomen, loop je waarschijnlijk tegen compileer- of runtime-fouten aan.
Stap #4: Python 2.7 of Python 3? Voordat we OpenCV op onze Raspberry Pi 3 kunnen compileren, moeten we eerst pip installeren, een Python-pakketbeheerder
COMMANDO-
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo python3 get-pip.py
Je kunt een bericht krijgen dat pip al up-to-date is bij het uitgeven van deze commando's, maar het is het beste om deze stap niet over te slaan. Als je al langere tijd PyImageSearch-lezer bent, dan weet je dat ik een grote fan ben van zowel virtualenv als virtualenvwrapper.
Het installeren van deze pakketten is geen vereiste en je kunt OpenCV absoluut installeren zonder ze, maar having said that, raad ik je ten zeerste aan ze te installeren omdat andere bestaande PyImageSearch-tutorials (en toekomstige tutorials) ook Python-virtuele omgevingen benutten.
Ik ga er ook van uit dat je zowel virtualenv als virtualenvwrapper geïnstalleerd hebt door de rest van deze gids. Dus, gegeven dat, wat is het nut van virtualenv en virtualenvwrapper? Eerst is het belangrijk om te begrijpen dat een virtuele omgeving een speciaal hulpmiddel is om de afhankelijkheden die door verschillende projecten vereist worden op aparte plaatsen te houden door geïsoleerde, onafhankelijke Python-omgevingen voor elk van hen te creëren. Kortom, het lost het "Project X hangt af van versie 1.x, maar Project Y heeft 4.x nodig" dilemma op.
Het houdt ook je globale site-packages netjes, ordelijk en vrij van rommel. Als je een volledige uitleg wilt over waarom Python-virtuele omgevingen een goede gewoonte zijn, lees zeker deze uitstekende blogpost op RealPython. Het is standaardpraktijk in de Python-gemeenschap om virtuele omgevingen van een of andere soort te gebruiken, dus ik raad je ten zeerste aan om hetzelfde te doen:
COMMANDO-
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
Nu virtualenv en virtualenvwrapper geïnstalleerd zijn, moeten we ons ~/.profile-bestand updaten. Voeg de volgende regels aan de onderkant van het bestand toe: Raspbian Stretch
COMMANDO-
$ nano ~/.profile
Kopieer & plak de volgende regels aan de onderkant van het bestand:
COMMANDO-
# virtualenv and virtualenvwrapper
WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
OF
Je kunt gewoon cat en output-omleiding gebruiken om ~/.profile te updaten:
COMMANDO-
$ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
$ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
$ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile
Nu ons ~/.profile geüpdatet is, moeten we het herladen om ervoor te zorgen dat de wijzigingen van kracht worden. Je kunt een herlaad van je ~/.profile-bestand forceren door: Uitloggen en weer inloggen. Een terminstantie sluiten en een nieuwe openen. Of mijn persoonlijke favoriet:
COMMANDO-
$ source ~/.profile
Let op: Ik raad aan de source ~/.profile elke keer uit te voeren als je een nieuwe terminal opent om ervoor te zorgen dat je systeemvariabelen correct ingesteld zijn. Je Python-virtuele omgeving creëren. Laten we nu de Python-virtuele omgeving creëren die we voor computer vision-ontwikkeling zullen gebruiken:
COMMANDO-
$ mkvirtualenv cv -p python2
Dit commando creëert een nieuwe Python-virtuele omgeving genaamd cv met Python 2.7.
Als je liever Python 3 wilt gebruiken, wil je dit commando gebruiken:
COMMANDO-
$ mkvirtualenv cv -p python3
Opnieuw, ik kan dit punt niet genoeg benadrukken: de cv Python-virtuele omgeving is volledig onafhankelijk en afgeschermd van de standaard Python-versie die in de download van Raspbian Stretch zit.
Elke Python-pakketten in de globale site-packages-map zullen niet beschikbaar zijn voor de cv-virtuele omgeving. Op dezelfde manier zullen Python-pakketten geïnstalleerd in site-packages van cv niet beschikbaar zijn voor de globale installatie van Python.
Houd dit in gedachten als je in je Python-virtuele omgeving werkt en het zal veel verwarring en hoofdpijn voorkomen. Hoe controleren of je in de "cv"-virtuele omgeving zit. Als je je Raspberry Pi ooit herstart; uitlogt en weer inlogt; of een nieuwe terminal opent, moet je het workon-commando gebruiken om de cv-virtuele omgeving opnieuw te benaderen.
In eerdere blogposts heb ik gelezen dat lezers het mkvirtualenv-commando gebruikten — dit is volledig onnodig! Het mkvirtualenv-commando is bedoeld om slechts één keer uitgevoerd te worden: om de virtuele omgeving daadwerkelijk te creëren. Daarna kun je workon gebruiken en je wordt in je virtuele omgeving gedropt:
COMMANDO-
$ source ~/.profile
$ workon cv
Om te valideren en te verzekeren dat je in de cv-virtuele omgeving zit, bekijk je je commandoregel — als je de tekst (cv) voorafgaand aan je prompt ziet, dan zit je in de cv-virtuele omgeving: Zorg dat je de "(cv)"-tekst op je prompt ziet, wat aangeeft dat je in de cv-virtuele omgeving zit.
Anders, als je de (cv)-tekst niet ziet, zit je niet in de cv-virtuele omgeving:
Als je de "(cv)"-tekst niet op je prompt ziet, zit je niet in de cv-virtuele omgeving en moet je "source" en "workon" uitvoeren om dit op te lossen. Om dit te fixen, voer gewoon de bovenstaande source- en workon-commando's uit. NumPy installeren op je Raspberry Pi. Aannemend dat je het tot hier toe hebt gemaakt, zou je nu in de cv-virtuele omgeving moeten zitten (waar je voor de rest van deze tutorial in moet blijven).
Stap #4: NumPy installeren op je Raspberry Pi
Onze enige Python-afhankelijkheid is NumPy, een Python-pakket gebruikt voor numerieke verwerking:
COMMANDO-
$ pip install numpy
De NumPy-installatie kan even duren.
Stap #5: OpenCV compileren en installeren
COMMANDO-
$ workon cv
Zodra je hebt gecontroleerd dat je in de cv-virtuele omgeving zit, kunnen we onze build opzetten met CMake:
COMMANDO-
$ 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 ..
Nu, voordat we doorgaan naar de daadwerkelijke compilatiestap, zorg dat je de output van CMake onderzoekt! Begin met naar beneden scrollen naar de sectie getiteld Python 2 en Python 3. Als je OpenCV 3 voor Python 2.7 compileert, zorg dan dat je Python 2-sectie geldige paden bevat naar de Interpreter, Bibliotheken, numpy en pakketten.
Controleren dat Python 3 gebruikt zal worden bij het compileren van OpenCV 3 voor Raspbian Stretch op de Raspberry Pi 3. Let op hoe de Interpreter wijst naar onze python2.7-binary in de cv-virtuele omgeving. De numpy-variabele wijst ook naar de NumPy-installatie in de cv-omgeving.
Opnieuw wijst de Interpreter naar onze python3.5-binary in de cv-virtuele omgeving terwijl numpy wijst naar onze NumPy-installatie.
In beide gevallen, als je de cv-virtuele omgeving in deze variabelenpaden niet ziet, is het bijna zeker omdat je NIET in de cv-virtuele omgeving zat voordat je CMaKe uitvoerde! Als dit het geval is, benader de cv-virtuele omgeving met workon cv en voer het bovenstaande cmake-commando opnieuw uit.
Swap-ruimte configureren voor compileren. Voordat je de compilatie start, moet je je swap-ruimte vergroten. Dit stelt OpenCV in staat om met alle vier de kernen van de Raspberry PI te compileren zonder dat de compilatie vastloopt door geheugenproblemen.
Open je /etc/dphys-swapfile en bewerk dan de CONF_SWAPSIZE-variabele
COMMANDO-
$ nano /etc/dphys-swapfile
en bewerk dan de volgende sectie van het bestand: #grootte instellen op absolute waarde, leeg laten (standaard) gebruikt dan berekende waarde # je wilt dit waarschijnlijk niet, tenzij je een speciale schijfsituatie hebt
# CONF_SWAPSIZE=100
CONF_SWAPSIZE =1024
Let op dat ik de 100MB-regel uitgecommentarieerd heb en een 1024MB-regel toegevoegd. Dit is het geheim om te compileren met meerdere kernen op Raspbian Stretch. Als je deze stap overslaat, compileert OpenCV misschien niet.
Om de nieuwe swap-ruimte te activeren, herstart de swap-service:
COMMANDO-
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Let op: Het is mogelijk de Raspberry Pi microSD-kaart te verbranden omdat flash-geheugen een beperkt aantal schrijfbewerkingen heeft tot de kaart niet meer werkt. Het wordt ten zeerste aangeraden deze instelling terug te zetten naar de standaardwaarde als je klaar bent met compileren en testen van de installatie (zie hieronder). Om meer te lezen over swap-groottes die geheugen corrupt, zie deze pagina. Ten slotte zijn we nu klaar om OpenCV te compileren:
COMMANDO-
$ make -j4
De -j4-switch staat voor het aantal kernen dat gebruikt wordt bij het compileren van OpenCV. Aangezien we een Raspberry Pi 2 gebruiken, benutten we alle vier de processorkernen voor snellere compilatie.
Echter, als je make-commando fouten geeft, zou ik voorstellen de compilatie opnieuw te starten en slechts één kern te gebruiken:
$ make clean
$ make
Zodra OpenCV 3 klaar is met compileren. Onze OpenCV 3-compilatie op Raspbian Stretch is succesvol voltooid.
Vanaf daar hoef je alleen nog OpenCV 3 op je Raspberry Pi 3 te installeren:
COMMANDO-
$ sudo make install
$ sudo ldconfig
Stap #6: OpenCV-installatie op je Pi afronden
We zijn er bijna — nog een paar stappen en je bent klaar om je Raspberry Pi 3 met OpenCV 3 op Raspbian Stretch te gebruiken.
Voor Python 2.7:
#5 Mits je stap zonder fouten, zou OpenCV nu geïnstalleerd moeten zijn in /usr/local/lib/python2.7/site-packages. Je kunt dit verifiëren met het ls-commando:
COMMANDO-
$ ls -l /usr/local/lib/python2.7/site-packages/
total 1852
-rw-r--r-- 1 root staff 1895772 Mar 20 20:00 cv2.so
Let op: In sommige gevallen kan OpenCV geïnstalleerd zijn in /usr/local/lib/python2.7/dist-packages (let op dist-packages in plaats van site-packages). Als je de cv2.so-bindings niet in site-packages vindt, check dan zeker dist-packages. Onze laatste stap is de OpenCV-bindings te symlinken in onze cv-virtuele omgeving voor Python 2.7:
COMMANDO-
$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
Voor Python 3: Na het uitvoeren van make install, zouden je OpenCV + Python-bindings geïnstalleerd moeten zijn in /usr/local/lib/python3.5/site-packages. Opnieuw kun je dit verifiëren met het ls-commando:
COMMANDO-
$ 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
Ik weet eerlijk gezegd niet waarom, misschien is het een bug in het CMake-script, maar bij het compileren van OpenCV 3-bindings voor Python 3+, is de output .so-bestand genaamd cv2.cpython-35m-arm-linux-gnueabihf.so (of een variant) in plaats van simpelweg cv2.so (zoals in de Python 2.7-bindings). Opnieuw, ik weet niet precies waarom dit gebeurt, maar het is een makkelijke fix. Alles wat we hoeven te doen is het bestand hernoemen:
COMMANDO-
$ cd /usr/local/lib/python3.5/site-packages/
$ sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
Na hernoemen naar cv2.so, kunnen we onze OpenCV-bindings symlinken in de cv-virtuele omgeving voor Python 3.5:
COMMANDO-
$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Stap #7: Je OpenCV 3-installatie testen
Gefeliciteerd, je hebt nu OpenCV 3 geïnstalleerd op je Raspberry Pi 3 met Raspbian Stretch! Maar voordat we de champagne openen en dronken raken op onze overwinning, laten we eerst verifiëren dat je OpenCV-installatie goed werkt.
Open een nieuwe terminal, voer de source- en workon-commando's uit, en probeer tenslotte de Python + OpenCV-bindings te importeren:
COMMANDO-
$ source ~/.profile
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'3.3.0'
>>>
OpenCV 3 is succesvol geïnstalleerd op mijn Raspberry Pi 3 + Python 3.5-omgeving. Zodra OpenCV geïnstalleerd is, kun je zowel de opencv-3.3.0- als opencv_contrib-3.3.0-mappen verwijderen om een boel ruimte op je schijf vrij te maken:
COMMANDO-
$ rm -rf opencv-3.3.0 opencv_contrib-3.3.0
Wees echter voorzichtig met dit commando! Zorg dat OpenCV goed geïnstalleerd is op je systeem voordat je deze mappen weggooit. Een fout hier kan je uren compilatietijd kosten.
Open je /etc/dphys-swapfile en bewerk dan de CONF_SWAPSIZE-variabele COMMANDO-
# grootte instellen op absolute waarde, leeg laten (standaard) gebruikt dan berekende waarde
# je wilt dit waarschijnlijk niet, tenzij je een speciale schijfsituatie hebt
CONF_SWAPSIZE=100
#CONF_SWAPSIZE=1024
Let op dat ik de 1024MB-regel uitgecommentarieerd heb en de 100MB-regel weer aangevinkt. Zoals hierboven gezegd, kunnen grotere swap-ruimtes leiden tot geheugencorruptie, dus ik raad aan het terug te zetten naar 100MB. Als je deze stap overslaat, houdt je geheugenkaart niet zo lang. Om terug te keren naar de kleinere swap-ruimte, herstart de swap-service
COMMANDO-
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
- STAP 4: Python-programma instellen
Je kunt verifiëren dat de camera werkt door uit te voeren.
COMMANDO-
$ raspistill -o image.jpg
wat een afbeelding van de camera in je huidige map opslaat.
Na gecheckt dat de camera werkt. Download nu alle python-bestanden en modellen via onderstaande link:
LINK:
Je kunt de bestandsverkenner openen en de afbeelding bekijken.
Zorg dat je de virtuele omgeving gebruikt door de volgende commando's te typen:
COMMANDO'S-
$ source ~/.profile
$ workon cv
Ga vervolgens naar de repository-map,
COMMANDO'S-
$ cd Smart-Security-Camera
en installeer de afhankelijkheden voor het project
COMMANDO'S-
$ pip install -r requirements.txt
Om e-mails te krijgen wanneer objecten gedetecteerd worden, moet je een paar wijzigingen aanbrengen in het mail.py-bestand. Open mail.py met vim vim mail.py, druk dan op i om te bewerken. Scroll naar beneden naar de volgende sectie
# E-mail waar je de update vandaan wilt sturen (werkt alleen met gmail)
fromEmail = 'mijnemail@gmail.com'
fromEmailPassword = 'wachtwoord1234'
# E-mail waar je de update naartoe wilt sturen
toEmail = 'andereemail@gmail.com'
en vervang door je eigen e-mail/gegevens.
Het mail.py-bestand logt in op een Gmail SMTP-server en stuurt een e-mail met een afbeelding van het object gedetecteerd door de beveiligingscamera. Druk op esc dan ZZ om op te slaan en af te sluiten.
Je kunt ook het main.py-bestand wijzigen om enkele andere eigenschappen te veranderen.
email_update_interval = 600 # stuurt een e-mail maar één keer in dit interval
video_camera = VideoCamera(flip=True) # creëert camera-object, verticaal flippen
object_classifier = cv2.CascadeClassifier("models/fullbody_recognition_model.xml") # een opencv-classifier
facial_recognition_model.xml fullbody_recognition_model.xml upperbody_recognition_model.xml
Draai het programma python main.py
Je kunt een live stream bekijken door het IP-adres van je Pi in een browser op het zelfde netwerk te bezoeken. Je kunt het IP-adres van je Raspberry Pi vinden door ifconfig in de terminal te typen en te kijken naar het inet-adres. Bezoek :5000 in je browser om de stream te bekijken.
Opmerking:
Om de live stream op een ander netwerk dan je Raspberry Pi te bekijken, kun je ngrok gebruiken om een lokale tunnel bloot te leggen. Een keer gedownload, draai ngrok met ./ngrok http 5000 en bezoek een van de gegenereerde links in je browser. Opmerking: De videostream start niet automatisch bij opstart. Om de videostream automatisch te starten, moet je het programma vanuit je /etc/rc.local-bestand draaien, zie deze video voor meer informatie over hoe dat te configureren. E-mails ontvangen. Bij het ontvangen van een e-mail voor de eerste keer, kun je de volgende melding van Google krijgen:
Standaard blokkeert Google apps die SMTP zonder toestemming gebruiken. We kunnen dit oplossen door op de link "less secure apps" te klikken en de feature aan te zetten. Het volgende gedetecteerde object stuurt een e-mail.







STAP 4: Blynk App Interface Instellen
Dit is een van de makkelijkste en leukste stappen. Laten we beginnen. Zullen we?
- De Blynk-app downloaden is de eerste duidelijke stap. Download het uit de App Store of Google Play Store. Registreer of log in in de app om te beginnen.
- Klik op Nieuw Project om een nieuw project te maken. Noem het hoe je wilt. Bij apparaten kies NodeMCU. Bij verbindingstype kies WiFi en klik op Maken.
- Nu krijg je een Auth-key op je e-mail. Zorg dat je die kopieert en toevoegt aan je code.
- Klik nu op het +-teken om widgets toe te voegen. Je moet misschien wat energie kopen!
- Voeg nu drie Meters toe. Klik op een van de Meters, noem het Temperatuur. Kies een kleur naar keuze voor deze meter. Bij pin kies Virtuele Pin V6. Zet het bereik van 0 tot 50 °C (niet zeker voor °F), maak het label °C/°F en houd de leessnelheid op Push.
- Herhaal dit voor de andere twee Meters met data zoals in de afbeeldingen getoond.
- Voeg nu een zeRGBa toe en stel R in op digitale pin GP15, B op GP3 en B op GP1.
- Voeg nu 4 knoppen toe, verander hun kleuren. Stel ze in zoals in de afbeeldingen getoond.
- Voeg een SuperChart toe, voeg 3 datastromen toe: Temperatuur, Vochtigheid en gas, stel hun kleuren, pinnen, bereik en achtervoegsel in.
- Voeg nu tabs toe. Ga naar de tweede tab en voeg Twitter, Meldingen, E-mail en Eventor toe. In Twitter voeg je je Twitter-gebruikersnaam en wachtwoord toe. In Meldingen, schakel Melden wanneer hardware offline gaat in. In E-mail, stel je e-mailadres in. In Eventor kun je veel triggers instellen, zie de afbeelding voor de triggers die ik ingesteld heb.
- Klaar. Klik nu op de play-knop om de interface te gebruiken die je hebt gemaakt. Je kunt de interface aanpassen zoals je wilt. Het is echt een simpel en leuk proces!


STAP 5: Octopod-structuur maken
Waarschuwing - Dit gaat een van de meest tijdrovende processen zijn!
LET OP: Je kunt deze stap overslaan en de behuizing 3D-printen die ik geleverd heb!
Eigenlijk is deze stap optioneel maar de belangrijkste stap! Je kunt gewoon een schoenendoos nemen en al deze harde werk vermijden. Maar integenstelling tot dit, maakt dit harde werk het project uniek. Het idee voor dit unieke ontwerp kwam me terwijl ik mijn wiskunde-huiswerk deed. Deze vorm is geïnspireerd door een achthoek. Eerder, dit is een 3D-achthoek! Laten we beginnen!
De structuur maken:
- Pak je karton en teken een rechthoek van 9 cm x 9,5 cm (je kunt de afmetingen naar believen wijzigen). Nu, eind-aan-eind, teken 4 van deze gelijke rechthoeken (8 als je karton lang genoeg is).
- Maak nu gedeeltelijke snijden (iets als papier vouwen) tussen deze rechthoeken en knip dit hele lange stuk uit. Herhaal dit proces tot je 4 van deze lange stukken hebt.
- Nu, met een D, teken een hoek van 135° en knip het uit zoals in de afbeeldingen getoond. Maak 16 van deze dezelfde hoeken.
- Met lijmpistool plak deze hoeken tussen de kleine stukjes. Herhaal dit voor alle verbindingen.
- Nu met lijmpistool plak 2 van deze open structuren om een gesloten structuur te maken (soort van achthoek).
- Nu plak de andere twee open structuren loodrecht, maak een 3D-vorm.
- Nu knip 4 meer stukken van 9 x 9,5 cm en plak ze tussen alle lege ruimtes.
- Nu zul je overblijven met alleen 8 open driehoeken. Met acryl boterpapier knip 8 driehoeken, die op deze open gebieden passen, maar plak ze nog niet.
Verfwerk:
Hiervoor moet je naar een open gebied gaan! Draag je masker en handschoenen en maak één laag over de structuur die je hebt gemaakt. Je kunt naar YouTube gaan om de juiste manieren te leren voor een perfecte laag. Laat dit 4-5 uur drogen en breng dan nog 1 laag aan. Ik denk dat 3 lagen goed zullen zijn voor dit.
Dat is het! Je bent aangekomen met een uniek kunstwerk.

STAP 6: Deurslot-behuizing maken
Echt simpel. Pak gewoon een schoenendoos en breng 2-3 gladde lagen spray aan. En misschien voor design een schaakpatroon maken met ducktape zoals we deden!

STAP 7: De Octopod monteren
Ik heb geprobeerd deze stap zo simpel mogelijk te maken, door het schematische diagram te maken. Verwijs naar de afbeelding of het bestand, en maak verbindingen dienovereenkomstig. Ik zal alle verbindingen kort uitleggen!
- We hebben de NodeMCU verbonden met een groot formaat solderloos breadboard. We hebben ook een breadboard-voeding op het breadboard aangesloten. NodeMCU, alle sensoren, LED's en andere componenten worden gevoed door de voeding.
- Volgende zijn de sensorverbindingen: DHT11 → D4/ GP2 MQ2 → A0/ adc00 Bodemvochtigheidssensor → D2/ GP4 PIR → D6/ GP1 RGB R → D8/ GP15, G → Rx/ GP3, B → Tx/ GP1 RelayLn1 → D0/ GP16, Ln2 → D5/ GP14 Maak de volgende verbindingen.
- Voor het voeden van dit kun je een Powerbank of een wandaadapter gebruiken, die verbonden zal zijn met de breadboard-voeding.
- Nu, pak je Raspberry Pi samen met de Raspberry Pi-camera. Maak een klein gat in een van de muren van het karton en plak of tape je Raspberry-camera.
Nu, stop al deze elektronica erin, door een van de open driehoeken en sluit de driehoek met de uitschittingen van acryl boterpapier die we maakten. Het is beter om 1 of 2 open te laten, voor het geval er iets binnen gerepareerd moet worden! Laat ook de prikken van de bodemvochtigheidssensor buiten zitten.
Klaar! We hebben het maken van de Octopod voltooid! Nu, schakel de stroom in en zet je Octopod op de eettafel of misschien op de gastentafel en geniet! Om de live feed van de Raspberry Pi te zien, open gewoon een browser en vul het IP-adres van de Pi in. Geniet!

STAP 8: Het deurslot monteren
Na het uploaden van de code op je Arduino, maak gewoon de verbindingen zoals in de afbeelding of in het fritzing-bestand getoond! Het is vrij simpel. Pak dan de handige schoenendoos die we maakten, maak 2 gaten erin voor de LED's om uit te steken. en laat de servo uitsteken. Deze dagen zijn mechanische sloten zoals servo's ook op de markt beschikbaar, hoewel servo prima werkt. Dit is slechts een experiment, dus gebruik dit niet als je echte slot! Plak de RFID aan een muur van de doos en plak ook het kleine breadboard en de Arduino. Je kunt een wandaadapter of powerbank gebruiken om dit te voeden. Schakel gewoon de Arduino in en je bent goed om te gaan! Klaar!
CONCLUSIE:
Dit was een echt leuk project om te doen!
Ik was echt blij met hoe het uitkwam. Ik vind de lichten er echt goed uitzien, en ik denk dat het de moeite waard is om er zelfs één te maken als bijlamp. Ik kan de makers van Blynk en OpenCV-bibliotheken niet genoeg bedanken, ze zijn beide echt uitstekende software en maakten dit project mogelijk! Zoals altijd, als je vragen hebt over welk deel van het proces dan ook, laat het me weten en ik help je graag. Heel erg bedankt! En stem alstublieft voor ons!
-Saksham
Arduino Blog
Volledige Instructable

UPDATE:
Ik heb gewerkt aan het integreren van dit systeem met Amazon Alexa, ik ben bijna klaar. Zal de code in 2-3 dagen uploaden!
Code
- octopod.ino
- octopod_door.ino
- octopod_door_bluetooth.ino
octopod.inoArduino
Dit is de hoofdcodes voor Arduino MKR 1010 (NodeMCU in mijn geval)
Als je MAX32620FTHR gebruikt, download bibliotheken daarvoor. Verander dan het bord in bordinstellingen. Verander ook de pinnen zoals hieronder gegeven
ESP MAX
AO - - - - - - - - - - - - GPIO2
A1 - - - - - - - - - - - - - GPIO1
Bodemsensor MAX
analoge sensor - - - GPIO3
Gassensor (MQ2) MAX
sensor - - - - - - - - - - - GPIO4
PIR-sensor MAX
sensor - - - - - - - - - - - -GPIO0
Relais MAX
1 - - - - - - - - - - - - - - - - - M0
2 - - - - - - - - - - - - - - - - - M1
/***************************************************************************
OCTOPOD: EEN SLIMME HUIS AUTOMATISERING PROJECT GEMAAKT DOOR SAKSHAM
Download nieuwste Blynk-bibliotheek hier: https://github.com/blynkkk/blynk-library/releases/latest
Download nieuwste DHT-sensorbibliotheek hier: https://github.com/adafruit/DHT-sensor-library
***************************************************************************/
#include <ESP8266WiFi.h> // ESP8266 WiFi-bibliotheek includeren
#include <BlynkSimpleEsp8266.h> // Blynk-bibliotheek includeren
#include <DHT.h> // DHT-sensorbibliotheek includeren
#define BLYNK_PRINT Serial
// Je zou Auth Token in de Blynk-app moeten krijgen.
// Ga naar Projectinstellingen (moer-icoon).
char auth[] = "Jouw Blynk Auth Key";
// Jouw WiFi-gegevens.
// Stel wachtwoord in op "" voor open netwerken.
char ssid[] = "Jouw WiFi SSID";
char pass[] = "Jouw WiFi Wachtwoord";
#define DHTPIN 2 // Welke digitale pin temperatuur- en vochtigheidssensor aangesloten is
#define soilPin 4 // Welke digitale pin bodemvochtigheidssensor aangesloten is
#define gasPin A0 // Welke analoge pin gassensor aangesloten is
#define pirPin 12 // Welke digitale pin bodemvochtigheidssensor aangesloten is
int pirValue; // Plaats om gelezen PIR-waarde op te slaan
int soilValue; // Plaats om gelezen bodemvochtigheidswaarde op te slaan
int PIRpinValue; // Plaats om de waarde op te slaan verzonden door Blynk App Pin V0
int SOILpinValue; // Plaats om de waarde op te slaan verzonden door Blynk App Pin V1
// Uncomment welk type je gebruikt!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21 // DHT 21, AM2301
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// Deze functie stuurt Arduino's uptime elke seconde naar virtuele pin (5).
// In de app, moet widget-leessnelheid ingesteld worden op PUSH. Dit betekent
// dat je definieert hoe vaak data naar Blynk-app gestuurd wordt.
BLYNK_WRITE(V0) // V0-pin van Blynk-app vertelt of Bewegingsdetectie AAN is
{
PIRpinValue = param.asInt();
}
BLYNK_WRITE(V1) // V1-pin van Blynk-app vertelt of Bodemvochtigheid AAN is
{
SOILpinValue = param.asInt();
}
void sendSensor()
{
int h = dht.readHumidity();
int t = dht.readTemperature(); // of dht.readTemperature(true) voor Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
// om te checken of sensor geen valse waarden stuurt
return;
}
// Je kunt elke waarde op elk moment sturen.
// Stuur niet meer dan 10 waarden per seconde.
Blynk.virtualWrite(V5, h); // vochtigheid sturen naar pin V5
Blynk.virtualWrite(V6, t); // temperatuur sturen naar pin V7
}
void getPirValue(void)
{
pirValue = digitalRead(pirPin);
if (pirValue) // digitale pin van PIR geeft hoge waarde bij mensdetectie
{
Serial.println("Beweging gedetecteerd");
Blynk.notify("Beweging gedetecteerd");
}
}
void getSoilValue(void)
{
soilValue = digitalRead(soilPin);
if (soilValue == HIGH) // digitale pin van bodemsensor geeft lage waarde bij lage vochtigheid
{
Serial.println("Planten water geven");
Blynk.notify("Planten water geven");
}
}
void setup()
{
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
// Je kunt ook server specificeren:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
dht.begin(); // Start DHT-lezen
Blynk.tweet("OCTOPOD IS ONLINE! "); // Tweeten naar je Twitter-handle dat project online is
pinMode(pirPin,INPUT); // Definiëren dat PIR-pin alleen input is
pinMode(soilPin,INPUT); // Definiëren dat bodemsensor-pin alleen input is
// Functie instellen om elke seconde aangeroepen te worden
timer.setInterval(1000L, sendSensor);
}
void loop()
{
Blynk.run();
timer.run();
if (PIRpinValue == HIGH) // V0-pin van Blynk-app vertelt of Bewegingsdetectie AAN is
{
getPirValue();
}
if (SOILpinValue == HIGH) // V1-pin van Blynk-app vertelt of Bodemvochtigheid AAN is
{
getSoilValue();
}
}
octopod_door.inoArduino
Code voor Automatische Deurslotbesturing (GEEN BLUETOOTH VERSIE)
/***********************************************************************************************************
OCTOPOD: EEN SLIMME HUIS AUTOMATISERING PROJECT GEMAAKT DOOR SAKSHAM
ARDUINO RFID DEURSLOT CODE
Benodigde bibliotheek - MFRC522
************************************************************************************************************/
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5 // groene LED-pin definiëren
#define LED_R 4 // rode LED definiëren
#define BUZZER 2 // buzzer-pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522-instantie creëren.
Servo myServo; // servo naam definiëren
void setup() {
Serial.begin(9600); // Seriële communicatie initiëren
SPI.begin(); // SPI-bus initiëren
mfrc522.PCD_Init(); // MFRC522 initiëren
myServo.attach(3); // servo-pin
myServo.write(0); // servo-startpositie
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
Serial.println("Leg je kaart voor de reader...");
Serial.println();
}
void loop() {
// Zoek naar nieuwe kaarten
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Selecteer een van de kaarten
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Toon UID op seriële monitor
Serial.print("UID tag :");
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));
}
Serial.println();
Serial.print("Bericht : ");
content.toUpperCase();
if (content.substring(1) == "XX XX XX XX") // verander hier de UID van de kaart/kaarten die je toegang wilt geven
{
Serial.println("Geautoriseerde toegang");
Serial.println();
delay(500);
digitalWrite(LED_G, HIGH);
tone(BUZZER, 500);
delay(300);
noTone(BUZZER);
myServo.write(180);
delay(5000);
myServo.write(0);
digitalWrite(LED_G, LOW);
}
else {
Serial.println(" Toegang geweigerd");
digitalWrite(LED_R, HIGH);
tone(BUZZER, 300);
delay(1000);
digitalWrite(LED_R, LOW);
noTone(BUZZER);
}
}
octopod_door_bluetooth.inoArduino
Code voor Automatische Deurslotbesturing (Bluetooth-versie)
/***********************************************************************************************************
OCTOPOD: EEN SLIMME HUIS AUTOMATISERING PROJECT GEMAAKT DOOR SAKSHAM
ARDUINO RFID DEURSLOT CODE
Benodigde bibliotheek - MFRC522
************************************************************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial BTserial(0, 1); // RX | TX
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5 // groene LED-pin definiëren
#define LED_R 4 // rode LED definiëren
#define BUZZER 2 // buzzer-pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522-instantie creëren.
Servo myServo; // servo naam definiëren
void setup() {
BTserial.begin(9600); // Seriële communicatie initiëren
BTserial.println("Wachten op verbindingen...");
SPI.begin(); // SPI-bus initiëren
mfrc522.PCD_Init(); // MFRC522 initiëren
myServo.attach(3); // servo-pin
myServo.write(0); // servo-startpositie
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
BTserial.println("Leg je kaart voor de reader...");
BTserial.println();
}
void loop() {
// Zoek naar nieuwe kaarten
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Selecteer een van de kaarten
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Toon UID op seriële monitor
BTserial.print("UID tag :");
String content = "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++) {
BTserial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
BTserial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
BTserial.println();
BTserial.print("Bericht : ");
content.toUpperCase();
if (content.substring(1) == "33 3E A7 E5" || content.substring(1) == "E5 36 6B 49") // verander hier de UID van de kaart/kaarten die je toegang wilt geven
{
BTserial.println("Geautoriseerde toegang");
BTserial.println();
delay(500);
digitalWrite(LED_G, HIGH);
tone(BUZZER, 500);
delay(300);
noTone(BUZZER);
myServo.write(180);
delay(5000);
myServo.write(0);
digitalWrite(LED_G, LOW);
}
else {
BTserial.println(" Toegang geweigerd");
digitalWrite(LED_R, HIGH);
tone(BUZZER, 300);
delay(1000);
digitalWrite(LED_R, LOW);
noTone(BUZZER);
}
}
Aangepaste onderdelen en behuizingen
Dit is het basisonderwerp dat je kunt gebruiken als je de behuizing van karton/hout wilt maken zoals ik!
octopod_v2_ukTmIJ0uMl.f3d
Goede behuizing die je kunt 3D-printen!
octo_2_v3_sii4tuCF7d.f3d
Schema's
Pinconfiguratie kan verschillen met Arduino MKR 1010
Zonder Bluetooth
Voor Bluetooth verbind Rx (HC-05) → Tx (Arduino)
Tx (HC-05) → Rx (Arduino)
en 5V naar 5V
Ground naar Ground
ESP MAX AO - - - - - - - - - - - - GPIO2 A1 - - - - - - - - - - - - - GPIO1 Bodemsensor MAX analoge sensor - - - GPIO3 Gassensor (MQ2) MAX sensor - - - - - - - - - - - GPIO4 PIR-sensor MAX sensor - - - - - - - - - - - -GPIO0 Relais MAX 1 - - - - - - - - - - - - - - - - - M0 2 - - - - - - - - - - - - - - - - - M1
Productieproces
- Een Raspberry Pi-thuisautomatiseringssysteem bouwen voor afstandsbediening
- Slimme Jaloezieën: Geautomatiseerd Lichtbeheer met Arduino & Zonne-energie
- Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
- Slimme huisautomatisering & beveiligingssysteem bouwen met 1Sheeld
- Arduino Boter-Kaas-Eieren met MAX7219 LED Matrix en Kartonnen Behuizing
- Bouw een Betrouwbare Arduino Afteltimer met SparkFun 7‑Segment Display
- Bouw je eigen RC Porsche-auto met Arduino: Stap-voor-stap handleiding
- WiFi-ingeschakeld slim slot met Arduino & ESP8266 – Ontgrendel via je telefoon
- Industriële Automatisering 4.0: Productie-efficiëntie revolutioneren
- Hoe slimme huistechnologie het alledaagse leven transformeert
- Malvertising bedreigt slimme huis IoT: verborgen advertenties kunnen uw apparaten compromitteren