Inhoudsopgave:

Een bewegingsdetectiesysteem bouwen met Arduino - Ajarnpa
Een bewegingsdetectiesysteem bouwen met Arduino - Ajarnpa

Video: Een bewegingsdetectiesysteem bouwen met Arduino - Ajarnpa

Video: Een bewegingsdetectiesysteem bouwen met Arduino - Ajarnpa
Video: Tutorial : Verkeerslicht met KAEDU STEM shield 2024, November
Anonim
Een bewegingsdetectiesysteem bouwen met Arduino
Een bewegingsdetectiesysteem bouwen met Arduino

Bouw een bewegings- en aanwezigheidsproductieteller met een Feather HUZZAH geprogrammeerd met Arduino en aangedreven door Ubidots.

Effectieve fysieke bewegings- en aanwezigheidsdetectie in Smart Homes en Smart Manufacturing kan zeer nuttig zijn in toepassingen variërend van Ambient Assisted Living (AAL)-oplossingen voor ouderen of een productietelsysteem dat een grotere MES voedt. Andere toepassingen voor bewegings- en aanwezigheidsdetectie omvatten, maar zijn niet beperkt tot:

  1. Deur- en poortautomatisering
  2. Parkeersensoren om vrije plekken aan te wijzen
  3. Tankniveaubewaking op afstand
  4. Slimme huizen en voorzieningen voor verlichting en beveiliging
  5. Eenheden detecteren en tellen in transportlijnen
  6. Markeringsdetectie op gedrukte materialen
  7. Vloeistofdetectie in kantelen van karton, plastic en papier
  8. Afstandsdetectie
  9. Tellers van mensen

Hoewel er veel toepassingen zijn voor aanwezigheid en beweging, zijn er evenveel sensoren om gegevens te verzamelen, zoals capacitieve, inductieve, foto-elektrische en ultrasone sensoren. Afhankelijk van de kosten, omgevingscondities en nauwkeurigheidseisen, moet men de best passende hardware selecteren voor een omgeving en applicatie-eisen.

Voor deze tutorial zullen we ons concentreren op het bouwen van een realtime productieteller; de applicatie telt elke unit die voorbij komt op een lopende band. We zullen de Arduino IDE gebruiken om een Feather HUZZAH ESP8266, een ultrasone sensor en Ubidots te programmeren om onze applicatie te ontwikkelen en ons IoT-dashboard weer te geven.

Stap 1: Vereisten

  1. Veer HUZZAH met ESP8266MB7389-100
  2. Ultrasoon sensor
  3. Arduino IDE 1.8.2 of hoger
  4. Ubidots-account -of-STEM-licentie

Stap 2: Instellen

  • I Hardware-installatie
  • II. Firmware-instellingen
  • III. Ubidots Application Development (gebeurtenissen, variabelen en dashboards)

Stap 3: Hardware-installatie

apparatuur installatie
apparatuur installatie
apparatuur installatie
apparatuur installatie

De ultrasone sensor MB7389-100 is een goedkope optie voor industriële toepassingen met een breed bereik en een laag stroomverbruik in uitdagende weersomstandigheden dankzij de IPv67-classificatie.

Om te beginnen, spiegelt u het onderstaande diagram om de ultrasone sensor aan de Feather HUZZAH ESP8266 te bevestigen.

OPMERKING: De sensormeting kan analoog of PWM zijn; hieronder gaan we de setup voor de PWM-uitlezing uitleggen, voor meer informatie zie de bovenstaande voorbeelden.

[Optioneel] plaats de microcontroller en de sensoren in de IP67-behuizing om ze te beschermen tegen stof, water en andere bedreigende omgevingsfactoren. De standaardbehuizing lijkt op die op de bovenstaande foto's.

Stap 4: Firmware-installatie

Firmware-instellingen
Firmware-instellingen
Firmware-instellingen
Firmware-instellingen

Eerst moet je de Feather Huzzah in de Arduino IDE installeren en de code compileren. Vergeet niet om deze instelling te verifiëren door een eenvoudige knippertest uit te voeren. Raadpleeg deze handige installatiehandleiding voor hardware voor meer informatie over het aansluiten van uw Feather-apparaat.

Om sensorgegevens naar het Ubidots IoT Development Platform te sturen, kopieer en plak je de onderstaande code in de Arduino IDE. Vergeet niet om de Wi-Fi-netwerknaam, het wachtwoord en uw Ubidots-accounttoken toe te wijzen waar aangegeven in de code.

/*********************************** Bibliotheken inbegrepen *************** ****************/#erbij betrekken /****************************** ** Constanten en objecten ******************************//* Ubidots */const char* SSID_NAME = "xxxxxxxx"; // Zet hier uw SSID nameconst char* SSID_PASS = "xxxxxxxx"; // Zet hier uw wachtwoordconst char* TOKEN = "Assig_your_ubidots_token"; // Zet hier je TOKENconst char* DEVICE_LABEL = "motion-control"; // Uw apparaat labelconst char* VARIABLE_LABEL = "afstand"; // Uw variabele labelconst char* USER_AGENT = "ESP8266";const char* VERSION = "1.0";const char* HTTPSERVER = "industrial.api.ubidots.com";// Ubidots Zakelijke gebruikers//const char* HTTPSERVER = " dingen.ubidots.com"; // Ubidots Educatieve gebruikersint HTTPPORT = 80;/* Ultrasone sensor */const int pwPin1 = 5; // De PWM-pin waarop de sensor is aangeslotenWiFiClient clientUbi;/*********************************** Hulpfuncties *** **************************//** Haalt de lengte van de body op @arg variabele de body van het type char @return dataLen de lengte van de variabele*/int dataLen(char* variabele) { uint8_t dataLen = 0; for (int i = 0; i distance / 25,4 */ float distance = pulseIn(pwPin1, HIGH); sendToUbidots(DEVICE_LABEL, VARIABLE_LABEL, distance); delay(1000);}void sendToUbidots(const char* device_label, const char* variable_label, float sensor_value) {char* body = (char *) malloc(sizeof(char) * 150); char* data = (char *) malloc(sizeof(char) * 300); /* Ruimte om waarden op te slaan om te verzenden * / char str_val[10]; /*---- Transformeert de waarden van de sensoren naar char type -----*/ /* 4 is minimale breedte, 2 is precisie; float-waarde wordt gekopieerd naar str_val*/ dtostrf(sensor_value, 4, 2, str_val); /* Bouwt de body die moet worden verzonden naar het verzoek*/ sprintf(body, "{"%s\":%s}", variable_label, str_val); /* Bouwt de HTTP verzoek om POST */ sprintf(data, "POST /api/v1.6/devices/%s", device_label); sprintf(data, "%s HTTP/1.1\r\n", data); sprintf(data, "%sHost: things.ubidots.com\r\n", data); sprintf(data, "%sUser-Agent: %s/%s\r\n", data, USER_AGENT, VERSION); sprintf(data, "%sX-Auth-Token: %s\r\n", data, TOKEN); sprint f(data, "%sVerbinding: close\r\n", data); sprintf(data, "%sContent-Type: application/json\r\n", data); sprintf(data, "%sContent-Length: %d\r\n\r\n", data, dataLen(body)); sprintf(data, "%s%s\r\n\r\n", data, body); /* Initiële verbinding */ clientUbi.connect (HTTPSERVER, HTTPPORT); /* Controleer de clientverbinding */ if (clientUbi.connect(HTTPSERVER, HTTPPORT)) { Serial.println(F ("Posting your variables: ")); Serial.println(gegevens); /* Stuur het HTTP-verzoek */ clientUbi.print(data); } /* Terwijl de client beschikbaar is, leest u het antwoord van de server */ while (clientUbi.available()) { char c = clientUbi.read(); Serieel.schrijven(c); } /* Vrij geheugen */ vrij(gegevens); gratis lichaam); /* Stop de client */ clientUbi.stop();}

ProTip: u kunt controleren of uw apparaat correct is aangesloten door de seriële monitor in de Arduino IDE te openen.

U kunt controleren of een apparaat is gemaakt in uw Ubidots-backend door het te bekijken in uw account Apparaatbeheer -> Apparaten.

Door op uw apparaat te klikken, vindt u een variabele genaamd "afstand" waar de meetwaarden van de sensor worden opgeslagen. Deze naam is toegewezen in de code die u zojuist in de Arduino IDE hebt geplakt. Als u uw automatische variabelen wilt aanpassen, kunt u dit doen door de apparaatkaart te bewerken of door een bijgewerkte code te laten knipperen met de juiste variabele nomenclatuur voor uw toepassing.

Nu de Feather HUZZAH ESP8266 is aangesloten en gegevens rapporteert aan Ubidots, is het nu tijd om de applicatie te bouwen met behulp van de zorgvuldig ontworpen codevrije applicatieconfiguratie van Ubidot.

Stap 5: Ubidots-toepassingsontwikkeling

Ubidots-toepassingsontwikkeling
Ubidots-toepassingsontwikkeling
Ubidots-toepassingsontwikkeling
Ubidots-toepassingsontwikkeling
Ubidots-toepassingsontwikkeling
Ubidots-toepassingsontwikkeling

Configuratie Ubidots-gebeurtenis

De huidige metingen die we naar Ubidots sturen, zijn afstandsinvoer. Om deze meetwaarden te vertalen naar de gewenste uitvoer die we willen - getelde eenheden - moeten we een gebeurtenis maken door deze stappen te volgen:

  1. Maak in het huidige apparaat "motion-control" een nieuwe standaardvariabele genaamd "boxen", die een 1 krijgt elke keer dat een nieuwe eenheid wordt geteld.
  2. Ga naar Apparaatbeheer -> Gebeurtenissen en klik op het blauwe pluspictogram in de rechterbovenhoek van de pagina om een nieuwe gebeurtenis toe te voegen.
  3. Configureer uw evenement beginnend met "Als triggers":
  • Selecteer een variabele: "afstand"
  • Waarde: waarde (standaard)
  • Is kleiner dan of gelijk aan [de maximaal verwachte afstand} tussen de sensor en de passerende dozen* onze applicatie vraagt om 500 mm
  • Voor 0 minuten
  • Opslaan

4. Zodra de triggers zijn geconfigureerd volgens de specificaties van uw toepassing, klikt u op het oranje "plus"-pictogram in de rechterbovenhoek om een voorwaardelijke actie toe te voegen.

5. Selecteer "Variabele instellen" als actie.

6. Kies vervolgens de eerder gemaakte standaardvariabele "boxen" en waarde "1".

7. Sla wijzigingen op. Als de gebeurtenis correct is ingesteld, stuurt deze een "1" elke keer dat de afstand tussen de sensor en de eenheid langer is dan een aangegeven drempel, wat suggereert dat er geen object in de buurt is - en zou een nieuwe eenheid moeten tellen die net voorbij is gegaan.

Op de Feather-specifieke apparaatkaart vindt u de variabele "boxen" waar een "1" wordt verzonden wanneer de aanwezigheid van een eenheid wordt gedetecteerd.

Dit prototype is vooral handig voor industriële transportbanden en het tellen van eenheden. Dit prototype kan worden aangepast aan verschillende omgevingen of hardware, eenvoudig in uw codering of uw toepassingsontwikkeling.

8. Visualiseer het aantal gedetecteerde eenheden (of het aantal keren dat een object werd gedetecteerd) Nu gaan we met behulp van de variabele "boxes" een nieuwe variabele venster maken om het totale aantal metingen op te tellen dat is ontvangen van de variabele "boxes" in een gedefinieerde spam (minuten, uren, dagen, weken, enz.). Volg deze eenvoudige stappen om deze ontwikkeling uit te voeren:

Wijs de volgende inloggegevens toe aan uw nieuwe rolling window-variabele:

Selecteer een apparaat: motion-control (of de naam van het apparaat waarnaar je je gegevens verzendt)

Selecteer een variabele: dozen

Bereken de: som

Elk: "1" uur (of volgens uw aanvraagverzoeken)

Wijs nu een naam toe aan de nieuwe variabele die het aantal dozen (of bewegingen) aangeeft dat in een uur is geteld, net als "dozen/uur" of "eenheden/uren".

Stap 6: Dashboardconfiguraties

Dashboardconfiguraties
Dashboardconfiguraties

Maak ten slotte een dashboard om het aantal gedetecteerde eenheden weer te geven.

Ga naar Apparaatbeheer -> Dashboards en voeg een nieuwe widget toe. Deze widget toont het aantal dozen dat vandaag is geteld, uitgesplitst per uur.

Wijs de volgende gegevens toe aan uw nieuwe widget om uw telling te visualiseren.

Hoe zou u uw gegevens willen zien?: Grafiek

Selecteer een type widget: lijndiagram

Voeg een apparaat toe: motion-control

Voeg een variabele toe: vakjes/uur

Finish. En met deze laatste ontwikkeling van het dashboard - uw aanvraag is voltooid en u heeft nu een efficiënt en effectief bewegings- en aanwezigheidsdetectiesysteem. Hier is een laatste blik op onze resultaten.

Aanbevolen: