วงจร

วิธีการสร้างระบบตรวจจับความเคลื่อนไหวด้วย Arduino: 7 ขั้นตอน

A day with Scandale - Harmonie Collection - Spring / Summer 2013

A day with Scandale - Harmonie Collection - Spring / Summer 2013

สารบัญ:

Anonim

สร้างเคาน์เตอร์การเคลื่อนไหวและการแสดงตนโดยใช้ Feather HUZZAH ซึ่งตั้งโปรแกรมไว้กับ Arduino และขับเคลื่อนโดย Ubidots

การตรวจจับการเคลื่อนไหวและการปรากฏตัวทางกายภาพที่มีประสิทธิภาพในสมาร์ทโฮมและการผลิตสมาร์ทนั้นมีประโยชน์อย่างมากในการใช้งานตั้งแต่โซลูชั่น Ambient Assisted Living (AAL) ของผู้สูงอายุหรือระบบการนับจำนวนการผลิต แอปพลิเคชันอื่น ๆ สำหรับตรวจจับการเคลื่อนไหวและการแสดงตนรวมถึง แต่ไม่ จำกัด เฉพาะ:

  1. ประตูอัตโนมัติและประตู
  2. เซ็นเซอร์ที่จอดรถเพื่อระบุจุดฟรี
  3. การตรวจสอบระดับถังระยะไกล
  4. บ้านอัจฉริยะและสิ่งอำนวยความสะดวกสำหรับให้แสงสว่างและความปลอดภัย
  5. หน่วยตรวจจับและตรวจนับในสายลำเลียง
  6. การตรวจจับเครื่องหมายบนวัสดุที่พิมพ์
  7. การตรวจจับของเหลวภายในกระดาษแข็งพลาสติกและกระดาษเอียง
  8. การตรวจจับระยะทาง
  9. คนที่เคาน์เตอร์

ในขณะที่มีแอปพลิเคชั่นมากมายสำหรับการแสดงตนและการเคลื่อนไหวมีเซ็นเซอร์จำนวนมากพอ ๆ กับการรวบรวมข้อมูลเช่นตัวเก็บประจุตัวเหนี่ยวนำโฟโตอิเล็กทริคและอัลตราโซนิค ขึ้นอยู่กับราคาสภาพแวดล้อมและข้อกำหนดด้านความถูกต้องเราควรเลือกฮาร์ดแวร์ที่เหมาะสมที่สุดสำหรับสภาพแวดล้อมและข้อกำหนดของแอปพลิเคชัน

สำหรับบทช่วยสอนนี้เราจะเน้นสร้างเคาน์เตอร์แบบเรียลไทม์ แอปพลิเคชันจะนับทุกหน่วยที่ผ่านไปบนสายพานลำเลียง เราจะใช้ Arduino IDE เพื่อตั้งโปรแกรม Feather HUZZAH ESP8266 เซ็นเซอร์อัลตราโซนิคและ Ubidots เพื่อพัฒนาแอปพลิเคชั่นของเราและแสดงแดชบอร์ด IoT ของเรา

วัสดุ:

ขั้นตอนที่ 1: ข้อกำหนด

  1. Feather HUZZAH ด้วย ESP8266MB7389-100
  2. เซ็นเซอร์อัลตราโซนิก
  3. Arduino IDE 1.8.2 หรือสูงกว่า
  4. บัญชี Ubidots หรือใบอนุญาตทางการศึกษา

ขั้นตอนที่ 2: ตั้งค่า

  • ฉันติดตั้งฮาร์ดแวร์
  • ครั้งที่สอง การตั้งค่าเฟิร์มแวร์
  • III การพัฒนาโปรแกรมประยุกต์ของ Ubidots (เหตุการณ์ตัวแปรและแดชบอร์ด)

ขั้นตอนที่ 3: การตั้งค่าฮาร์ดแวร์

อุลตร้าโซนิคเซนเซอร์ MB7389-100 เป็นตัวเลือกต้นทุนต่ำสำหรับการใช้งานในอุตสาหกรรมที่มีความต้องการพลังงานที่หลากหลายและใช้พลังงานต่ำในสภาพอากาศที่ท้าทายด้วยคะแนน IPv67

ในการเริ่มต้นให้ทำมิเรอร์แผนภาพด้านล่างเพื่อแนบเซ็นเซอร์อัลตราโซนิกกับ ขนนก HUZZAH ESP8266.

บันทึก: การอ่านเซ็นเซอร์สามารถใช้เป็นการอ่านแบบอะนาล็อกหรือ PWM ด้านล่างเราจะอธิบายการตั้งค่าสำหรับการอ่าน PWM สำหรับข้อมูลเพิ่มเติมโปรดดูตัวอย่างที่แสดงด้านบน

เลือก วางไมโครคอนโทรลเลอร์และเซ็นเซอร์ไว้ในเคส IP67 เพื่อป้องกันฝุ่นละอองน้ำและปัจจัยแวดล้อมอื่น ๆ ตัวเรือนมาตรฐานดูคล้ายกับที่แสดงในรูปภาพด้านบน

ขั้นตอนที่ 4: การตั้งค่าเฟิร์มแวร์

ก่อนอื่นคุณควรติดตั้ง Feather Huzzah ใน Arduino IDE และรวบรวมรหัส จำไว้ว่าให้ตรวจสอบการตั้งค่านี้โดยทำแบบทดสอบกะพริบง่าย สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่ออุปกรณ์ Feather ของคุณดูคู่มือการตั้งค่าฮาร์ดแวร์ที่มีประโยชน์นี้

ในการส่งข้อมูลเซ็นเซอร์ไปยังแพลตฟอร์มการพัฒนา Ubidots IoT ให้คัดลอกและวางรหัสด้านล่างลงใน Arduino IDE อย่าลืมกำหนดชื่อเครือข่าย Wi-Fi รหัสผ่านและบัญชี Ubidots Token ของคุณตามที่ระบุในรหัส

/ ******************************** รวมถึงห้องสมุด ***************** **************** / # include / ******************************** ค่าคงที่และวัตถุ ************** ***************** // // * Ubidots * / const char * SSID_NAME = "xxxxxxxx"; // ใส่ที่นี่ SSID nameconst ถ่าน * SSID_PASS = "xxxxxxxx"; // ใส่รหัสผ่านของคุณที่นี่ถ่าน * TOKEN = "Assig_your_ubidots_token"; // ใส่ TOKENconst char ของคุณที่นี่ * DEVICE_LABEL = "การควบคุมการเคลื่อนไหว"; // อุปกรณ์ของคุณ labelconst ถ่าน * VARIABLE_LABEL = "ระยะทาง"; // ตัวแปรของคุณ labelconst ถ่าน * USER_AGENT = "ESP8266"; const char * VERSION = "1.0"; const char * HTTPSERVER = "industrial.api.ubidots.com"; // Ubidots ผู้ใช้ทางธุรกิจ // const char * HTTPSERVER = " things.ubidots.com "; // Ubidots การศึกษา usersint HTTPport = 80; / * เซ็นเซอร์อัลตราโซนิก * / const int pwPin1 = 5; // พิน PWM ที่เชื่อมต่อเซ็นเซอร์ลูกค้า WiFiClientUbi; / ********************************** ฟังก์ชั่นที่คุ้นเคย *** ************************** // ** ได้รับความยาวของร่างกาย @ ตัวแปรตัวแปรร่างกายของประเภทถ่าน @ ข้อมูลย้อนกลับแล้ว ความยาวของตัวแปร * / int dataLen (ถ่าน * ตัวแปร) {uint8_t dataLen = 0; สำหรับ (int i = 0; i <= 250; i ++) {ถ้า (ตัวแปร i! = ' 0') {dataLen ++; } else {break; }} คืนค่า dataLen;} / ******************************** หน้าที่หลัก ********* ********************** / การตั้งค่าเป็นโมฆะ () {Serial.begin (115200); / * เชื่อมต่อกับ AP * / WiFi.begin (SSID_NAME, SSID_PASS); ในขณะที่ (WiFi.status ()! = WL_CONNECTED) {ล่าช้า (500); Serial.print ( ""); } pinMode (pwPin1, INPUT); WiFi.setAutoReconnect (จริง); Serial.println (F ("เชื่อมต่อ WiFi")); Serial.println (F ("ที่อยู่ IP:")); Serial.println (WiFi.localIP ());} void loop () {/ * การอ่านเซ็นเซอร์ถูกส่งคืนในหน่วยมิลลิเมตรหากคุณต้องการแปลง * เป็นนิ้วเพียงแค่สร้างตัวแปรที่ชี้ไปที่ -> distance / 25.4 * / ระยะทางลอย = pulseIn (pwPin1, สูง); sendToUbidots (DEVICE_LABEL, VARIABLE_LABEL, ระยะทาง); ล่าช้า (1,000);} เป็นโมฆะ sendToUbidots (const char * device_label, const char * ตัวแปร _label, float sensor_value) {ถ่าน * ร่างกาย = (ถ่าน *) malloc (ขนาดของ (ถ่าน) * 150); ถ่าน * data = (ถ่าน *) malloc (ขนาดของ (ถ่าน) * 300); / * Space เพื่อเก็บค่าที่จะส่ง * / char str_val 10; / * ---- แปลงค่าของเซ็นเซอร์ให้เป็นประเภทถ่าน ----- * / / * 4 คือความกว้างขั้นต่ำ 2 มีความแม่นยำ; ค่าทศนิยมถูกคัดลอกไปยัง str_val * / dtostrf (sensor_value, 4, 2, str_val); / * สร้างเนื้อความที่จะส่งลงในคำขอ * / sprintf (เนื้อความ, "{"% s ":% s}", variable_label, str_val); / * สร้างคำขอ HTTP ให้เป็น POST * / sprintf (ข้อมูล, "POST /api/v1.6/devices/%s", device_label) sprintf (ข้อมูล, "% s HTTP / 1.1 r n", ข้อมูล); sprintf (ข้อมูล "% sHost: things.ubidots.com r n" ข้อมูล); sprintf (ข้อมูล "% sUser-Agent:% s /% s r n", ข้อมูล, USER_AGENT, รุ่น) sprintf (ข้อมูล, "% sX-Auth-Token:% s r n", ข้อมูล, โทเค็น); sprintf (ข้อมูล, "% sConnection: ปิด r n", ข้อมูล); sprintf (ข้อมูล, "% sContent-Type: application / json r n", ข้อมูล); sprintf (ข้อมูล, "% sContent-Length:% d r n r n", ข้อมูล, dataLen (เนื้อหา)); sprintf (ข้อมูล "% s% s r n r n" ข้อมูลร่างกาย); / * การเชื่อมต่อเริ่มต้น * / clientUbi.connect (HTTPSERVER, HTTPPORT); / * ตรวจสอบการเชื่อมต่อลูกค้า * / if (clientUbi.connect (HTTPSERVER, HTTPPORT)) {Serial.println (F ("โพสต์ตัวแปรของคุณ:")); Serial.println (ข้อมูล); / * ส่งคำขอ HTTP * / clientUbi.print (ข้อมูล); } / * ในขณะที่ลูกค้าสามารถอ่านการตอบสนองของเซิร์ฟเวอร์ * / while (clientUbi.available ()) {char c = clientUbi.read (); Serial.write (c); } / * หน่วยความจำว่าง * / ฟรี (ข้อมูล); ฟรี (ร่างกาย); / * หยุดไคลเอนต์ * / clientUbi.stop ();}

protip: คุณสามารถตรวจสอบว่าอุปกรณ์ของคุณเชื่อมต่ออย่างถูกต้องหรือไม่โดยการเปิดมอนิเตอร์อนุกรมใน Arduino IDE

คุณสามารถตรวจสอบว่าอุปกรณ์ถูกสร้างในแบ็กเอนด์ Ubidots ของคุณได้ด้วยการดูในบัญชีการจัดการอุปกรณ์ -> อุปกรณ์

โดยการคลิกอุปกรณ์ของคุณคุณจะพบตัวแปรที่เรียกว่า "ระยะทาง" ที่เก็บค่าการอ่านเซ็นเซอร์ ชื่อนี้ถูกกำหนดในรหัสที่คุณเพิ่งวางใน Arduino IDE หากคุณต้องการปรับตัวแปรอัตโนมัติของคุณโปรดทำโดยการแก้ไขการ์ดอุปกรณ์หรือโดยการกะพริบรหัสที่อัปเดตพร้อมกับระบบการตั้งชื่อตัวแปรที่ถูกต้องสำหรับแอปพลิเคชันของคุณ

ด้วย Feather HUZZAH ESP8266 ที่เชื่อมต่อและรายงานข้อมูลไปยัง Ubidots ตอนนี้ได้เวลาสร้างแอพพลิเคชั่นโดยใช้ Ubidots ที่ออกแบบมาอย่างดีโดยไม่ใช้โค้ด

ขั้นตอนที่ 5: การพัฒนาแอพพลิเคชันของ Ubidots

การกำหนดค่าเหตุการณ์ Ubidots

การอ่านค่าปัจจุบันที่เราส่งไปยัง Ubidots คืออินพุตระยะทาง สำหรับการแปลการอ่านเหล่านี้ไปยังเอาต์พุตที่ต้องการที่เราต้องการ - นับหน่วย - เราควรสร้างเหตุการณ์โดยทำตามขั้นตอนเหล่านี้:

  1. ภายในอุปกรณ์ปัจจุบัน "การควบคุมการเคลื่อนไหว" สร้างตัวแปรเริ่มต้นใหม่ที่เรียกว่า "กล่อง" ซึ่งจะได้รับ 1 ทุกครั้งที่มีการนับหน่วยใหม่
  2. ไปที่ การจัดการอุปกรณ์ -> กิจกรรมและคลิกไอคอนเครื่องหมายบวกสีน้ำเงินที่มุมบนขวาของหน้าเพื่อเพิ่มกิจกรรมใหม่
  3. กำหนดค่ากิจกรรมของคุณที่เริ่มต้นด้วย "หากทริกเกอร์":

  • เลือกตัวแปร: "ระยะทาง"
  • ราคา: ค่า (ค่าเริ่มต้น)
  • น้อยกว่าหรือเท่ากับ ระยะทางสูงสุดที่คาดหวัง} ระหว่างเซ็นเซอร์และกล่องที่ผ่าน * แอปพลิเคชันของเราเรียกใช้ 500 มม
  • สำหรับ 0 นาที
  • บันทึก

4. เมื่อทริกเกอร์ได้รับการกำหนดค่าตามข้อกำหนดของแอปพลิเคชันของคุณให้คลิกไอคอน "บวก" สีส้มที่มุมบนขวาเพื่อเพิ่มการกระทำตามเงื่อนไข

5. เลือก“ ตั้งค่าตัวแปร” เป็นการกระทำ

6. ถัดไปเลือกตัวแปร "กล่อง" เริ่มต้นที่สร้างไว้ก่อนหน้าและค่า "1"

7. บันทึกการเปลี่ยนแปลง หากมีการตั้งค่าเหตุการณ์อย่างเหมาะสมจะส่ง "1" ทุกครั้งที่ระยะห่างระหว่างเซ็นเซอร์และหน่วยยาวเกินเกณฑ์ที่กำหนดซึ่งบ่งชี้ว่าไม่มีวัตถุใกล้ - และควรนับหน่วยใหม่ที่เพิ่งผ่านไปโดย .

ในการ์ดอุปกรณ์เฉพาะของเฟเธอร์คุณจะพบว่าตัวแปร "กล่อง" ที่มีการส่ง "1" เมื่อใดก็ตามที่รู้สึกถึงการมีอยู่ของหน่วย

มีประโยชน์อย่างยิ่งสำหรับสายพานอุตสาหกรรมและการนับหน่วยเครื่องต้นแบบนี้สามารถปรับแต่งให้เหมาะสมกับสภาพแวดล้อมหรือฮาร์ดแวร์ต่าง ๆ ในการเขียนโปรแกรมหรือการพัฒนาแอพพลิเคชั่นของคุณ

8. แสดงจำนวนหน่วยที่รับรู้ (หรือเวลาที่ตรวจพบวัตถุ)
ตอนนี้ใช้ตัวแปร "กล่อง" เราจะสร้างตัวแปรหน้าต่างกลิ้งใหม่เพื่อรวมจำนวนการอ่านทั้งหมดที่ได้รับจากตัวแปร "กล่อง" ในสแปมที่กำหนดไว้ (นาทีชั่วโมงวันสัปดาห์ ฯลฯ ) เมื่อต้องการดำเนินการพัฒนานี้ให้ทำตามขั้นตอนง่าย ๆ เหล่านี้:

กำหนดข้อมูลรับรองต่อไปนี้ให้กับตัวแปรหน้าต่างการหมุนใหม่ของคุณ

เลือกอุปกรณ์: การควบคุมการเคลื่อนไหว (หรือชื่อของอุปกรณ์ที่คุณส่งข้อมูลของคุณ)

เลือกตัวแปร: กล่อง

คำนวณ: รวม

ทุกคน: "1" ชั่วโมง (หรือตามคำขอของคุณ)

ตอนนี้กำหนดชื่อให้กับตัวแปรใหม่ที่ระบุจำนวนกล่อง (หรือการเคลื่อนไหว) นับเป็นชั่วโมงเช่นเดียวกับ "กล่อง / ชั่วโมง" หรือ "หน่วย / ชั่วโมง

ขั้นตอนที่ 6: การกำหนดค่าแผงควบคุม

สุดท้ายสร้างแดชบอร์ดเพื่อแสดงจำนวนหน่วยที่รับรู้

ไปที่การจัดการอุปกรณ์ -> แดชบอร์ดและเพิ่มวิดเจ็ตใหม่ วิดเจ็ตนี้จะแสดงจำนวนกล่องที่นับในวันนี้แยกตามชั่วโมง

กำหนดข้อมูลรับรองต่อไปนี้ให้กับวิดเจ็ตใหม่ของคุณเพื่อให้เห็นภาพการนับของคุณ

คุณต้องการดูข้อมูลของคุณอย่างไร: แผนภูมิ

เลือกประเภทของวิดเจ็ต: แผนภูมิเส้น

เพิ่มอุปกรณ์: การควบคุมการเคลื่อนไหว

เพิ่มตัวแปร: กล่อง / ชั่วโมง

เสร็จสิ้น. และด้วยการพัฒนาแดชบอร์ดขั้นสุดท้าย - แอปพลิเคชั่นของคุณเสร็จสมบูรณ์และตอนนี้คุณมีระบบตรวจจับการเคลื่อนไหวและการแสดงตนที่มีประสิทธิภาพและมีประสิทธิภาพ นี่คือภาพสุดท้ายของผลลัพธ์ของเรา

ขั้นตอนที่ 7: