สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: รู้เบื้องต้นเกี่ยวกับ Raspberry Pi GPIO
- ขั้นตอนที่ 2: ทำความเข้าใจตัวต้านทาน
- ขั้นตอนที่ 3: การเดินสายไฟ LED
- ขั้นตอนที่ 4: เชื่อมต่อ LED กับ GPIO
- ขั้นตอนที่ 5: การใช้รีเลย์เพื่อขับเคลื่อน LED
- ขั้นตอนที่ 6: การเพิ่มตัวต้านทานแบบดึงขึ้น
- ขั้นตอนที่ 7: เซ็นเซอร์สวิตช์กก
- ขั้นตอนที่ 8: เชื่อมต่อ Reed Switch กับ Pi
- ขั้นตอนที่ 9: การสร้างโซลูชันถาวรบนกระดานสร้างต้นแบบ
- ขั้นตอนที่ 10: การอ้างอิง
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
หนึ่งในแรงบันดาลใจสำหรับโครงการนี้คือคำแนะนำที่ดีที่ Raspberry Pi 3 Garage Door Opener พร้อมกับคนอื่น ๆ อีกหลายคนที่พบในอินเทอร์เน็ต ฉันไม่ได้เป็นนักอิเล็กทรอนิกส์ที่ช่ำชอง ฉันได้ทำการวิจัยเพิ่มเติมมากมายเกี่ยวกับวิธีการเชื่อมต่อกับ Raspberry Pi และเรียนรู้มากมายเกี่ยวกับความสำคัญของตัวต้านทานที่มีหลอดไฟ LED และการเดินสาย GPIO ทั้งหมด ฉันยังได้เรียนรู้เกี่ยวกับประโยชน์ของวงจรฮาร์ดแวร์แบบดึงขึ้นและแบบดึงลงเทียบกับฟังก์ชัน Pi ในตัว
เนื่องจากโครงการประตูโรงรถนี้เป็นกระบวนการแบบหลายส่วนจริงๆ ที่ประกอบด้วยฮาร์ดแวร์ Pi ซอฟต์แวร์ และการติดตั้งกับที่เปิดประตูโรงรถของคุณ ฉันคิดว่าฉันจะเน้นที่ฮาร์ดแวร์ Pi ก่อน เนื่องจากจำเป็นสำหรับขั้นตอนอื่นๆ ในทุกขั้นตอน
แนวทางของฉันคือใช้พื้นฐานมากๆ โดยทำหน้าที่เป็นบทสรุปของการเรียนรู้ที่ฉันทำเพื่อให้ฮาร์ดแวร์สมบูรณ์ มันจะเริ่มต้นด้วยข้อมูลบางอย่าง จากนั้นเราจะสร้างวงจรบนเขียงหั่นขนม ทุกขั้นตอนจะขัดเกลาการออกแบบและความรู้ของเรา ส่งผลให้เกิดการสร้างโซลูชันฮาร์ดแวร์ถาวรเพื่อเชื่อมต่อ Pi กับรีเลย์และเซ็นเซอร์กก
นอกจากนี้ ฉันตัดสินใจใช้ Raspberry Pi Zero W ซึ่งแตกต่างจากโปรเจ็กต์อื่น ๆ ที่ฉันลดราคาเมื่อนานมาแล้ว แต่ก็ยังนั่งบนโต๊ะทำงานของฉันโดยไม่ได้ใช้งาน ข้อดีคือในขณะที่สร้างต้นแบบ หากฉันทำให้วงจร GPIO เสียหาย วงจร GPIO ใด ๆ ก็ราคาถูกและง่ายต่อการเปลี่ยนและคงการสร้างต้นแบบต่อไป ข้อเสียคือมันมีเพียงโปรเซสเซอร์ ARMv6 ดังนั้นบางสิ่ง เช่น Java จะไม่สามารถใช้งานได้
อีกสิ่งหนึ่งที่ฉันตัดสินใจทำคือสร้างบอร์ดเสริมของตัวเองสำหรับวงจร ดังนั้นฉันควรเปลี่ยนหรือเปลี่ยน Pi ของฉัน ตราบใดที่พินเอาต์ยังเหมือนเดิม บอร์ดควรเสียบเข้ากับ Pi ใหม่ได้อย่างง่ายดาย. นี้หวังว่าจะลดรังของสายไฟของหนู
สมมติฐานของฉันคือ:
- คุณสบายใจในการบัดกรี
- คุณรู้อยู่แล้วว่าจะใช้คำสั่งเทอร์มินัลพื้นฐานบน Raspberry Pi. ได้อย่างไร
- คุณกำลังใช้ Raspbian Buster หรือใหม่กว่า
- คุณมีส่วนต่อประสานกับบรรทัดคำสั่ง Pi; กับจอภาพ แป้นพิมพ์ ฯลฯ และ/หรือโดยใช้ SSH โดยเฉพาะ
- คุณคุ้นเคยกับแนวคิดพื้นฐานของการออกแบบวงจรไฟฟ้า ตัวอย่างเช่น คุณทราบความแตกต่างระหว่างกำลังและกราวด์ และคุณเข้าใจแนวคิดของการลัดวงจร ถ้าคุณสามารถวางร้านใหม่ในบ้านของคุณได้ คุณก็ควรจะทำตามได้
เสบียง
ขึ้นอยู่กับว่าคุณทุ่มเทให้กับโครงการนี้มากแค่ไหน คุณอาจเริ่มต้นด้วยสิ่งที่จำเป็นในแต่ละขั้นตอนและไปจากที่นั่น ชิ้นส่วนเหล่านี้มีจำหน่ายที่อุปกรณ์อิเล็กทรอนิกส์ในพื้นที่ของคุณหรือร้าน DIY/Maker แต่ฉันได้รวมลิงก์ของ Amazon เพื่อปรับปรุงคำอธิบาย
- MakerSpot RPi Raspberry Pi Zero W Protoboard (เพื่อสร้าง HAT สุดท้ายสำหรับ Pi)
- โมดูลรีเลย์ DC 5V 2 ช่องสัญญาณ (รับ 1 ช่องถ้าคุณมีประตูเดียว 2 ประตู 2 ประตู ฯลฯ)
- สวิตช์ประตูเหนือศีรษะ ปกติเปิด (NO) (ถ้าตอนนี้คุณเพิ่งสร้างต้นแบบและต้องการใช้สวิตช์กกราคาถูกเพื่อเริ่มต้น ก็ไม่เป็นไร)
- Electronic Fun Kit Bundle (มีตัวต้านทานทั้งหมดที่ฉันต้องการ รวมทั้งเขียงหั่นขนมและหน่วยพลังงานสำหรับช่วยสร้างต้นแบบ ทดสอบ และเรียนรู้ก่อนที่ฉันจะทำบอร์ดถาวร) หากคุณมีทั้งหมดนี้แล้ว ตรวจสอบให้แน่ใจว่าคุณมีตัวต้านทาน 10K, 1K และ 330 ohm เพียงไม่กี่ตัว
- Breadboard Jumper Wires (อะไรก็ได้)
- หัวแร้งหัวเล็ก
- ประสานแกนขัดสน
- หัวแร้งทำความสะอาดปลายหัวแร้ง
- แหล่งจ่ายไฟสำรอง 9v (เพื่อจ่ายไฟให้กับเขียงหั่นขนม)
- แผงต้นแบบราคาถูกสำหรับการบัดกรี (ตัวเลือก)
- ใช้งาน Raspberry Pi Zero หรือ Pi ได้ตามต้องการ
- หมุดส่วนหัวสำหรับ Raspberry Pi (หากคุณไม่มีส่วนหัวอยู่แล้ว)
- การซ้อนส่วนหัวสำหรับใช้กับโปรโตบอร์ด HAT
- คีมปากแหลมขนาดเล็ก
- ชุดไขควงช่างอัญมณี
- มีดคัตเตอร์ขนาดเล็ก (สำหรับตัดลวดหลังบัดกรี)
- แหนบ
- ลวดเกจขนาดเล็ก (ฉันชอบโซลิดคอร์) สำหรับใช้กับโปรโตบอร์ด
- ซิลิโคนเล็กน้อย (หากคุณเลือกใช้ไฟ LED ยึดพื้นผิว 1.8 มม. แทนหลอดที่ให้มาในชุดคิท)
- ฉันพบว่าหลอดขยายช่วยให้เห็นงานบัดกรีเล็กๆ ได้มาก
ขั้นตอนที่ 1: รู้เบื้องต้นเกี่ยวกับ Raspberry Pi GPIO
อินเทอร์เฟซหลักที่เราจะใช้กับ Raspberry Pi คือ GPIO (อินพุต/เอาต์พุตวัตถุประสงค์ทั่วไป)
ค้นหาไดอะแกรมพินที่เหมาะสมสำหรับ Pi ของคุณที่นี่ คำแนะนำนี้จะเน้นที่ Pi Zero W v1.1
เราจะใช้เฉพาะหมุด GPIO สีเขียว หลีกเลี่ยงหมุด SDA, SCL, MOSI, MISO ฯลฯ (ฉันพบว่าหมุด GPIO บางตัวมีจุดประสงค์พิเศษ หนึ่งในประโยชน์ของการสร้างต้นแบบบนเขียงหั่นขนม ดังนั้นฉันจึงติดอยู่กับหมุด GPIO 17 (พิน #11), 27 (พิน #13) และ 12 (#32) เหมือนเดิม อยู่ในตำแหน่งที่ดีสำหรับเขียงหั่นขนมของฉัน
หมุด GPIO ได้รับการออกแบบให้ทำงานเป็นสวิตช์ดิจิตอล (ไบนารี) มีอยู่อย่างมีเหตุผลเป็นหนึ่งในสองสถานะ: 1 หรือศูนย์ สถานะเหล่านี้ขึ้นอยู่กับว่าพินจ่ายไฟหรือรับแรงดันไฟฟ้าที่สูงกว่าเกณฑ์ที่กำหนด (1) หรืออุปกรณ์จ่ายไฟหรือรับแรงดันไฟฟ้าต่ำกว่าเกณฑ์ที่กำหนด (เราจะพูดถึงธรณีประตูในภายหลัง)
สิ่งสำคัญที่ควรทราบคือ แม้ว่า Raspberry Pi สามารถจ่ายไฟได้ทั้ง 5V และ 3.3V (3V3) แต่พิน GPIO จะทำงานโดยใช้แรงดันไฟสูงสุด 3.3V มากกว่านั้นและคุณสร้างความเสียหายให้กับ GPIO และอาจเป็นตัวควบคุมทั้งหมด (นี่คือเหตุผลที่เราสร้างต้นแบบบนเขียงหั่นขนม และใช้ Pi ที่ถูกที่สุดเท่าที่จะเป็นไปได้!)
สถานะของพินสามารถจัดการได้โดยซอฟต์แวร์ (เอาต์พุต) หรือโดยอุปกรณ์อื่นๆ ที่ป้อนในสถานะ (อินพุต)
ลองทำสิ่งนี้โดยใช้คำสั่ง SYSFS พื้นฐาน ฉันไม่แน่ใจว่าต้องใช้ WiringPi หรือไม่ แต่ถ้าคุณพบปัญหาคุณอาจต้องการติดตั้งหากคุณใช้อิมเมจ Raspbian ขั้นต่ำ
ขั้นแรก ให้สิทธิ์ในการเข้าถึง GPIO 17:
sudo echo "17" > /sys/class/gpio/export
ทีนี้มาตรวจสอบค่าของ GPIO กัน:
sudo cat /sys/class/gpio/gpio17/value
ค่าควรเป็นศูนย์
ณ จุดนี้ GPIO ไม่รู้ว่าเป็นอินพุตหรือเอาต์พุต ดังนั้น หากคุณพยายามจัดการค่า GPIO คุณจะได้รับ "ข้อผิดพลาดในการเขียน: ไม่อนุญาตให้ดำเนินการ" ลองบอกพินว่ามันเป็นเอาต์พุต:
sudo echo "out" > /sys/class/gpio/gpio17/direction
และตอนนี้ตั้งค่าเป็น 1:
sudo echo "1" > /sys/class/gpio/gpio17/value
ตรวจสอบค่าอีกครั้งเพื่อดู…และค่าควรเป็น 1
ขอแสดงความยินดี คุณเพิ่งสร้างเอาต์พุต GPIO และเปลี่ยนสถานะ!
ตอนนี้ยังมีอีกเล็กน้อย แต่ขอเรียนรู้เพิ่มเติมสองสามอย่างก่อน
ขั้นตอนที่ 2: ทำความเข้าใจตัวต้านทาน
ดังนั้น คุณสามารถค้นหาตัวต้านทานบน Wikipedia ได้ แต่มันมีความหมายต่อเราอย่างไร โดยหลักแล้วจะปกป้องส่วนประกอบของเรา
จำได้ไหมว่าเมื่อเราพูดถึง GPIO ที่ทำงานได้ถึง 3.3V? หมายความว่าถ้าคุณให้พิน GPIO มากกว่านั้น คุณสามารถทอดมันได้ ทำไมสิ่งนี้จึงสำคัญ? บางครั้งมีการกระชากเล็กน้อยในวงจรใด ๆ และหากค่าสูงสุดคือ 3.3V อาการสะอึกเล็กน้อยอาจทำให้เกิดปัญหาได้ การทำงานที่แรงดันไฟฟ้าสูงสุดเป็นเรื่องที่มีความเสี่ยง
โดยเฉพาะอย่างยิ่งสำหรับ LED ไฟ LED จะดึงพลังงานให้มากที่สุด ในที่สุดไฟ LED จะดับ แต่กระแสไฟที่มีนัยสำคัญสามารถใช้พลังงานที่มีอยู่ในวงจรจนหมด ทำให้ไฟทำงานผิดปกติ
ตัวอย่างเช่น จะเกิดอะไรขึ้นถ้าคุณใส่ส้อมลงในปลั๊กไฟทั้งสองข้าง? มีความต้านทานน้อยถึงไม่มีเลย และคุณจะระเบิดเซอร์กิตเบรกเกอร์ (และอาจทำร้ายตัวเองในกระบวนการ) ทำไมเครื่องปิ้งขนมปังไม่ทำเช่นนี้? เนื่องจากองค์ประกอบความร้อนให้ความต้านทาน จึงไม่ดึงโหลดทั้งหมดของวงจร
เราจะป้องกันไม่ให้สิ่งนี้เกิดขึ้นกับ LED ได้อย่างไร โดยจำกัดปริมาณกระแสที่ใช้ขับ LED โดยใช้ตัวต้านทาน
แต่ตัวต้านทานขนาดไหน? ใช่ ฉันอ่านบทความบนเว็บสองสามบทความ และในที่สุดก็ตัดสินใจใช้ตัวต้านทาน 330Ω สำหรับ 3.3V ด้วย LED คุณสามารถอ่านการคำนวณทั้งหมดและคิดออกเองได้ แต่ฉันทดสอบสองสามอย่างบนเขียงหั่นขนมและ 330 ทำงานได้ดี การอ้างอิงหนึ่งที่ฉันตรวจสอบอยู่ในฟอรัม Raspberry Pi แต่การค้นหาโดย Google จะค้นพบอีกมากมาย
ในทำนองเดียวกัน พิน Pi GPIO ต้องการการป้องกันจากแรงดันไฟเกิน จำได้ไหมว่าฉันบอกว่าพวกเขาใช้สูงถึง 3.3V? น้อยไปก็ไม่เสียหาย โครงการส่วนใหญ่ใช้ตัวต้านทาน1KΩและฉันก็ทำเช่นเดียวกัน อีกครั้งคุณสามารถคำนวณได้ด้วยตัวเอง แต่นี่เป็นทางเลือกที่นิยมมาก อีกครั้ง ฟอรัม Raspberry Pi ให้ข้อมูลบางอย่าง
หากคุณไม่เข้าใจสิ่งนี้อย่างสมบูรณ์ ให้อ่านเพิ่มเติม หรือเพียงแค่ทำตามคำแนะนำ อะไรก็ได้ที่เหมาะกับคุณ
ตัวต้านทานหลายตัวจะติดฉลากอยู่ในบรรจุภัณฑ์ แต่เมื่อคุณถอดออก คุณจะแยกพวกมันออกจากกันได้อย่างไร? แถบสีเล็กๆ บนตัวต้านทานสามารถบอกคุณได้
ต่อไป เราจะต่อสายไฟ LED แบบธรรมดาบนเขียงหั่นขนมที่มีพลังในการเริ่มต้น
ขั้นตอนที่ 3: การเดินสายไฟ LED
ขั้นตอนแรกคือการต่อสายไฟ LED บนเขียงหั่นขนม เมื่อเราใช้งานได้อย่างปลอดภัยแล้ว เราจะเชื่อมต่อกับ Raspberry Pi และควบคุมจากพิน GPIO
หวังว่าเขียงหั่นขนมของคุณจะมีแหล่งพลังงานสำหรับ 3.3v ถ้าไม่ คุณสามารถต่อทุกอย่างและเชื่อมต่อโดยตรงกับ Pi
ค้นหา LED และต่อเข้ากับเขียงหั่นขนมตามที่แสดงโดยใช้ตัวต้านทาน330Ω ขาที่ยาวกว่าของ LED คือขั้วบวก ขาที่สั้นกว่าคือขั้วลบ ขั้วบวกเชื่อมต่อกับพลังงาน 3.3V ในขณะที่แคโทดเชื่อมต่อกลับสู่กราวด์ ตัวต้านทานสามารถอยู่ก่อน LED; ไม่เป็นไร. สีลวดมาตรฐานคือ:
- สีแดง = 5V
- ส้ม = 3.3V
- สีดำ = พื้นดิน
เมื่อคุณมีเขียงหั่นขนมแบบมีสายและจ่ายไฟแล้ว ไฟ LED จะสว่างขึ้น อย่าดำเนินการต่อเว้นแต่คุณจะใช้งานได้
ขั้นตอนที่ 4: เชื่อมต่อ LED กับ GPIO
ตอนนี้เรามี LED ที่ใช้งานได้พร้อมตัวต้านทาน ตอนนี้ได้เวลาเชื่อมต่อ LED นั้นกับ Raspberry Pi เป้าหมายของเราคือการสร้างเอาต์พุต GPIO และเชื่อมต่อ GPIO นั้นกับ LED เพื่อที่ว่าเมื่อเราเปิดใช้งาน GPIO ไฟ LED จะสว่างขึ้น ในทางกลับกัน เมื่อเราปิดการใช้งาน GPIO ไฟ LED จะดับลง (ซึ่งจะใช้ภายหลังเป็นวงจรที่จะ "กดปุ่ม" เพื่อเปิดประตูโรงรถ)
ถอดไฟออกจากเขียงหั่นขนมและเชื่อมต่อ Pi ตามที่แสดง (ควรทำเช่นนี้ในขณะที่ Pi ปิดการทำงานด้วย) เราได้เชื่อมต่อแหล่งจ่ายไฟ 3.3V จาก GPIO 17 และกราวด์เข้ากับหมุดกราวด์ตัวใดตัวหนึ่งแล้ว
ตอนนี้บูต Pi และ LED ควรดับ ดำเนินการคำสั่งเดียวกันกับที่เราทำก่อนหน้านี้เพื่อตั้งค่าพิน GPIO และส่งออกค่า:
sudo echo "17" > /sys/class/gpio/export
sudo echo "out" > /sys/class/gpio/gpio17/direction sudo cat /sys/class/gpio/gpio17/value
ค่าควรเป็นศูนย์
ตอนนี้มาเปิดใช้งาน GPIO:
sudo echo "1" > /sys/class/gpio/gpio17/value
สิ่งนี้ควรเปิด LED หากต้องการปิด LED เพียงปิดการใช้งาน GPIO ดังนี้:
sudo echo "0" > /sys/class/gpio/gpio17/value
สิ่งหนึ่งที่อาจเกิดขึ้นคือ เมื่อมีสัญญาณรบกวนเพียงพอหรือรอบการเปิด/ปิดของ LED คุณอาจสังเกตเห็นว่า LED ยังคงสว่างอยู่เล็กน้อย มีเหตุผลสำหรับเรื่องนี้ และเราจะพูดถึงเรื่องนี้ในขั้นตอนต่อไป
ขั้นตอนที่ 5: การใช้รีเลย์เพื่อขับเคลื่อน LED
ตามที่ระบุไว้ในขั้นตอนที่แล้ว ไฟ LED เป็นปุ่ม "" แบบสแตนด์อินสำหรับประตูโรงรถ อย่างไรก็ตาม ในขณะที่ GPIO สามารถจ่ายไฟ LED ของเราได้ แต่ก็ไม่สามารถ "กดปุ่ม" ประตูโรงรถของเราได้ การกดปุ่มโดยพื้นฐานแล้วเพียงแค่เชื่อมต่อขั้วของปุ่มทั้งสองซึ่งมีผลกับการกดปุ่ม สิ่งที่คุณต้องทำ "กด" นี้คือรีเลย์
รีเลย์ไม่มีอะไรมากไปกว่าสวิตช์ที่ขับเคลื่อนโดยบางสิ่ง ในกรณีนี้ Raspberry Pi ของเราสามารถบอกรีเลย์ให้ "กด" ที่ปุ่มประตูโรงรถ สำหรับต้นแบบของเรา Raspberry Pi จะบอกรีเลย์ให้เปิด LED…เพื่อให้เราสามารถทดสอบวงจรของเราได้
สิ่งที่เราต้องรู้เกี่ยวกับการถ่ายทอดของเรา:
- รีเลย์ทำงานที่ 5V นี่เป็นพลังงานเพื่อใช้งานรีเลย์เท่านั้นและไม่ได้ใช้ในส่วนอื่น ๆ ของวงจร
- เราต้องการต่อรีเลย์ของเราว่า "เปิดตามปกติ" นั่นหมายความว่ารีเลย์ยังคงเปิดอยู่ (ไม่ได้ต่อสายไฟสองเส้นหรือ "กดปุ่ม" จนกว่าจะเปิดใช้งาน
- รีเลย์พิเศษนี้จะเปิดใช้งานเมื่อ GPIO จ่ายไฟให้กับขั้วต่อ 3.3V ของรีเลย์เป็นศูนย์ อันที่จริงสิ่งนี้ดูเหมือนย้อนหลัง เมื่อจ่ายไฟ 3.3V รีเลย์จะถูกปล่อย อยู่กับเราในโครงการนี้แล้วคุณจะเห็นว่ามันทำงานอย่างไร
- การเชื่อมต่อเทอร์มินัลรีเลย์ทั้งสองแยกจาก Raspberry Pi โดยสิ้นเชิง สิ่งนี้หมายความว่าคุณสามารถเปลี่ยนสายไฟด้วยกระแสไฟที่กำหนดได้เนื่องจากได้รับกระแสจากแหล่งพลังงานอื่น Raspberry Pi ขนาดเล็กธรรมดาที่มี 3.3V และ 5V สามารถใช้รีเลย์ที่ควบคุมแรงดันไฟฟ้าที่มีขนาดใหญ่กว่าได้ นี่เป็นวิธีที่ปุ่มเล็กๆ บนแดชบอร์ดของคุณสามารถเรียกใช้ที่นั่งแบบปรับความร้อนได้โดยใช้แอมแปร์ขนาดใหญ่
มาเริ่มกันเลยดีกว่า
ขั้นแรก ให้ติดกลับเข้าไปใหม่ (แต่ปิดเครื่อง) ยูนิตจ่ายไฟภายนอกสำหรับเขียงหั่นขนมของคุณ พลังงานนี้จะเรียกใช้วงจร LED ในขณะที่ Raspberry Pi ควบคุมรีเลย์
ถัดไป สร้างตัวแบ่งในสาย 3.3V ที่จ่ายไฟให้กับ LED (ด้วยสวิตช์และรีเลย์ เรามักจะต้องการเปลี่ยน "ร้อน" ไม่ใช่กราวด์) สิ่งเหล่านี้จะแสดงเป็นสีส้มและสีน้ำเงินบนไดอะแกรม
เชื่อมต่อ Raspberry Pi ตามที่แสดงโดยเปิดรีเลย์ 5V, 3.3V ทำหน้าที่เป็นสวิตช์และกราวด์กลับไปที่ Raspberry Pi ในตัวอย่างนี้ ฉันได้เชื่อมต่อ 3.3V กับ GPIO 17 แล้ว ฉันแนะนำให้เชื่อมต่อตัวต้านทาน 1KΩ กับสาย GPIO ดังที่แสดง เพื่อป้องกัน GPIO จากปัญหา (สิ่งนี้ถูกกล่าวถึงในขั้นตอนตัวต้านทาน)
เพิ่มพลังให้กับเขียงหั่นขนมและเพิ่มพลัง Pi ของคุณ ไฟ LED ควรติดสว่าง
ตอนนี้รันคำสั่งต่อไปนี้บน Pi:
sudo echo "17" > /sys/class/gpio/export
sudo echo "out" > /sys/class/gpio/gpio17/direction sudo cat /sys/class/gpio/gpio17/value
ค่าควรเป็นศูนย์
ตอนนี้มาเปิดใช้งาน GPIO:
sudo echo "1" > /sys/class/gpio/gpio17/value
สิ่งนี้ควรปิด LED
ขั้นตอนที่ 6: การเพิ่มตัวต้านทานแบบดึงขึ้น
ณ จุดนี้ ทุกสิ่งของคุณควรใช้งานได้ แต่มีสิ่งหนึ่งที่เราไม่ได้พูดถึงเกี่ยวกับ GPIO และนั่นคือแรงดัน "ลอย" ที่เป็นไปได้ตามเกณฑ์ที่เรากล่าวถึงก่อนหน้านี้
แม้ว่าโดยทั่วไป GPIO จะมีสถานะทางตรรกะสองสถานะ (1 และศูนย์) แต่จะกำหนดสถานะเหล่านี้โดยพิจารณาจากแรงดันไฟฟ้าที่สูงกว่าหรือต่ำกว่าเกณฑ์แรงดันไฟฟ้า ดังที่เราได้กล่าวไว้ในส่วน GPIO แต่ปัญหาใน GPIO ส่วนใหญ่คือความเป็นไปได้ของแรงดันไฟฟ้า "ลอย"; ในกรณีของ Raspberry Pi อยู่ระหว่างศูนย์ถึง 3.3V สิ่งนี้สามารถเกิดขึ้นได้จากการรบกวนหรือจากการเพิ่ม/ลดแรงดันไฟฟ้าในวงจร
เราไม่ต้องการสถานการณ์ที่รีเลย์ปุ่มประตูโรงรถของเราอาจเปิดใช้งานจากแรงดันลอยตัว อันที่จริง เราต้องการให้มันเปิดใช้งานเมื่อเราบอกให้ทำเท่านั้น
สถานการณ์เช่นนี้แก้ไขได้โดยใช้ตัวต้านทานแบบดึงขึ้นและแบบดึงลงเพื่อบังคับใช้แรงดันไฟฟ้าเฉพาะและหลีกเลี่ยงแรงดันลอยตัว ในกรณีของเรา เราต้องการให้แน่ใจว่าได้จ่ายแรงดันไฟฟ้าเพื่อป้องกันไม่ให้รีเลย์ทำงาน ดังนั้นเราจึงจำเป็นต้องมีตัวต้านทานแบบดึงขึ้นเพื่อให้แรงดันไฟฟ้าสูงกว่าเกณฑ์ (เกณฑ์เป็นเรื่องตลก… ฉันพยายามอ่านเกี่ยวกับพวกเขาและเพื่อดูว่าพวกเขาถูกกำหนดไว้อย่างดีและได้รับข้อมูลมากมายที่อยู่เหนือหัวของฉันหรือไม่และบางอย่างก็ดูธรรมดาเกินไป พอจะพูดได้ว่าด้วยมัลติมิเตอร์ฉันสามารถเห็นได้ แรงดันไฟฟ้าต่ำกว่า 3.3V แต่เนื่องจากทุกอย่างทำงานได้ในขณะที่ฉันสร้างต้นแบบ ฉันเพิ่งไป ระยะทางของคุณอาจแตกต่างกันไปและนี่คือเหตุผลที่เราทำบอร์ดนี้ก่อนที่จะบัดกรีผลิตภัณฑ์ขั้นสุดท้ายของเรา)
แน่นอนว่า Raspberry Pi มีทั้งตัวต้านทานแบบดึงขึ้นและแบบดึงลงภายในที่คุณสามารถตั้งค่าเป็นโค้ดหรือตอนบู๊ตได้ อย่างไรก็ตาม มีความไวต่อสัญญาณรบกวนสูง แม้ว่าจะใช้งานได้ แต่เนื่องจากเรากำลังทำงานกับตัวต้านทานในวงจรอยู่แล้ว ความเสถียรในการใช้งานภายนอกจึงอาจคุ้มค่า
ที่สำคัญกว่านั้นสิ่งนี้จะสร้างการดึงขึ้นและเพิ่มแรงดันไฟฟ้าเพียงพอที่สถานะพิน GPIO เริ่มต้นเป็น 1 ก่อนที่ Pi จะเริ่มต้น จำได้ไหมว่ารีเลย์ของเราเปิดใช้งาน LED สว่างขึ้นเมื่อเราเริ่มต้น Pi ครั้งแรกจนกว่าเราจะปิดมันหรือไม่? การใช้การดึงขึ้นจะป้องกันไม่ให้รีเลย์เปิดใช้งานเมื่อเริ่มต้นเนื่องจากอินพุตรีเลย์ 3.3V รับแรงดันไฟฟ้าพร้อมกันที่อินพุต 5V รับแรงดันไฟฟ้า เราสามารถทำได้ในการกำหนดค่า Pi หากเราต้องการ แต่อีกครั้งเนื่องจากเรากำลังเดินสายไฟกับตัวต้านทานอยู่แล้ว การอัปเดตและการแจกจ่ายระบบปฏิบัติการจึงมีความเสี่ยงน้อยกว่า
การกำหนดค่าที่แตกต่างกันอาจต้องใช้ตัวต้านทานที่แตกต่างกัน แต่ตัวต้านทาน 10kΩ ทำงานกับรีเลย์ที่ฉันมี LED บนรีเลย์ของฉันสลัวมากเมื่อบูตเครื่อง แต่การดึงขึ้นให้แรงดันไฟฟ้าเพียงพอเพื่อป้องกันการเปิดใช้งานรีเลย์
มาเพิ่มตัวต้านทานแบบดึงขึ้นให้กับวงจรของเรากัน ในแผนภาพเขียงหั่นขนม ฉันเพิ่มตัวต้านทาน 10kΩ ระหว่างอินพุต 3.3V บนรีเลย์และแหล่ง 3.3V
ตอนนี้เรามีวงจรที่เหมาะสำหรับ "กด" ปุ่มประตูโรงรถ การเปลี่ยนตัวต้านทาน LED และ 330Ω ด้วยสายปุ่มจริงน่าจะง่าย
ขั้นตอนที่ 7: เซ็นเซอร์สวิตช์กก
เยี่ยมมาก เรารู้ดีว่าวงจรของเราเป็นอย่างไรเมื่อต้องเปิดใช้งานที่เปิดประตูโรงรถ อย่างไรก็ตาม คงจะดีไม่น้อยหากรู้ว่าประตูโรงรถปิดหรือเปิดอยู่? ในการทำเช่นนั้น คุณต้องมีสวิตช์กกอย่างน้อยหนึ่งตัว บางโครงการแนะนำสองโครงการ แต่ทั้งสองจะใช้การออกแบบวงจรเดียวกัน
เรากำลังใช้การกำหนดค่าสวิตช์กก "ปกติเปิด" (NO) นั่นหมายความว่าวงจรของเราเปิดอยู่จนกว่าสวิตช์กกจะอยู่ใกล้กับแม่เหล็ก ซึ่งจะปิดวงจรและปล่อยให้กระแสไฟฟ้าไหลได้
ความแตกต่างหลักระหว่างการตั้งค่าเซ็นเซอร์และการตั้งค่ารีเลย์คือ:
- GPIO ที่เชื่อมต่อกับเซ็นเซอร์จะตรวจจับพลังงาน ดังนั้นจะเป็นอินพุต GPIO (ในขณะที่รีเลย์ใช้เอาต์พุต GPIO ที่จ่ายแรงดันไฟ)
- เนื่องจากสถานะดีฟอลต์มีอยู่ตามปกติเปิด หมายความว่าวงจรของเราจะไม่ทำงาน ดังนั้น สถานะ GPIO ควรเป็น 0 ตรงกันข้ามกับแนวคิดของตัวต้านทานแบบดึงขึ้นบนวงจรรีเลย์ เราจะต้องการให้แน่ใจว่าแรงดันไฟฟ้าของเราต่ำกว่าเกณฑ์เมื่อวงจรเปิดอยู่ สิ่งนี้จะต้องใช้ตัวต้านทานแบบดึงลง โดยพื้นฐานแล้วจะเหมือนกับการดึงขึ้น แต่เชื่อมต่อกับกราวด์แทนที่จะเป็นพลังงาน
เหมือนกับวงจรรีเลย์ เราจะต่อสายไฟบนเขียงหั่นขนมก่อนที่จะต่อเข้ากับ Pi
ลองใช้เขียงหั่นขนมที่ขับเคลื่อนด้วยไฟของเราและต่อสายไฟ LED, ตัวต้านทาน 330Ω และสายกราวด์ จากนั้นต่อ 3.3V ที่ด้านหนึ่งของสวิตช์กกและจัมเปอร์จากอีกด้านหนึ่งของสวิตช์กกไปที่ LED (หากคุณมีสวิตช์กกที่รองรับ NO และ NC ให้ใช้ตำแหน่ง NO) ย้ายแม่เหล็กออกจากสวิตช์กกแล้วเปิดไฟเขียงหั่นขนม ไฟ LED ควรปิดอยู่ เลื่อนแม่เหล็กไปทางสวิตช์กก และไฟ LED ควรติดสว่าง ถ้าตรงกันข้าม แสดงว่าต่อสาย NC แล้ว (ปกติปิด)
ขั้นตอนที่ 8: เชื่อมต่อ Reed Switch กับ Pi
ตอนนี้เรามีวงจรทำงานโดยไม่มี Pi เราก็สามารถถอดพลังงานออกจากเขียงหั่นขนมและเราจะเชื่อมต่อ Pi
เราจะใช้ GPIO17 อีกครั้งเพราะเรารู้แล้วว่าอยู่ที่ไหน
เช่นเดียวกับวงจรรีเลย์ เราจะปกป้องพิน GPIO ด้วยตัวต้านทาน 1KΩ; อย่างไรก็ตาม เราจะใช้ตัวต้านทาน 10kΩ กับกราวด์เพื่อสร้างการดึงลง
เมื่อเราวางสายทุกอย่างแล้ว ให้ย้ายแม่เหล็กออกจากสวิตช์กก บูต P, i และไปที่บรรทัดคำสั่งและเริ่มต้น GPIO โดยสังเกตว่าคราวนี้เรากำลังสร้างอินพุต GPIO:
sudo echo "17" > /sys/class/gpio/export
sudo echo "ใน" > /sys/class/gpio/gpio17/direction sudo cat /sys/class/gpio/gpio17/value
ค่าควรเป็นศูนย์ ย้ายแม่เหล็กไปที่สวิตช์กก ไฟ LED ควรสว่างขึ้น และค่าเท่ากับ 1
โว้ว! เราได้ต่อสวิตช์กกของเราไปที่ Pi!
ขั้นตอนที่ 9: การสร้างโซลูชันถาวรบนกระดานสร้างต้นแบบ
ตอนนี้เรารู้แล้วว่าวงจรของเราควรมีหน้าตาเป็นอย่างไร ก็ถึงเวลาประสานรุ่นถาวรบนบอร์ดสร้างต้นแบบ เนื่องจากฉันใช้ Pi Zero W ฉันจึงได้บอร์ดโปรโตขนาดเล็ก
ฉันคิดว่ามันคงจะดีถ้าใช้รูปแบบ Zero และสามารถซ้อนบอร์ดได้ตั้งแต่หนึ่งบอร์ดขึ้นไป ซึ่งเป็นโมดูลเสริมที่ Raspberry Pi เรียกว่า HAT (Hardware Attached on Top) ในทางเทคนิคแล้ว เนื่องจากไม่มี EEPROM ใดๆ และไม่ได้ลงทะเบียนเอง มันไม่ใช่ HAT แต่ฉันต้องเรียกมันว่าบางอย่าง แต่รูปแบบก็ติดตั้งได้อย่างสวยงามและขจัดรังหนูของสายไฟออกไปได้ จึงเป็นเรื่องที่ดี
ความท้าทายคือโปรโตบอร์ดมีขนาดเล็ก คุณจึงใส่ได้ไม่มาก นอกจากนี้ยังไม่มีรูใดเชื่อมต่อกันเป็นแถวเหมือนบอร์ดโปรโตที่ใหญ่กว่า แม้ว่าสิ่งนี้อาจดูไม่สะดวก แต่จริงๆ แล้วมันเป็นเครื่องช่วยชีวิต
สิ่งที่ฉันคิดคือฉันสามารถสร้างหมวกสำหรับประตูโรงรถแต่ละบานที่ฉันต้องการควบคุมได้ ด้วยวิธีนี้ คุณสามารถขยายโครงการนี้ให้เหมาะกับความต้องการของคุณได้
บนบอร์ดโปรโต ฉันพบว่ามีพื้นที่เพียงพอที่จะสร้างสามวงจร:
- วงจรรีเลย์
- วงจรเซนเซอร์
- วงจรเซ็นเซอร์ที่สอง
นั่นค่อนข้างดีสำหรับโครงการประตูโรงรถใด ๆ
สิ่งที่ฉันทำคือใช้ GPIO17 และ 27 สำหรับเซ็นเซอร์ และใช้ GPIO12 สำหรับรีเลย์ สิ่งที่ดีจริงๆเกี่ยวกับโปรโตบอร์ดนี้คือคุณสามารถต่อสายไปยัง GPIO ได้โดยไม่ต้องแตะส่วนหัว แต่ใช่ คุณจะต้องบัดกรีส่วนหัวที่ซ้อนกันเพิ่มเติมจากตัวต้านทานของคุณ (และ LED หรือไม่ก็ได้)
ฉันค่อนข้างจะสร้างวงจรที่เราสร้างต้นแบบขึ้นมาใหม่บนกระดาน คุณสามารถบอกได้ว่าการบัดกรีของฉันไม่สมบูรณ์แบบ แต่ก็ยังใช้งานได้ (กระดานถัดไปจะดีกว่าตั้งแต่ฉันฝึกฝนมา) ฉันมี Aoyue 469 และผมที่อยู่เหนือการตั้งค่า 4 คืออุณหภูมิที่ดีที่สุดตามคำแนะนำสำหรับการบัดกรีส่วนหัว GPIO
ฉันใช้แถวที่เชื่อมต่อด้านนอกสำหรับกราวด์และด้านในสำหรับ 3.3V และฉันใช้ลวดตัวต้านทานเพื่อทำหน้าที่เป็นสะพาน เนื่องจากเราไม่มีแถวที่เชื่อมต่อกัน ส่วนที่เหลือทั้งหมดเป็นแนวทแยงและเอียงไปด้านข้างเพราะนั่นเป็นวิธีที่ดีที่สุดที่ฉันสามารถหาได้พอดีกับพวกเขาบนกระดาน
จาก L-R (ดูที่ด้านหน้า, ด้านตัวต้านทาน) พินเอาต์พุตที่ฉันเพิ่มนั้นใช้สำหรับสาย GPIO ของเซ็นเซอร์, สาย GPIO ของเซ็นเซอร์ตัวที่สอง และสาย GPIO ของรีเลย์ แทนที่จะเดินสายตรงไปยัง GPIO ซึ่งเราทำได้จากส่วนหัว หมุดเหล่านี้เชื่อมต่อกับตัวต้านทานทั้งหมดของเรา และในกรณีของเซ็นเซอร์ ฉันได้เพิ่ม microLED เข้าไป (โปรดสังเกตว่า LED อยู่ในวงจรที่แยกจากกันโดยสิ้นเชิงอย่างไร ดังนั้นหากไฟดับ วงจรจะยังคงทำงานอยู่)
ไฟล์แนบเป็นไฟล์ Fritzing แต่เนื่องจาก Instructables มีปัญหากับการอัปโหลดไฟล์ ฉันต้องให้นามสกุล "txt" เท็จเพื่อฝัง
ขั้นตอนที่ 10: การอ้างอิง
โครงการเปิดประตูโรงรถ Raspberry Pi (แรงบันดาลใจ)
Idiot's Guide to a Raspberry Pi Garage Door Opener
ที่เปิดประตูโรงรถ iPhone หรือ Android
ฉันควรใช้ตัวต้านทานหรือไม่?
การใช้ตัวต้านทานแบบดึงขึ้นและแบบดึงลงบน Raspberry Pi
การตั้งค่า SSH
Raspberry Pi Pin ไดอะแกรม
คำสั่ง SYSFS
การเดินสายไฟPi
ตัวต้านทานและไฟ LED
การป้องกัน (sic) GPIO Pins
เครื่องคำนวณรหัสสีตัวต้านทานและแผนภูมิ
ตัวต้านทานแบบดึงขึ้นและแบบดึงลง
เกณฑ์แรงดัน GPIO
ระดับแรงดันไฟฟ้าอินพุต GPIO
การควบคุม GPIO ใน config.txt
GPIO ดึงขึ้น Resisance (sic)
เหตุใดเราจึงต้องการตัวต้านทานการดึงภายนอกเมื่อไมโครคอนโทรลเลอร์มีตัวต้านทานการดึงภายใน
Raspberry Pi HAT คืออะไร?
วิธีการบัดกรีตัวเชื่อมต่อ Raspberry Pi Zero W GPIO