สารบัญ:

Motion Sensor/ไฟควบคุมที่เคาน์เตอร์: 7 ขั้นตอน
Motion Sensor/ไฟควบคุมที่เคาน์เตอร์: 7 ขั้นตอน

วีดีโอ: Motion Sensor/ไฟควบคุมที่เคาน์เตอร์: 7 ขั้นตอน

วีดีโอ: Motion Sensor/ไฟควบคุมที่เคาน์เตอร์: 7 ขั้นตอน
วีดีโอ: Frontpoint Motion Sensor Installation 2024, กรกฎาคม
Anonim
Motion Sensor/ไฟควบคุมที่เคาน์เตอร์
Motion Sensor/ไฟควบคุมที่เคาน์เตอร์

โครงการนี้สร้างขึ้นเป็นโครงการสุดท้ายสำหรับหลักสูตรการออกแบบดิจิทัลที่ Cal Poly, San Luis Obispo (CPE 133)

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

อะไรคือแรงบันดาลใจของเรา ผู้คนมักลืมปิดไฟในวันหยุด และสิ้นเปลืองพลังงานโดยปล่อยทิ้งไว้ค้างคืน ในความเป็นจริง โครงการนี้จะประหยัดพลังงานไฟฟ้าเพราะ "ไฟวันหยุด" จะเปิดเมื่อมีคนอยู่ใกล้เท่านั้น จึงประหยัดพลังงานเมื่อไม่มีใครอยู่ใกล้ ยิ่งไปกว่านั้น เราต้องการออกแบบตัวจับเวลาเพื่อให้ไฟดับสนิทหลังจากเวลาที่กำหนด เพื่อให้แน่ใจว่าจะไม่เปิดขึ้นเนื่องจากตรวจพบการเคลื่อนไหวตอนตี 3 เป็นต้น

คุณจะใช้การออกแบบนี้ได้อย่างไร การออกแบบนี้สามารถนำไปใช้กับไฟทุกประเภท ไม่ว่าจะเป็นของตกแต่ง ใช้งานได้จริง หรือทั้งสองอย่าง ตัวอย่างเช่น หากคุณต้องการให้ไฟตั้งโต๊ะทำงานครั้งละ 6 ชั่วโมงเท่านั้น คุณจะต้องตั้งค่าตัวนับเป็น 21, 600 วินาที (6 ชั่วโมง x 3, 600 วินาที/ชั่วโมง) ในขณะที่ตัวนับกำลังเพิ่มขึ้นอย่างแข็งขัน เซ็นเซอร์ตรวจจับความเคลื่อนไหวจะควบคุมแสง ดังนั้น ทุกครั้งที่ปิดเครื่องในช่วงเวลานั้น คุณเพียงแค่ต้องโบกมือต่อหน้าเซ็นเซอร์ตรวจจับความเคลื่อนไหวแล้วเครื่องจะเปิดขึ้นอีกครั้ง หากคุณเผลอหลับที่โต๊ะทำงานและตื่นขึ้นในอีก 7 ชั่วโมงต่อมา การเคลื่อนไหวของคุณจะไม่เปิดขึ้น

ขั้นตอนที่ 1: ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น

ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น

ซอฟต์แวร์:

  • Vivado 2016.2 (หรือเวอร์ชันที่ใหม่กว่า) สามารถพบได้ที่นี่
  • Arduino IDE 1.8.3 (หรือเวอร์ชันที่ใหม่กว่า) สามารถพบได้ที่นี่

ฮาร์ดแวร์:

  • 1 พื้นฐาน 3 บอร์ด
  • 1 Arduino Uno
  • 2 เขียงหั่นขนม
  • 1 เซ็นเซอร์วัดระยะอัลตราโซนิก HC-SR04
  • 9 สายชาย-ชาย
  • 1 LED
  • 1 ตัวต้านทาน 100Ω

ขั้นตอนที่ 2: รหัส (Vivado)

รหัส (Vivado)
รหัส (Vivado)

เครื่องไฟไนต์สเตท (ดูแผนภาพสถานะด้านบน):

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

ชื่อไฟล์: LEDDES

เคาน์เตอร์:

ตัวนับช่วยให้เราสามารถจำกัดระยะเวลาระหว่างที่เซ็นเซอร์ตรวจจับความเคลื่อนไหวสามารถเปิดใช้งาน LED ได้ ค่าของมันถูกแสดงบนการแสดงผลเจ็ดเซกเมนต์ของ Basy 3 Board ผ่านซอร์สโค้ด (“sseg_dec”) เมื่อสวิตช์รีเซ็ตไม่ทำงาน (ค่า: '0') ตัวนับจะเริ่มเพิ่มขึ้นทุก ๆ วินาทีจาก 0 เป็น 30 เมื่อถึง 30 ค่าจะหยุดที่ตัวเลขนั้น มันจะไม่รีสตาร์ทจาก 0 จนกว่าสวิตช์รีเซ็ตจะถูกสลับเป็น '1' และกลับไปเป็น '1' หากการรีเซ็ตกลายเป็น '1' ในขณะที่ตัวนับทำงาน ตัวนับจะหยุดตามค่าที่ไปถึง เมื่อรีเซ็ตกลับไปเป็น '0, ' ตัวนับจะเริ่มต้นใหม่จาก 0 ถึง 30 การใช้งานนี้ยังต้องการการใช้สัญญาณนาฬิกาด้วย รหัสของมันแสดงไว้ด้านล่าง ("clk_div2")

ชื่อไฟล์: FinalCounter

ไฟล์ที่ให้มา:

จอแสดงผลเจ็ดส่วน:

รหัสนี้อนุญาตให้แสดงเจ็ดส่วนเพื่อแสดงค่าทศนิยม โมดูลย่อยหนึ่งทำหน้าที่เป็นตัวถอดรหัสระหว่างอินพุตไบนารี 8 บิตและทศนิยมแบบไบนารี 4 บิต อีกอันแบ่งสัญญาณนาฬิกาเพื่อรีเฟรชค่าในอัตราที่แน่นอน

ชื่อไฟล์: sseg_dec

สัญญาณนาฬิกา:

รหัสนี้อนุญาตให้ตัวนับเพิ่มขึ้นทีละ 1 วินาที มันแบ่งความถี่สัญญาณนาฬิกาอินพุตเป็นความถี่ที่ช้ากว่า เราปรับให้ช่วงเวลา 1 วินาทีโดยเปลี่ยนค่าคงที่ max_count: integer:= (3000000)” เป็น “constant max_count: integer:= (50000000)”

ชื่อไฟล์: clk_div2

ไฟล์ที่ให้มา: sseg_dec, clk_div2 *ไฟล์ต้นฉบับเหล่านี้จัดทำโดย Professor Bryan Mealy

ขั้นตอนที่ 3: ทำความเข้าใจว่าพวกเขามารวมกันได้อย่างไร (แผนผังของส่วนประกอบ VHDL)

ทำความเข้าใจว่าพวกเขามารวมกันได้อย่างไร (แผนผังของส่วนประกอบ VHDL)
ทำความเข้าใจว่าพวกเขามารวมกันได้อย่างไร (แผนผังของส่วนประกอบ VHDL)

ไฟล์หลัก (" MainProjectDES ") มีไฟล์ย่อยทั้งหมดที่กล่าวถึงก่อนหน้านี้ มีการเชื่อมต่อในลักษณะข้างต้น ส่วนประกอบต่างๆ เชื่อมต่อกันโดยใช้พอร์ตแมปเพื่อส่งสัญญาณจากองค์ประกอบหนึ่งไปยังอีกองค์ประกอบหนึ่ง

ตามที่คุณอาจสังเกตเห็น FinalCounter ให้เอาต์พุต 5 บิตในขณะที่ sseg_dec ต้องการอินพุต 8 บิต เพื่อชดเชย เราตั้งค่าสัญญาณที่เชื่อมต่อทั้งสองส่วนประกอบให้เริ่มต้นด้วย "000" และเพิ่มเอาต์พุต 5 บิตจากตัวนับ ดังนั้นให้อินพุต 8 บิต

ข้อจำกัด:

ในการรันโค้ดเหล่านี้บนบอร์ด Basys 3 จำเป็นต้องมีไฟล์ข้อจำกัด โดยบอกแต่ละสัญญาณว่าต้องไปที่ใดและชิ้นส่วนต่างๆ เชื่อมต่อกันอย่างไร

ขั้นตอนที่ 4: รหัส (Arduino)

เราตั้งโปรแกรม Arduino Uno ให้ใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหวเพื่อตรวจจับการเคลื่อนไหวและให้เอาต์พุตที่ส่งสัญญาณให้ LED สว่างขึ้น นอกจากนี้ การใช้เซ็นเซอร์เพื่อตรวจจับการเคลื่อนไหวจำเป็นต้องมีการวนรอบที่มองหาการเปลี่ยนแปลงระยะทางอย่างต่อเนื่อง โดยพื้นฐานแล้ว จำเป็นต้องมีตัวจับเวลาที่ทำงานพร้อมกันเพื่อส่งสัญญาณ "สูง" เพื่อให้ LED สว่างขึ้นในขณะที่ต้องรีเซ็ตตัวจับเวลาเมื่อตรวจพบการเคลื่อนไหวใหม่ ซึ่งแทบจะเป็นไปไม่ได้เลยที่จะนำไปใช้กับ Vivado ตามขอบเขตของความรู้ ของชั้นเรียน ยิ่งไปกว่านั้น เราใช้ Arduino เนื่องจากไม่สามารถใช้ HC-SR04 กับบอร์ด Basy 3 เนื่องจากบอร์ดจ่ายไฟเพียง 3.3V ในขณะที่เซ็นเซอร์ต้องการแหล่งจ่ายไฟ 5V สำหรับการใช้งานการตรวจจับการเคลื่อนไหว จะเป็นการเข้ารหัสจริงซึ่งต่างจาก CAD ใน VHDL

เราใช้ฟังก์ชันพัลส์อินในตัวสำหรับเซ็นเซอร์เพื่อดึงเวลาที่ผ่านไประหว่างเสียงที่ปล่อยออกมาจากเซ็นเซอร์ในขั้นต้นกับเสียงที่สะท้อนกลับเมื่อชนกับวัตถุ จากนั้นเราใช้ความเร็วของเสียงและช่วงเวลาในการคำนวณระยะห่างระหว่างวัตถุกับเซ็นเซอร์ จากนั้นเราเก็บระยะทางปัจจุบันและติดตามระยะทาง เราตรวจสอบระยะทางทุกๆ 150ms นอกจากนี้เรายังใช้ไลบรารี elapsedmil เพื่อเรียกใช้ตัวจับเวลาภายในภายใน Arduino เพื่อติดตามเวลาที่ผ่านไป หากเราตรวจพบการเปลี่ยนแปลงระยะทางซึ่งสัมพันธ์กับการเคลื่อนไหว ตัวจับเวลาจะถูกรีเซ็ตเป็นศูนย์และไฟจะสว่างไว้จนกว่าจะผ่านไป 3 วินาที เมื่อใดก็ตามที่เซ็นเซอร์ตรวจพบการเคลื่อนไหวอื่น ตัวจับเวลาจะถูกรีเซ็ตเป็น 0 และสัญญาณสำหรับไฟ LED จะ "สูง" เป็นเวลา 3 วินาที เราได้แนบสำเนาของโค้ด Arduino ด้านล่าง

ขั้นตอนที่ 5: ส่วนประกอบของเราเข้ากันได้อย่างไร

ส่วนประกอบของเราเข้ากันได้อย่างไร!
ส่วนประกอบของเราเข้ากันได้อย่างไร!
ส่วนประกอบของเราเข้ากันได้อย่างไร!
ส่วนประกอบของเราเข้ากันได้อย่างไร!
ส่วนประกอบของเราเข้ากันได้อย่างไร!
ส่วนประกอบของเราเข้ากันได้อย่างไร!

ดังที่คุณเห็นใน "Basys3: Pmod Pin-out Diagram*" และภาพถ่ายของบอร์ด Arduino Uno เราได้เน้นและติดป้ายกำกับพอร์ตที่เราใช้

1. บอร์ด LED และ Basy 3

LED เชื่อมต่อแบบอนุกรมด้วยตัวต้านทาน 100Ω - สายสีขาวเชื่อมต่อตัวต้านทานกับพิน PWR ของบอร์ด Basys 3 - สายสีเหลืองเชื่อมต่อ LED เข้ากับขา H1 ของบอร์ด Basy 3

2. Motion Sensor และ Arduino Uno

-สายสีส้มเชื่อมต่อ Vcc (กำลัง) ของเซ็นเซอร์ตรวจจับความเคลื่อนไหวกับพิน 5V ของบอร์ด Arduino Uno -สายสีขาวเชื่อมต่อพิน Trig ของเซ็นเซอร์ตรวจจับความเคลื่อนไหวเข้ากับพิน 10 ของบอร์ด Arduino Uno -สายสีเหลืองเชื่อมต่อพิน Echo ของ เซ็นเซอร์ตรวจจับความเคลื่อนไหวที่ขา 9 ของบอร์ด Arduino Uno-สายสีดำเชื่อมต่อพิน GND ของเซ็นเซอร์ตรวจจับความเคลื่อนไหวเพื่อพิน GND ของบอร์ด Arduino Uno

[สายไฟที่เราใช้สั้นเกินไปที่จะไปถึงส่วนประกอบ ดังนั้นจึงเชื่อมต่อถึงกัน]

3. บอร์ด Basy 3 และ Arduino Uno

สายสีเหลืองเชื่อมต่อพิน A14 ของบอร์ด Basy 3 กับพิน 6 ของบอร์ด Arduino Uno

*แผนภาพนี้นำมาจาก "คู่มืออ้างอิงบอร์ด Bassys 3™ FPGA" ของ Digilent ซึ่งสามารถพบได้ที่นี่

ขั้นตอนที่ 6: การสาธิต

ขั้นตอนที่ 7: ถึงเวลาทดสอบแล้ว

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

แนะนำ: