สารบัญ:
- ขั้นตอนที่ 1: ซอฟต์แวร์และฮาร์ดแวร์ที่จำเป็น
- ขั้นตอนที่ 2: รหัส (Vivado)
- ขั้นตอนที่ 3: ทำความเข้าใจว่าพวกเขามารวมกันได้อย่างไร (แผนผังของส่วนประกอบ VHDL)
- ขั้นตอนที่ 4: รหัส (Arduino)
- ขั้นตอนที่ 5: ส่วนประกอบของเราเข้ากันได้อย่างไร
- ขั้นตอนที่ 6: การสาธิต
- ขั้นตอนที่ 7: ถึงเวลาทดสอบแล้ว
วีดีโอ: Motion Sensor/ไฟควบคุมที่เคาน์เตอร์: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
โครงการนี้สร้างขึ้นเป็นโครงการสุดท้ายสำหรับหลักสูตรการออกแบบดิจิทัลที่ 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)
เครื่องไฟไนต์สเตท (ดูแผนภาพสถานะด้านบน):
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)
ไฟล์หลัก (" 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: ถึงเวลาทดสอบแล้ว
ยินดีด้วย! คุณมาถึงจุดสิ้นสุดของโปรเจ็กต์เซ็นเซอร์ตรวจจับความเคลื่อนไหวและแสงที่ควบคุมโดยเคาน์เตอร์แล้ว! ขอบคุณมากสำหรับการอ่านผ่านโพสต์คำแนะนำของเรา ถึงเวลาแล้วที่คุณจะต้องพยายามสร้างโครงการนี้ด้วยตัวเอง หากคุณปฏิบัติตามทุกขั้นตอนอย่างระมัดระวัง คุณควรมีเซ็นเซอร์ตรวจจับความเคลื่อนไหวและไฟควบคุมที่เคาน์เตอร์ที่ทำงานคล้ายกับของเรา! เราขอให้คุณโชคดีในการสร้างโครงการนี้ และหวังว่าโครงการนี้จะสามารถช่วยประหยัดพลังงานไฟฟ้าและทรัพยากรธรรมชาติได้!
แนะนำ:
Sound Sensor & Servo: Reactive Motion: 4 ขั้นตอน
Sound Sensor & Servo: Reactive Motion: ก่อนอื่นคุณต้องรวบรวมวัสดุที่เกี่ยวข้องเพื่อรวมวงจรนี้เข้าด้วยกัน
Motion Sensor Water Tap โดยใช้ Arduino และโซลินอยด์วาล์ว - DIY: 6 ขั้นตอน
Motion Sensor Water Tap โดยใช้ Arduino และ Solenoid Valve - DIY: ในโครงการนี้ ฉันจะแสดงวิธีสร้าง Motion Sensor Water Tap โดยใช้โซลินอยด์วาล์ว โปรเจ็กต์นี้สามารถช่วยคุณแปลงก๊อกน้ำแบบใช้มือที่มีอยู่ให้เป็นก๊อกน้ำที่สามารถควบคุมได้ตามการตรวจจับการเคลื่อนไหว การใช้อินเทอร์เฟซเซ็นเซอร์ IR
Raspberry Pi Motion Sensor IFTTT: 4 ขั้นตอน
Raspberry Pi Motion Sensor IFTTT: สวัสดี ฉันเป็นนักเรียนชั้นประถมศึกษาปีที่ 4 และวันนี้เรากำลังจะสร้างเซ็นเซอร์ตรวจจับความเคลื่อนไหว IFTTT
ESP-01 Motion Sensor พร้อม Deep Sleep: 5 ขั้นตอน
ESP-01 Motion Sensor With Deep Sleep: ฉันกำลังพยายามสร้างเซ็นเซอร์ตรวจจับความเคลื่อนไหวแบบโฮมเมดที่ส่งข้อความอีเมลเมื่อถูกทริกเกอร์ มีตัวอย่างการสอนและตัวอย่างอื่นๆ มากมายในการทำเช่นนี้ ฉันเพิ่งต้องทำสิ่งนี้ด้วยเซ็นเซอร์ตรวจจับความเคลื่อนไหว PIR ที่ใช้แบตเตอรี่และ ESP
ใครอยู่ที่ประตูของฉัน? โครงการ PIR Motion Sensor/Range Sensor: 5 ขั้นตอน
ใครอยู่ที่ประตูของฉัน? โครงการ PIR Motion Sensor/Range Sensor: โครงการของเรามีวัตถุประสงค์เพื่อตรวจจับการเคลื่อนไหวผ่าน PIR และเซ็นเซอร์วัดระยะทาง รหัส Arduino จะส่งสัญญาณภาพและเสียงเพื่อบอกผู้ใช้ว่ามีคนอยู่ใกล้ รหัส MATLAB จะส่งสัญญาณอีเมลแจ้งเตือนผู้ใช้ว่ามีคนอยู่ใกล้ อุปกรณ์นี้