Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Huisautomatisering met Raspberry Pi 2 en Windows 10 IoT

Componenten en benodigdheden

Arduino UNO
Neem voor elke kamer die je wilt automatiseren een aparte Arduino UNO.
× 1
Raspberry Pi 2 Model B
× 1
Jumperdraden (algemeen)
× 1
Broodplank (algemeen)
× 1
LDR (lichtafhankelijke weerstand)
LDR biedt verschillende spanningsmetingen voor verschillende lichtintensiteiten.
× 1
PIR-bewegingssensor (algemeen)
Passieve IR detecteert menselijke aanwezigheid.
× 1
Relais (algemeen)
Je kunt elke soort relaismodule gebruiken. Het aantal relais hangt af van het aantal apparaten dat u wilt bedienen. [NoOfDevices =NoOfRelay]
× 1
Siemens-contactor (3TF32 00-0AP0)
De contactor wordt gebruikt om de waterpomp te regelen met een maximale nominale spanning van AC3:16A 415VAC. Als u een contactor koopt, controleer dan de classificaties van uw waterpomp en uw landafhankelijkheden als die er zijn. "3TF32 00-AP0" kan een waterpomp tot 16A en 415VAC aandrijven. Deze contactor werkt met een ingebouwde spoel. De nominale waarden van de spoel zijn (alleen specifiek voor 3TF32 00-0AP0) 250VAC.
× 1
Miniatuurstroomonderbreker (1P C16A)
MCB wordt vóór de contactor bevestigd om de waterpomp te beschermen tegen elektrische storingen en overbelasting. Hier heeft MCB ook specifieke beoordelingen. Onze contactor is van 16A en daarom heb ik 16A MCB gebruikt. U kunt het naar wens aanpassen.
× 1

Apps en online services

Arduino IDE
Om Arduino-firmware te schrijven. Heb het in het artikel uitgelegd.
Microsoft Visual Studio 2015
Community-editie is verplicht en is gratis voor maximaal vijf gebruikers. Maar u kunt hoger gebruiken als u een gelicentieerd exemplaar van Visual Studio 2015 hebt gekocht.
Microsoft Windows 10 IoT Core
Als primair besturingssysteem, dat de apparaten bestuurt via Arduino en een beheerconsole biedt.

Over dit project

In het huidige tijdperk kan technologie het menselijk leven verbeteren. Technologie evolueert decennium na decennium. Automatisering was vroeger een sciencefiction, maar niet vandaag. Door de nieuwste technologie te combineren met thuis, kunnen we een geweldig huis bouwen. Met de Raspberry Pi en Windows 10 kunnen we een domoticasysteem bouwen dat in staat is om huishoudelijke apparaten automatisch te bedienen.

Aan de slag

Voordat we met het project beginnen, moeten we eerst de basis begrijpen. Bekijk de volgende afbeelding (algemene configuratie):

Configuratie voor Ruimte

Nu rekening houdend met het kamerscenario, zal een Arduino UNO apparaten besturen en sensorgegevens lezen. Raspberry Pi vraagt ​​periodiek om de sensorgegevens die zijn verzameld door Arduino UNO. De figuur "Room Architecture" laat zien hoe de Arduino UNO verbinding maakt met de apparaten en sensoren. Elke kamer heeft meerdere regelbare apparaten (dwz licht(en), ventilator, stopcontact(en), enz.), een passieve IR (om menselijke aanwezigheid in de kamer te detecteren), een temperatuursensor (LM35 om de kamertemperatuur te verzamelen) en LDR ( om de lichtintensiteit in de buurt van het kamerraam te detecteren).

Toewijzing apparaatadres

Het belangrijkste is hoe we apparaten zullen identificeren? Het is makkelijk. We maken het apparaatadres door het kamernummer te combineren met het apparaatnummer.

Bijvoorbeeld:

Dus tot nu toe kennen we de algemene configuratie. Kortom, een Raspberry Pi zal fungeren als primaire controller. Elke kamer heeft zijn eigen Arduino UNO die fungeert als slaaf van Raspberry Pi. De communicatie tussen Raspberry Pi en Arduino UNO vindt plaats via I2C.

Schema's

Laten we, om het gemakkelijker te maken, beginnen met de implementatie voor de eerste kamer. Raadpleeg het schema om componenten op de juiste manier aan te sluiten.

I2C-busstreep: Om meer dan één Arduino te bevestigen, kunt u I2C Bus Stripe gebruiken, zoals hieronder weergegeven.

Hoe een apparaat met relaiskaart te bedraden?

Allemaal gedaan aan de hardwarekant. Nu is het tijd om software te bouwen.

Software

Ons project bestaat uit een Raspberry Pi 2 en Arduino UNO. Raspberry Pi 2-software ontwikkeld in Visual Studio 2015. Ik neem aan dat de lezer op de hoogte is van het maken van projecten voor Raspberry Pi 2 in Visual Studio 2015. Ik neem ook aan dat de gebruiker een gemiddelde kennis heeft van Arduino-framework, Visual C# en Windows Universal XAML.

Laten we software in de volgende formatie begrijpen:

  • Protocol (hoe Raspberry Pi 2 en Arduino praten)
  • Klassenstructuur (hoe Raspberry Pi 2 zulke ingewikkelde apparaten en kamers onderhoudt)
  • Gebruikersinterface (draadframe)

Protocol (hoe Raspberry Pi 2 en Arduino praten via I2C)

Laten we, voordat we verder gaan, eerst beslissen hoe Raspberry Pi en Arduino praten. Om een ​​betrouwbaar protocol te maken, moeten we eerst duidelijke doelstellingen of doelen hebben voor de communicatie. Met het oog op dit project zijn de doelen:

  • Sensoren uitlezen
  • De status van het apparaat lezen
  • Apparaatstatus instellen

Laten we beginnen met het definiëren van het protocol. Protocol definieert regels om via de bus te communiceren. Protocol is niets meer dan een bytereeks.

Ik heb een protocol gedefinieerd voor het verzenden en ontvangen van bytes. Het verzenden van bytes is vast op drie, terwijl het ontvangen van een byte-array veertien bytes is.

Raadpleeg de volgende schema's om het protocol te begrijpen dat voor dit project is gedefinieerd ('X' staat voor willekeurige waarde of '0', deze wordt genegeerd tijdens de communicatie):

Klasse met de naam 'I2C_Helper' bevat de implementatie van het protocol in het Universal app-project van PRi2. Deze klasse is beschikbaar in Universal Windows Project. Om het te openen:Ga naar Solution Explorer> Bibliotheek> Communicatiemap. Aan de Arduino-kant is het gemakkelijk om de I2C-bibliotheek te begrijpen.

Nu hebben we een goed communicatieschema gedefinieerd dat de status en waarden van sensoren en apparaten kan geven en ook toegang biedt tot het instellen van de apparaatstatus.

Klassenstructuur (hoe Raspberry Pi 2 objecten onderhoudt)

Zoals eerst besproken, beschouwde dit project het hele huis. Thuis bestaat uit meerdere kamers en kamer bestaat uit meerdere apparaten. Dus de OOP-structuur van een dergelijke configuratie wordt hieronder weergegeven:

Primaire klasse "Thuis" bestaat uit meerdere kamerobjecten als generieke kamerlijst (Lijst). Home-klasse biedt een statische methode om home-objecten op de Pi te laden en op te slaan om ze later te gebruiken.

Kamer bestaat uit apparaten als een generieke lijst met apparaten (List) en sensorstructuur om alle sensoren in één te kapselen.

Het apparaat bevat details ervan en functies om ze in en uit te schakelen met behulp van protocolmodus - 2. Omgevingslicht, passieve IR en temperatuurklasse bieden toegang tot de omgevingsgegevens van de kamer. Ruimteobject houdt sensorgegevens bij en ververs ze periodiek met protocolmodus - 0.

Gebruikersinterface

Elke applicatie moet gebruiksvriendelijk zijn. Om een ​​gebruiksvriendelijke applicatie te maken, begin met wire-frame. Stel dat u uw eigen applicatie gaat gebruiken en ontdek wat de belangrijkste doelstellingen zijn en hoe u deze zo kunt integreren dat ze voor de eindgebruiker zo gemakkelijk mogelijk zijn.

In het scenario van deze toepassing zijn onze belangrijkste doelstellingen:

  • Kamerbeheer
  • Apparaatbeheer
  • Externe diensten zoals GSM-communicatie, internetcommunicatie, enz.

Om dit te doen, heb ik het probleem opgesplitst in:

  • Startpagina:biedt basisinformatie over de apparaatstatus, datum-tijd en vergrendeling
  • Favoriete apparaten:directe toegang tot favoriete apparaten
  • Kamerpagina:biedt toegang tot geconfigureerde kamers en hun apparaten
  • Gemeenschappelijke waterapparatuur:waterpomp en geiser
  • Instellingen/configuratie:biedt beheer van kamers en hun apparaten

Draadframe:

Op basis van het draadframe heb ik een gebruikersinterface ontwikkeld die hierna wordt getoond. U kunt de volledige broncode downloaden. De link naar de download vindt u aan het einde van het artikel.

Heb dus al een gebruikersinterface ontwikkeld. Ik hoop dat u het kunt aanpassen aan uw behoeften. Voel je vrij om commentaar te geven voor de hulp.

Hoe te configureren?

Ik heb geprobeerd deze software zo eenvoudig mogelijk te maken. Met een kleine configuratie kunt u apparaten direct bedienen met deze Raspberry Pi 2. De stapsgewijze configuratie wordt hieronder weergegeven:

Hoe bedien ik de waterpomp en geiser met deze app?

U kunt de waterpomp en geiser op dezelfde manier bevestigen als het apparaat. Maar u kunt de waterpomp of geiser niet rechtstreeks op het relaisbord aansluiten om ze van stroom te voorzien. Het zal zowel de relaiskaart als gevaarlijk opblazen.

Om de waterpomp of geiser te bedienen, sluit u de waterpomp of geiser aan op de contactor en sluit u de spoel van de contactor aan op de relaiskaart. Dus nu, wanneer u het apparaat bedient, activeert het relais de spoel van de contactor en dus start/stopt de pomp of geiser. Voordat u een contactor koopt, moet u ervoor zorgen dat de classificatie van de spoel en de contactor goed zijn. Magneetschakelaars zijn verkrijgbaar in zoveel verschillende varianten. Controleer het dus met de beoordeling van uw waterpomp. Het is raadzaam om een ​​contactor met een iets hogere classificatie aan te schaffen dan de classificatie van uw waterpomp.

Hoe implementeer ik deze oplossing op Raspberry Pi 2?

U kunt deze link gebruiken om het implementatieproces te begrijpen.

Hoe registreer ik deze app als opstart-app?

Veel hobbyisten willen dat hun toepassing direct start nadat de Raspberry Pi 2 is opgestart. Lees hiervoor mijn artikel: Windows 10 IoT Core:Opstartapp instellen

Bekende problemen

Arduino opstarten

Wanneer Arduio opstart, flikkert het D13-pin. Het is goed om geen relaispin op D13 aan te sluiten, want wanneer Arduino opstart of opnieuw opstart, zal D13 één keer flikkeren en als een apparaat dat is aangesloten op Relay (aangestuurd via D13) ook flikkert.

Oplossing: Er zijn twee opties:ten eerste, gewoon niet echt verbinden met D13. De tweede is een beetje ingewikkeld. Je kunt Aruino's OptiBoot-firmware herschrijven die D13 niet gebruikt tijdens het opstarten en die bootloader op Arduino branden.

Klokprobleem

Raspberry Pi 2 heeft geen ingebouwde Real Time Clock-chip. Het is dus niet mogelijk om de tijd bij te houden na een stroomstoring of een nieuwe start. Er moet dus een externe RTC worden aangesloten en geprogrammeerd om de datum en tijd te behouden.

Oplossing :NTP kan worden gebruikt, maar heeft een internetverbinding nodig of zelfs Arduino kan RTC- en Raspberry Pi-verzoeken voor de datum en tijd bij het opstarten afhandelen. Het is ook goed om externe RTC rechtstreeks met RPi 2 aan te sluiten.

Foutopsporingsprobleem

Ik had veel problemen gehad tijdens het ontwikkelen van Universal App in C#. Universele app is superset van WinRT en dus moest er zoveel asynchrone bewerking worden uitgevoerd. Als er een fout optreedt in de asynchrone werking, wordt het lastig om op te lossen. Wanneer er een uitzondering of fout optrad, kreeg ik meestal het volgende scherm te zien:

Geen enkele aanwijzing voor de foutgevoelige regel, geen programmeervriendelijk bericht, niets. Ik moet zoveel breekpunten plaatsen om de oorzaak van de fout te achterhalen. Bij het debuggen wordt de universele app soms gewoon afgesloten zonder voorafgaande kennisgeving en plotseling wordt mijn kijkvenster onbruikbaar. De oorzaak van het gedrag wordt beschreven op deze link.

Oplossing :Plaats het breekpunt vóór de verwachte foutgevoelige lijn.

Kortom, op dit moment (terwijl dit artikel werd gepubliceerd) is de universele app geweldig, maar ontbreekt het aan foutopsporingsfuncties zoals conventionele Windows-applicaties.

Toekomst

Er is geen beperking als het gaat om functies, nieuwe ideeën of zelfs om bestaande beperkingen te overwinnen. Maar het is niet haalbaar om elke functie in één keer toe te voegen. In deze release laat dit artikel je de echte kracht van Raspberry Pi 2 en Windows IoT begrijpen. Windows Universal XAML is een geweldig GUI-framework voor Windows 10 IoT en Raspberry Pi 2 heeft een goede grafische processor aan boord. Door deze twee te combineren, kan een buitengewoon ogende GUI-oplossing worden gecreëerd. Bovendien heeft Raspberry Pi 2 een 900 MHz quad-core CPU, wat best geweldig is voor multi-threaded (in UWP, Task) oplossingen. Dit is het basis- tot intermediaire project voor diegenen die de grondbeginselen van embedded en softwaresystemen willen leren (dwz I2C-buscommunicatie, het bedienen van apparaten, aangepast protocolontwerp, OOP-ontwerp voor real-world applicatie en wire-frame).

In de toekomst kunnen we de mogelijkheid toevoegen om via externe apparaten te communiceren met behulp van radiofrequentie of infrarood in plaats van de I2C-bus. Webbeheerportal met Azure kan worden geïntegreerd voor mobiele apparaten. Verder zal de echte automatisering worden geïntegreerd, zoals op gebeurtenissen gebaseerde bediening, getimede werking met RTC-chip. Zet bijvoorbeeld de verlichting in de achtertuin aan om 19:00 uur. en zet ze weer uit om 22:00 uur; een goed voorbeeld voor op evenementen gebaseerd is om de tuinverlichting aan te doen wanneer de intensiteit van het omgevingslicht onder de specifieke intensiteit daalt, enzovoort. Er is dus geen beperking voor dit nieuwe Windows 10 IoT Core-platform voor Raspberry Pi 2.

Veel succes en wees veilig.

Voel je vrij om hulp of vragen te stellen.

Code

  • Arduino-schets
Arduino SketchC/C++
/* Arduino Sketch v0.4 Deze schets is geschreven voor "Home Automation using Raspberry Pi 2 and Window 10 IoT" Raadpleeg deze link:https://www.hackster.io/AnuragVasanwala/home-automation Deze schets is getest alleen op Atmega328p. Deze schets bereidt een Arduino-apparaat voor als slave-apparaat op de I2C-bus die wordt bediend door Raspberry Pi 2 met Windows 10 IoT Core. Doelstellingen:+ Periodiek sensorgegevens verzamelen (Functie:lus) + OnRecevive, 3-bytes modusinstructie verzamelen en op basis daarvan een bewerking uitvoeren. (Functie:ReceiveData) + OnRequest, stuur een responsarray van 14 bytes op basis van de geselecteerde modus door OnReceive. (Functie:SendData) Deze schets wordt geleverd zoals deze is zonder enige GARANTIE. U kunt het gebruiken voor zowel persoonlijk als commercieel gebruik. Ik ben niet aansprakelijk voor verlies van gegevens of verwondingen veroorzaakt door deze schets.*/#include  #define _DEBUG_/* Arduino's I2C Slave Address */#define SLAVE_ADDRESS 0x40/* PIN-VERKLARING */int Pin_AmbientLight_LDR =A0;int Pin_PassiveIR =2;int Pin_Temperature =A1;/* Globale variabele */volatile short Value_AmbientLight_LDR, Value_Temperature;vluchtige bool Value_PassiveIR;/* Protocolvariabele */byte-modus, pin, waarde;byte Response[14];void setup() {// Initialiseer pinnen pinMode (Pin_AmbientLight_LDR, INPUT); pinMode (Pin_PassiveIR, INPUT); pinMode (Pin_Temperatuur, INPUT); pinMode (0, UITGANG); pinMode (1, UITGANG); pinMode (3, UITGANG); pinMode (4, UITGANG); pinMode (5, UITGANG); pinMode (6, UITGANG); pinMode (7, UITGANG); pinMode (8, UITGANG); pinMode(9, UITGANG); pinMode (10, UITGANG); pinMode (11, UITGANG); pinMode (12, UITGANG); pinMode(13, UITGANG); pinMode (A2, UITGANG); pinMode(A3, OUTPUT);#ifdef _DEBUG_ Serial.begin(9600);#endif // Initialiseer I2C Slave op adres 'SLAVE_ADDRESS' Wire.begin(SLAVE_ADDRESS); Wire.onRequest (SendData); Wire.onReceive(ReceiveData);}void loop(){ // Read LDR // Arduino ondersteunt 10-bit Analog Read. // Dus we moeten het converteren naar 8-bit. Value_AmbientLight_LDR =analogRead (Pin_AmbientLight_LDR); Value_AmbientLight_LDR =kaart (Value_AmbientLight_LDR, 0, 1023, 0, 255); // Lees PassiveIR-waarde Value_PassiveIR =(digitalRead (Pin_PassiveIR) ==HOOG)? waar onwaar; // Lees temperatuursensor en zet spanning om in Celsius Value_Temperature =(short) ((float) (analogRead (Pin_Temperature) * 0.48828125)); // Wacht op een vertraging van 100 ms (100);}// Terugbellen voor I2C Received Datavoid ReceiveData (int byteCount) { // Lees de eerste byte, wat Protocolmodusmodus is =Wire.read (); // Lees de tweede byte die Pin is. Alleen geldig voor modus 2 Pin =Wire.read(); // Lees de derde byte die Pin-Value is. Alleen geldig voor modus 2 Waarde =Wire.read(); // Signaal gespecificeerde pin als Mode 2 wordt ontvangen if (Mode ==2) {digitalWrite (Pin, Value); }#ifdef _DEBUG_ Serial.print(Modus); Serieel.print(" "); Seriële.afdruk (pin); Serieel.print(" "); Serial.println(Value);#endif}void SendData(){ switch (Mode) { case 0:// Mode:Read Sensor Response [0] =(byte)Value_AmbientLight_LDR; // Value_PassiveIR is boolean, zodat we het moeten converteren naar byte Response [1] =(byte)((Value_PassiveIR ==true) ? 1 :0); // Response[2] byte is Sign byte voor temperatuur // 0 - -ve Temperature // 1 - +ve Temperature Response [2] =(byte)((Value_Temperature <0) ? 0 :1); Serial.println (Waarde_Temperatuur); // -ve Temperatuur kan niet in byte worden verzonden. Zet het om in +ve equivalent Response[3] =(byte)((Value_Temperature <0) ? (Value_Temperature*(-1)) :Value_Temperature); pauze; geval 1:// Mode:Read Devices State Response [0] =(digitalRead (0) ==HOOG)? 1 :0; Reactie[1] =(digitalRead(1) ==HOOG) ? 1 :0; Reactie [2] =(digitalRead (3) ==HOOG) ? 1 :0; Reactie[3] =(digitalRead(4) ==HOOG) ? 1 :0; Reactie[4] =(digitalRead(5) ==HOOG) ? 1 :0; Reactie[5] =(digitalRead(6) ==HOOG) ? 1 :0; Reactie[6] =(digitalRead(7) ==HOOG) ? 1 :0; Reactie[7] =(digitalRead(8) ==HOOG) ? 1 :0; Reactie[8] =(digitalRead(9) ==HOOG) ? 1 :0; Reactie[9] =(digitalRead(10) ==HOOG) ? 1 :0; Reactie [10] =(digitalRead (11) ==HOOG) ? 1 :0; Reactie[11] =(digitalRead (12) ==HOOG) ? 1 :0; Reactie[12] =(digitalRead(A2) ==HOOG) ? 1 :0; Reactie[13] =(digitalRead(A3) ==HOOG) ? 1 :0; pauze; geval 2:// Modus:Set Device State Response [0] =(digitalRead (Pin) ==HIGH)? 1 :0; pauze; standaard:pauze; } // Reactie terugsturen Wire.write(Response, 14);}
Raspberry Pi 2 (Windows Headed App) Software
https://github.com/AnuragVasanwala/Home-Automation--RPi2-WinIoT-

Schema's

U kunt meerdere kamers toevoegen door individuele Arduino met een uniek I2C-slaveadres op de bus te bevestigen. Fritzing-bestand met volledig schema. Home%20Automation%20Schematic%20-%20Anurag%20S%20Vasanwala.fzz

Productieproces

  1. Python- en Raspberry Pi-temperatuursensor
  2. 433MHz Smart Home Controller met Sensorflare en een RaspberryPi
  3. Spraak- en sms-lichtsensor met Raspberry Pi en Twilio
  4. Bewaak je huistemperatuur met je Raspberry Pi
  5. RASPBERRY PI HOME AUTOMATION
  6. Windows 10 IoT Core op Raspberry Pi 2 – Adafruit-sensorgegevens
  7. Windows 10 IoT Core en SHT15
  8. Windows 10 IoT Core voor Raspberry Pi 3 Model B+
  9. SONBI ROBOT MENSELIJKE DETECTIE MET KINECT EN RASPBERRY PI
  10. IoT en domotica:wat brengt de toekomst?
  11. Automatisering en IoT in Supply Chain:wat nu?