สารบัญ:
- ขั้นตอนที่ 1: พาวเวอร์ซัพพลาย
- ขั้นตอนที่ 2: อินพุตดิจิตอล
- ขั้นตอนที่ 3: เอาต์พุตดิจิทัล
- ขั้นตอนที่ 4: ไมโครคอนโทรลเลอร์ Oscillator
- ขั้นตอนที่ 5: ไฟ LED แสดงสถานะ
- ขั้นตอนที่ 6: วงจรรีเซ็ตไมโครโปรเซสเซอร์
- ขั้นตอนที่ 7: โมดูล SIM800L
- ขั้นตอนที่ 8: ไมโครคอนโทรลเลอร์
- ขั้นตอนที่ 9: เพิ่มประสิทธิภาพหน่วยความจำ SRAM
- ขั้นตอนที่ 10: ขนาดบัฟเฟอร์อนุกรมของซอฟต์แวร์
- ขั้นตอนที่ 11: การสร้างบอร์ดพีซี
- ขั้นตอนที่ 12: การประกอบบอร์ด PC
- ขั้นตอนที่ 13: การเขียนโปรแกรม AtMega328p
- ขั้นตอนที่ 14: เชื่อมต่อยูนิต
- ขั้นตอนที่ 15: การตั้งค่าเริ่มต้น
- ขั้นตอนที่ 16: คำสั่ง SMS
วีดีโอ: หน่วยควบคุมระยะไกล GSM/SMS ที่ใช้ Arduino: 16 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
! ! ! สังเกต ! !
เนื่องจากมีการอัปเกรดเสาสัญญาณโทรศัพท์มือถือในพื้นที่ของฉัน ฉันจึงไม่สามารถใช้โมดูล GSM นี้ได้อีกต่อไป หอคอยที่ใหม่กว่าไม่รองรับอุปกรณ์ 2G อีกต่อไป ดังนั้นฉันจึงไม่สามารถให้การสนับสนุนโครงการนี้ได้อีกต่อไป
ด้วยโมดูล GSM ที่หลากหลายสำหรับผู้ที่ชื่นชอบงานอดิเรก พวกเราส่วนใหญ่จึงตัดสินใจซื้อโมดูลดังกล่าว ฉันซื้อโมดูล SIM800L ในเครื่อง และลงเอยด้วยการใช้คำสั่งต่างๆ ของโมดูล
การใช้ Arduino Uno และ Arduino IDE ทำให้ฉันสามารถเปลี่ยนความคิดของฉันให้เป็นจริงได้ สิ่งนี้ไม่ได้มาง่ายๆ ด้วย SINGLE BIGGEST ISSUE ที่มีข้อจำกัดเพียง 2KB SRAM หลังจากค้นคว้าข้อมูลมากมายบนอินเทอร์เน็ตและในฟอรัมต่างๆ ฉันก็สามารถเอาชนะข้อจำกัดนี้ได้
เทคนิคการเขียนโปรแกรมต่างๆ ความเข้าใจที่ดีขึ้นของคอมไพเลอร์ Arduino และการใช้ซิมการ์ดและ EEPROM สำหรับหน่วยความจำเพิ่มเติม บันทึกโครงการนี้ หลังจากการเปลี่ยนแปลงโค้ดบางส่วน ได้มีการสร้างและทดสอบต้นแบบที่เสถียรในช่วงเวลาหนึ่งสัปดาห์
ข้อเสียของ SRAM ที่จำกัดคือตัวเครื่องไม่สามารถติดตั้งจอแสดงผลและปุ่มผู้ใช้ได้ ส่งผลให้มีการเขียนโค้ดใหม่ทั้งหมด หากไม่มีอินเทอร์เฟซผู้ใช้ ทางเลือกเดียวที่เหลืออยู่ในการดำเนินการกับโครงการคือการใช้ข้อความ SMS เพื่อกำหนดค่าหน่วยและผู้ใช้
กลายเป็นโครงการที่น่าตื่นเต้นและมีอนาคตเพิ่มมากขึ้นในขณะที่การพัฒนาดำเนินต่อไป
เป้าหมายหลักของฉันคือการยึดติดกับ Arduino Uno หรือในกรณีนี้คือ ATMEGA328p และไม่ใช้ส่วนประกอบยึดพื้นผิวใดๆ ซึ่งจะทำให้ประชาชนทั่วไปสามารถคัดลอกและสร้างหน่วยได้ง่ายขึ้น
สเปคของหน่วย:
- สามารถตั้งโปรแกรมผู้ใช้ได้สูงสุด 250 คนในเครื่อง
- สี่เอาต์พุตดิจิตอล
- อินพุตดิจิตอลสี่ช่อง
- แต่ละเอาต์พุตสามารถกำหนดค่าเป็นเอาต์พุต PULSE หรือ ON/OFF
- สามารถกำหนดระยะเวลาพัลส์เอาต์พุตได้ระหว่าง 0.5.. 10 วินาที
- แต่ละอินพุตสามารถกำหนดค่าให้ทริกเกอร์การเปลี่ยนแปลงจาก OFF เป็น ON
- แต่ละอินพุตสามารถกำหนดค่าให้ทริกเกอร์การเปลี่ยนแปลง ON เป็น OFF ได้
- สามารถตั้งเวลาหน่วงเวลาอินพุตได้ระหว่าง 0 วินาทีถึง 1 ชั่วโมง
- ข้อความ SMS สำหรับการเปลี่ยนแปลงอินพุตสามารถส่งไปยังผู้ใช้ที่แตกต่างกัน 5 คน
- ผู้ใช้สามารถตั้งค่าชื่อและข้อความสถานะสำหรับแต่ละอินพุตได้
- ผู้ใช้สามารถตั้งค่าชื่อและข้อความสถานะสำหรับแต่ละเอาต์พุตได้
- สามารถกำหนดค่าหน่วยให้รับข้อความยอดคงเหลือในซิมการ์ดผ่านการส่งข้อความ USSD
- ผู้ใช้ทุกคนสามารถขออัพเดตสถานะ I/O ของเครื่องได้
- ผู้ใช้ทุกคนสามารถควบคุมเอาต์พุตแต่ละรายการผ่านข้อความ SMS ได้
- ผู้ใช้ทุกคนสามารถควบคุมแต่ละเอาท์พุตได้โดยการเรียกยูนิต
คุณลักษณะด้านความปลอดภัย
- การตั้งค่าเริ่มต้นของเครื่องสามารถทำได้ในขณะที่อยู่ที่เครื่องเท่านั้น
- การตั้งค่าเริ่มต้นสามารถทำได้โดย MASTER USER. เท่านั้น
- คำสั่งการตั้งค่าเริ่มต้นจะถูกปิดใช้งานโดยอัตโนมัติหลังจากสิบนาที
- เฉพาะการโทรและข้อความ SMS จากผู้ใช้ที่รู้จักเท่านั้นที่สามารถควบคุมเครื่องได้
- ผู้ใช้สามารถใช้งานเอาต์พุตที่กำหนดโดย MASTER USER. เท่านั้น
คุณสมบัติอื่นๆ
- โทรเข้าเครื่องนี้ฟรี เนื่องจากไม่มีผู้รับสาย
- เมื่อมีการเรียกยูนิต การโทรจะลดลงหลังจาก 2 วินาทีเท่านั้น นี่เป็นการยืนยันกับผู้โทรว่าเครื่องตอบรับสาย
- หากผู้ให้บริการซิมการ์ดสนับสนุนข้อความ USSD ผู้ใช้หลักสามารถสอบถามยอดคงเหลือได้ ข้อความ USSD ที่มียอดคงเหลือจะถูกส่งต่อไปยัง MASTER USER
ขั้นตอนที่ 1: พาวเวอร์ซัพพลาย
เพื่อให้เครื่องสามารถเชื่อมต่อกับระบบรักษาความปลอดภัยมาตรฐานได้ (ระบบเตือนภัย ประตูโรงรถไฟฟ้า มอเตอร์ประตูไฟฟ้า) เครื่องจะใช้พลังงานจาก DC 12V ซึ่งปกติจะมีอยู่ในระบบดังกล่าว
จ่ายไฟที่ขั้ว 12V IN และ 0V และได้รับการป้องกันโดยฟิวส์ 1A มีขั้วต่อ OUT 12V เพิ่มเติม และป้องกันโดยฟิวส์ด้วย
Diode D1 ปกป้องยูนิตจากการเชื่อมต่อขั้วย้อนกลับบนสาย 12V
ตัวเก็บประจุ C1 และ C2 จะกรองสัญญาณรบกวนใดๆ ที่มีอยู่ในสายจ่ายไฟ 12V แหล่งจ่ายไฟ 12V ใช้สำหรับจ่ายไฟให้กับรีเลย์ของยูนิต
แหล่งจ่ายไฟ 5V ประกอบด้วยตัวควบคุมแรงดันไฟฟ้า LM7805L และเอาต์พุต +5V ที่เสถียรซึ่งจำเป็นสำหรับโมดูล SIM800L GSM รวมถึงไมโครโปรเซสเซอร์ ตัวเก็บประจุ C3 และ C4 จะกรองสัญญาณรบกวนที่อาจปรากฏบนสายจ่ายไฟ +5V ตัวเก็บประจุอิเล็กโทรไลต์ขนาดใหญ่แบบสัมพัทธ์ถูกนำมาใช้ เนื่องจากโมดูล SIM800L GSM ใช้พลังงานเพียงเล็กน้อยในการส่งสัญญาณ
ไม่จำเป็นต้องใช้แผ่นระบายความร้อนบนตัวควบคุมแรงดันไฟฟ้า
ขั้นตอนที่ 2: อินพุตดิจิตอล
สัญญาณอินพุตดิจิตอลทั้งหมด 12V และต้องเชื่อมต่อกับไมโครคอนโทรลเลอร์ 5V สำหรับสิ่งนี้ ออปโตคัปปลิ้งใช้เพื่อแยกสัญญาณ 12V ออกจากระบบ 5V
ตัวต้านทานอินพุต 1K จะจำกัดกระแสอินพุตของออปโตคัปปลิ้งไว้ที่ประมาณ 10mA
เนื่องจากข้อจำกัดด้านพื้นที่ จึงไม่มีที่ว่างบนบอร์ด PC สำหรับตัวต้านทานแบบดึงขึ้น 5V ไมโครคอนโทรลเลอร์ถูกตั้งค่าเพื่อเปิดใช้งานพินอินพุทดึงอัพที่อ่อนแอ
เมื่อไม่มีสัญญาณบนอินพุต (LOW) ของ opto coupler จะไม่มีกระแสไหลผ่าน LED opto coupler ดังนั้นทรานซิสเตอร์ opto coupler จึงถูกปิด การดึงที่อ่อนแอของไมโครคอนโทรลเลอร์จะดึงตัวสะสมขึ้นเกือบ 5V และจะถูกมองว่าเป็นตรรกะ HIGH โดยไมโครคอนโทรลเลอร์
ด้วยการใช้ 12V (สูง) กับอินพุตของ opto coupler ประมาณ 10mA จะไหลผ่าน LED opto coupler ดังนั้นทรานซิสเตอร์ opto coupler จะถูกเปิด สิ่งนี้จะดึงตัวสะสมลงมาที่เกือบ 0V และจะถูกมองว่าเป็นตรรกะ LOW โดยไมโครคอนโทรลเลอร์
โปรดทราบว่าอินพุตที่ไมโครคอนโทรลเลอร์มองเห็นจะกลับด้านเมื่อเทียบกับอินพุต 12V
รหัสปกติในการอ่านพินอินพุตมีลักษณะดังนี้:
อินพุตบูลีน = digitalRead (อินพุตพิน);
ในการแก้ไขสัญญาณกลับด้าน ให้ใช้รหัสต่อไปนี้:
อินพุตบูลีน = !digitalRead(inputpin); // หมายเหตุ ! ข้างหน้าของการอ่าน
ตอนนี้อินพุตที่เห็นโดยไมโครคอนโทรลเลอร์จะสอดคล้องกับอินพุตบนอินพุต 12V
วงจรอินพุตสุดท้ายประกอบด้วย 4 อินพุตดิจิตอล แต่ละอินพุตเชื่อมต่อกับเทอร์มินัลบนบอร์ด PC
ขั้นตอนที่ 3: เอาต์พุตดิจิทัล
โดยปกติ ด้วยวงจรขับรีเลย์จำนวนน้อยที่สุด วิธีที่ดีที่สุดคือการใช้วงจรขับทรานซิสเตอร์ดังที่แสดง เป็นเรื่องง่าย ต้นทุนต่ำ และมีประสิทธิภาพ
ตัวต้านทานให้การดึงลงสู่กราวด์ และข้อจำกัดกระแสของฐานทรานซิสเตอร์ ทรานซิสเตอร์ถูกใช้เพื่อเพิ่มกระแสที่มีอยู่เพื่อขับรีเลย์ ด้วยการดึงเพียง 1mA จากพินไมโครคอนโทรลเลอร์ ทรานซิสเตอร์สามารถเปลี่ยนโหลดได้ 100mA มากเกินพอสำหรับรีเลย์ส่วนใหญ่ ไดโอดเป็นไดโอดแบบฟลายแบ็ค ปกป้องวงจรจากไฟกระชากแรงสูงในระหว่างการสลับรีเลย์ ข้อดีเพิ่มเติมของการใช้วงจรนี้คือแรงดันไฟฟ้าในการทำงานของรีเลย์อาจแตกต่างจากแรงดันไฟฟ้าของไมโครคอนโทรลเลอร์ ดังนั้น แทนที่จะใช้รีเลย์ 5V เราสามารถใช้แรงดัน DC ใดๆ ที่สูงถึง 48V ได้
ขอแนะนำ ULN2803
ยิ่งโปรเจ็กต์ต้องการรีเลย์มากเท่าไหร่ จำนวนส่วนประกอบก็จะยิ่งมากขึ้นเท่านั้น ซึ่งจะทำให้การออกแบบ PCB ยากขึ้นและอาจใช้พื้นที่ PCB อันมีค่า แต่การใช้อาร์เรย์ทรานซิสเตอร์ เช่น ULN2803 จะช่วยให้ PCB มีขนาดเล็กลงได้อย่างแน่นอน ULN2803 เหมาะอย่างยิ่งสำหรับอินพุต 3.3V และ 5V จากไมโครคอนโทรลเลอร์ และสามารถขับรีเลย์ได้ถึง 48V DC ULN2803 นี้มีวงจรทรานซิสเตอร์ 8 ตัว โดยแต่ละวงจรจะติดตั้งส่วนประกอบทั้งหมดที่จำเป็นสำหรับสวิตช์รีเลย์
วงจรเอาท์พุตสุดท้ายประกอบด้วย ULN3803 ขับรีเลย์เอาต์พุต 12V DC จำนวน 4 ตัว หน้าสัมผัสของรีเลย์แต่ละตัวมีอยู่ในเทอร์มินัลของบอร์ดพีซี
ขั้นตอนที่ 4: ไมโครคอนโทรลเลอร์ Oscillator
วงจรออสซิลเลเตอร์
ไมโครคอนโทรลเลอร์ต้องการออสซิลเลเตอร์เพื่อให้ทำงานได้อย่างถูกต้อง เพื่อให้เป็นไปตามการออกแบบ Arduino Uno วงจรจะใช้ออสซิลเลเตอร์ 16MHz มาตรฐาน มีสองตัวเลือก:
คริสตัล
วิธีนี้ใช้คริสตัลที่เชื่อมต่อกับตัวเก็บประจุโหลดสองตัว นี่เป็นตัวเลือกที่พบบ่อยที่สุด
เรโซเนเตอร์
เรโซเนเตอร์นั้นเป็นคริสตัลและตัวเก็บประจุโหลดสองตัวในแพ็คเกจ 3 พินเดียว ซึ่งจะช่วยลดจำนวนส่วนประกอบ และเพิ่มพื้นที่ว่างบนบอร์ด PC
เพื่อรักษาจำนวนส่วนประกอบให้ต่ำที่สุดเท่าที่จะเป็นไปได้ ฉันจึงเลือกใช้เรโซเนเตอร์ 16MHz
ขั้นตอนที่ 5: ไฟ LED แสดงสถานะ
วงจรใดที่ไม่มีไฟ LED บ้าง? มีการจัดเตรียมบนบอร์ด PC สำหรับ LED 3 มม.
ตัวต้านทาน 1K ใช้เพื่อจำกัดกระแสผ่าน LED ให้น้อยกว่า 5mA เมื่อใช้ LED ความสว่างสูง 3 มม. ความสว่างจะดีเยี่ยม
เพื่อให้เข้าใจได้ง่ายของไฟ LED แสดงสถานะ จะใช้สองสี ด้วยการรวม LED สองดวงเข้ากับสัญญาณไฟกะพริบ สามารถรับข้อมูลจำนวนมากได้จาก LED เพียงสองดวงเท่านั้น
ไฟ LED สีแดง
ไฟ LED สีแดงใช้เพื่อระบุสภาวะความผิดปกติ การหน่วงเวลานาน คำสั่งที่ไม่ถูกต้อง
ไฟ LED สีเขียว
ไฟ LED สีเขียวใช้เพื่อระบุอินพุตและคำสั่งที่ถูกต้องและ/หรือถูกต้อง
ขั้นตอนที่ 6: วงจรรีเซ็ตไมโครโปรเซสเซอร์
ด้วยเหตุผลด้านความปลอดภัย ฟังก์ชันบางอย่างของเครื่องจะใช้งานได้ภายใน 10 นาทีแรกหลังจากเปิดเครื่องเท่านั้น
ด้วยปุ่มรีเซ็ต ไม่จำเป็นต้องปิดเครื่องเพื่อรีเซ็ตเครื่อง
มันทำงานอย่างไร
ตัวต้านทาน 10K จะทำให้สาย RESET อยู่ใกล้กับ 5V เมื่อกดปุ่ม สาย RESET จะถูกดึงไปที่ 0V ซึ่งจะทำให้ไมโครคอนโทรลเลอร์ถูกรีเซ็ต เมื่อปล่อยปุ่ม บรรทัด RESET จะกลับไปเป็น %v เป็นการรีสตาร์ทไมโครคอนโทรลเลอร์
ขั้นตอนที่ 7: โมดูล SIM800L
หัวใจของตัวเครื่องคือโมดูล SIM800L GSM โมดูลนี้ใช้พิน I/O เพียง 3 พินบนไมโครคอนโทรลเลอร์
โมดูลเชื่อมต่อกับไมโครคอนโทรลเลอร์ผ่านพอร์ตอนุกรมมาตรฐาน
- คำสั่งทั้งหมดไปยังเครื่องจะถูกส่งผ่านพอร์ตอนุกรมโดยใช้คำสั่ง AT มาตรฐาน
- เมื่อมีสายเรียกเข้าหรือเมื่อได้รับ SMS ข้อมูลจะถูกส่งไปยังไมโครคอนโทรลเลอร์ผ่านพอร์ตอนุกรมโดยใช้ข้อความ ASCII
เพื่อประหยัดพื้นที่ โมดูล GSM จะเชื่อมต่อกับบอร์ด PC ผ่านส่วนหัว 7 พิน ทำให้การถอดโมดูล GSM เป็นเรื่องง่าย นอกจากนี้ยังช่วยให้ผู้ใช้ใส่/ถอดซิมการ์ดที่ด้านล่างของโมดูลได้อย่างง่ายดาย
จำเป็นต้องมีซิมการ์ดที่ใช้งานอยู่ และซิมการ์ดจะต้องสามารถส่งและรับข้อความ SMS ได้
การตั้งค่าโมดูล SIM800L GSM
ในการเปิดเครื่อง หมุดรีเซ็ตโมดูล GSM จะถูกดึงต่ำเป็นเวลาหนึ่งวินาที เพื่อให้แน่ใจว่าโมดูล GSM จะเริ่มทำงานหลังจากที่แหล่งจ่ายไฟเสถียรแล้วเท่านั้น โมดูล GSM จะใช้เวลาสองสามวินาทีในการรีบูต ดังนั้นให้รอ 5 วินาทีก่อนที่จะส่งคำสั่ง AT ไปยังโมดูล
เพื่อให้แน่ใจว่าโมดูล GSM ได้รับการกำหนดค่าให้สื่อสารอย่างถูกต้องกับไมโครคอนโทรลเลอร์ คำสั่ง AT ต่อไปนี้จะถูกใช้ระหว่างการเริ่มต้น:
ที่
ใช้เพื่อตรวจสอบว่ามีโมดูล GSM หรือไม่
AT+CREG?
โพลคำสั่งนี้จนกว่าโมดูล GSM จะถูกลงทะเบียนในเครือข่ายมือถือ
AT+CMGF=1
ตั้งค่าโหมดข้อความ SMS เป็น ASCII
AT+CNMI=1, 2, 0, 0, 0
หากมี SMS ให้ส่งรายละเอียด SMS ไปยังพอร์ตอนุกรมโมดูล GSM
AT+CMGD=1, 4
ลบข้อความ SMS ที่เก็บไว้ในซิมการ์ด
AT+CPBS=\"SM
ตั้งค่าสมุดโทรศัพท์ของโมดูล GSM เป็นซิมการ์ด
AT+COPS=2 จากนั้น AT+CLTS=1 จากนั้น AT+COPS=0
ตั้งเวลาโมดูล GSM เป็นเวลาเครือข่ายมือถือ
รอ 5 วินาทีเพื่อตั้งเวลา
AT+CUSD=1
เปิดใช้งานฟังก์ชันการส่งข้อความ USSD
ขั้นตอนที่ 8: ไมโครคอนโทรลเลอร์
ไมโครคอนโทรลเลอร์เป็น AtMega328p มาตรฐาน เช่นเดียวกับที่ใช้ใน Arduino Uno รหัสจึงเปรียบได้กับทั้งสอง เพื่อให้สามารถตั้งโปรแกรมออนบอร์ดได้ง่าย จึงมีส่วนหัวสำหรับตั้งโปรแกรมแบบ 6 พินบนบอร์ด PC
ส่วนต่างๆ ของยูนิตเชื่อมต่อกับไมโครโปรเซสเซอร์ และรวมถึงสิ่งต่อไปนี้:
- อินพุตดิจิตอลสี่ช่อง
- สี่เอาต์พุตดิจิตอล
- ออสซิลเลเตอร์
- ไฟ LED แสดงสถานะ 2 ดวง
- รีเซ็ตวงจร
- โมดูล SIM800L GSM
การสื่อสารทั้งหมดไปและกลับจากโมดูล GSM ทำได้โดยใช้ฟังก์ชัน SoftwareSerial() วิธีนี้ใช้เพื่อเพิ่มพอร์ตอนุกรมหลักสำหรับ Arduino IDE ในระหว่างขั้นตอนการพัฒนา
ด้วย SRAM เพียง 2KB และ EEPROM 1KB มีหน่วยความจำไม่เพียงพอที่จะจัดเก็บผู้ใช้มากกว่าสองสามรายที่สามารถเชื่อมโยงกับเครื่องได้ เพื่อเพิ่มพื้นที่ว่างใน SRAM ข้อมูลผู้ใช้ทั้งหมดจะถูกเก็บไว้ในซิมการ์ดบนโมดูล GSM ด้วยการจัดเรียงนี้ หน่วยนี้สามารถรองรับผู้ใช้ที่แตกต่างกันได้ถึง 250 คน
ข้อมูลการกำหนดค่าของหน่วยจะถูกเก็บไว้ใน EEPROM ดังนั้นจึงแยกข้อมูลผู้ใช้และข้อมูลระบบออกจากกัน
ยังมีพิน I/O สำรองอยู่หลายตัว อย่างไรก็ตาม ตัวเลือกในการเพิ่มจอแสดงผล LCD และ/หรือแป้นพิมพ์ไม่สามารถทำได้เนื่องจากมี SRAM จำนวนมากที่ใช้โดย SoftWareSerial() รับและส่งบัฟเฟอร์
เนื่องจากไม่มีอินเทอร์เฟซผู้ใช้ใดๆ ในเครื่อง การตั้งค่าและผู้ใช้ทั้งหมดจึงถูกตั้งโปรแกรมโดยใช้ข้อความ SMS
ขั้นตอนที่ 9: เพิ่มประสิทธิภาพหน่วยความจำ SRAM
ค่อนข้างเร็วในขั้นตอนการพัฒนา Arduino IDE รายงานหน่วยความจำ SRAM ต่ำเมื่อรวบรวมโค้ด หลายวิธีถูกนำมาใช้เพื่อเอาชนะสิ่งนี้
จำกัดข้อมูลที่ได้รับบนพอร์ตอนุกรม
โมดูล GSM จะรายงานข้อความทั้งหมดไปยังไมโครคอนโทรลเลอร์ที่พอร์ตอนุกรม เมื่อได้รับข้อความ SMS ความยาวรวมของข้อความที่ได้รับอาจเกิน 200 อักขระ สิ่งนี้สามารถใช้ SRAM ทั้งหมดที่มีอยู่ในชิป AtMega ได้อย่างรวดเร็ว และจะทำให้เกิดปัญหาด้านความเสถียร
เพื่อป้องกันปัญหานี้ ระบบจะใช้เฉพาะอักขระ 200 ตัวแรกของข้อความใดๆ ที่ได้รับจากโมดูล GSM เท่านั้น ตัวอย่างด้านล่างแสดงวิธีการดำเนินการนี้โดยการนับอักขระที่ได้รับในตัวแปรตัวนับ
// สแกนหาข้อมูลจากพอร์ตอนุกรมของซอฟต์แวร์
//---------------------------------------------------------- RxString = ""; ตัวนับ = 0; ในขณะที่(SSerial.available()){ ล่าช้า (1); // หน่วงเวลาสั้น ๆ เพื่อให้เวลาในการวางข้อมูลใหม่ลงในบัฟเฟอร์ // รับอักขระใหม่ RxChar = char(SSerial.read()); // เพิ่มอักขระ 200 ตัวแรกให้กับสตริงถ้า (ตัวนับ <200) { RxString.concat (RxChar); ตัวนับ = ตัวนับ + 1; } }
การลดรหัส Serial.print()
แม้ว่าจะมีประโยชน์ในระหว่างการพัฒนา แต่ Arduino Serial Monitor สามารถใช้ SRAM ได้มาก รหัสได้รับการพัฒนาโดยใช้รหัส Serial.print() น้อยที่สุด ส่วนหนึ่งของรหัสได้รับการทดสอบว่าใช้งานได้ รหัส Serial.print() ทั้งหมดถูกลบออกจากส่วนนั้นของรหัส
ใช้รหัส Serial.print(F((""))
ข้อมูลจำนวนมากที่แสดงตามปกติบน Arduino Serial Monitor เหมาะสมกว่าเมื่อมีการเพิ่มคำอธิบาย ยกตัวอย่างต่อไปนี้:
Serial.println("กำลังรอการดำเนินการเฉพาะ");
สตริง "กำลังรอการดำเนินการเฉพาะ" ได้รับการแก้ไขแล้วและไม่สามารถเปลี่ยนแปลงได้
ในระหว่างการคอมไพล์โค้ด คอมไพเลอร์จะรวมสตริง "กำลังรอการดำเนินการเฉพาะ" ไว้ในหน่วยความจำ FLASH
นอกจากนี้ คอมไพเลอร์เห็นว่าสตริงเป็นค่าคงที่ ใช้โดยคำสั่ง "Serial.print" หรือ "Serial.println" ในระหว่างการบูตไมโคร ค่าคงที่นี้จะอยู่ในหน่วยความจำ SRAM ด้วย
การใช้คำนำหน้า "F" ในฟังก์ชัน Serial.print() จะเป็นการบอกคอมไพเลอร์ว่าสตริงนี้มีอยู่ในหน่วยความจำ FLASH เท่านั้น สำหรับตัวอย่างนี้ สตริงประกอบด้วยอักขระ 28 ตัว นี่คือ 28 ไบต์ที่สามารถเพิ่มใน SRAM
Serial.println(F("กำลังรอการดำเนินการเฉพาะ"));
เมธอดนี้ยังใช้กับคำสั่ง SoftwareSerial.print() เนื่องจากโมดูล GSM ทำงานบนคำสั่ง AT โค้ดดังกล่าวจึงมีคำสั่ง SoftwareSerial.print("xxxx") จำนวนมาก การใช้คำนำหน้า "F" ทำให้ SRAM ว่างเกือบ 300 ไบต์
อย่าใช้พอร์ตอนุกรมของฮาร์ดแวร์
หลังจากการดีบักโค้ด พอร์ตอนุกรมของฮาร์ดแวร์ถูกปิดใช้งานโดยการลบคำสั่ง ALL Serial.print() สิ่งนี้ทำให้ SRAM เพิ่มขึ้นอีกสองสามไบต์
หากไม่มีคำสั่ง Serial.print() เหลืออยู่ในโค้ด SRAM เพิ่มเติม 128 ไบต์ก็พร้อมใช้งาน ทำได้โดยการลบพอร์ตอนุกรมของฮาร์ดแวร์ออกจากรหัส สิ่งนี้จะเพิ่มการส่งข้อมูล 64 ไบต์และบัฟเฟอร์รับ 64 ไบต์
// Serial.begin(9600); // ปิดการใช้งานพอร์ตอนุกรมของฮาร์ดแวร์
การใช้ EEPROM สำหรับสตริง
สำหรับแต่ละอินพุตและเอาต์พุต จำเป็นต้องบันทึกสามสตริง คือชื่อช่อง สตริงเมื่อเปิดช่อง และสตริงเมื่อปิดช่อง
ด้วยช่อง I/O ทั้งหมด 8 ช่อง จะเป็น
- 8 สตริงที่มีชื่อช่อง แต่ละตัวยาว 10 ตัว
- 8 สตริงที่มีช่องบนคำอธิบายแต่ละ 10 อักขระยาว
- 8 สตริงที่มีช่อง Off Description แต่ละตัวยาว 10 ตัว
โฆษณานี้มีขนาดไม่เกิน 240 ไบต์ของ SRAM แทนที่จะเก็บสตริงเหล่านี้ใน SRAM สตริงเหล่านี้จะถูกเก็บไว้ใน EEPROM สิ่งนี้ทำให้ SRAM เพิ่มขึ้นอีก 240 ไบต์
ประกาศสตริงที่มีความยาวที่ถูกต้อง
โดยปกติ ตัวแปรจะถูกประกาศไว้ที่จุดเริ่มต้นของโค้ด ข้อผิดพลาดทั่วไปเมื่อประกาศตัวแปรสตริงคือ เราไม่ประกาศสตริงด้วยจำนวนอักขระที่ถูกต้อง
สตริง GSM_Nr = "";
สตริง GSM_Name = ""; สตริง GSM_Msg = "";
ในระหว่างการเริ่มต้น ไมโครคอนโทรลเลอร์จะไม่จัดสรรหน่วยความจำใน SRAM สำหรับตัวแปรเหล่านี้ ซึ่งภายหลังอาจทำให้เกิดความไม่เสถียรเมื่อใช้สตริงเหล่านี้
เพื่อป้องกันสิ่งนี้ ให้ประกาศสตริงด้วยจำนวนอักขระที่ถูกต้องซึ่งสตริงจะใช้ในซอฟต์แวร์
สตริง GSM_Nr = "1000000000";
สตริง GSM_Name = "2000000000"; สตริง GSM_Msg = "3000000000";
สังเกตว่าฉันไม่ได้ประกาศสตริงที่มีอักขระเดียวกันอย่างไร หากคุณประกาศสตริงเหล่านี้ทั้งหมดโดยพูดว่า "1234567890" คอมไพเลอร์จะเห็นสตริงเดียวกันในตัวแปรทั้งสาม และจัดสรรหน่วยความจำใน SRAM ให้เพียงพอสำหรับหนึ่งในสตริงเท่านั้น
ขั้นตอนที่ 10: ขนาดบัฟเฟอร์อนุกรมของซอฟต์แวร์
ในรหัสต่อไปนี้ คุณจะสังเกตเห็นว่าสามารถอ่านอักขระได้สูงสุด 200 ตัวจากพอร์ตอนุกรมของซอฟต์แวร์
// สแกนหาข้อมูลจากพอร์ตอนุกรมของซอฟต์แวร์
//---------------------------------------------------------- RxString = ""; ตัวนับ = 0; ในขณะที่(SSerial.available()){ ล่าช้า (1); // หน่วงเวลาสั้น ๆ เพื่อให้เวลาในการวางข้อมูลใหม่ลงในบัฟเฟอร์ // รับอักขระใหม่ RxChar = char(SSerial.read()); // เพิ่มอักขระ 200 ตัวแรกให้กับสตริงถ้า (ตัวนับ <200) { RxString.concat (RxChar); ตัวนับ = ตัวนับ + 1; } }
สิ่งนี้ต้องการบัฟเฟอร์อย่างน้อย 200 ไบต์สำหรับพอร์ตอนุกรมของซอฟต์แวร์เช่นกัน โดยค่าเริ่มต้น บัฟเฟอร์พอร์ตอนุกรมของซอฟต์แวร์จะอยู่ที่ 64 ไบต์เท่านั้น หากต้องการเพิ่มบัฟเฟอร์นี้ ให้ค้นหาไฟล์ต่อไปนี้:
SoftwareSerial.h
เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ และเปลี่ยนขนาดบัฟเฟอร์เป็น 200
/******************************************************************************
* คำจำกัดความ ************************************************ ******************************/ #ifndef _SS_MAX_RX_BUFF #define _SS_MAX_RX_BUFF 200 // ขนาดบัฟเฟอร์ RX #endif
ขั้นตอนที่ 11: การสร้างบอร์ดพีซี
บอร์ดพีซีได้รับการออกแบบโดยใช้ Cadsoft Eagle เวอร์ชันฟรีแวร์ (ฉันเชื่อว่ามีการเปลี่ยนแปลงชื่อ)
- บอร์ดพีซีเป็นแบบด้านเดียว
- ไม่มีการใช้ส่วนประกอบยึดพื้นผิว
- ส่วนประกอบทั้งหมดติดตั้งอยู่บนบอร์ด PC รวมถึงโมดูล SIM800L
- ไม่จำเป็นต้องใช้ส่วนประกอบภายนอกหรือการเชื่อมต่อ
- จัมเปอร์ลวดซ่อนอยู่ใต้ส่วนประกอบเพื่อให้ดูสะอาดตา
ฉันใช้วิธีการต่อไปนี้เพื่อสร้างบอร์ด PC:
- ภาพบอร์ด PC พิมพ์บน Press-n-Peel โดยใช้เครื่องพิมพ์เลเซอร์
- จากนั้นกด Press-n-Peel ลงบนแผ่น PC Board ที่สะอาดและยึดด้วยเทป
- จากนั้นอิมเมจบอร์ด PC จะถูกโอนจาก Press-n-Peel ไปยังบอร์ด PC เปล่าโดยส่งบอร์ดผ่านเครื่องเคลือบบัตร สำหรับฉัน 10 ครั้งผ่านไปได้ดีที่สุด
- หลังจากที่บอร์ด PC เย็นลงจนถึงอุณหภูมิห้อง Press-n-Peel จะค่อยๆ ยกออกจากบอร์ด
- จากนั้นทำการแกะสลักบอร์ด PC โดยใช้ผลึกแอมโมเนียมเพอร์ซัลเฟตที่ละลายในน้ำร้อน
- หลังจากการแกะสลักแล้ว Press-n-Peel สีน้ำเงินและโทนเนอร์สีดำจะถูกลบออกโดยการทำความสะอาดบอร์ด PC ที่แกะสลักด้วยอะซิโตน
- จากนั้นจึงตัดกระดานให้มีขนาดด้วย Dremel
- เจาะรูสำหรับส่วนประกอบเจาะรูทั้งหมดโดยใช้ดอกสว่านขนาด 1 มม.
- ขั้วต่อสกรูขั้วต่อใช้ดอกสว่าน 1.2 มม.
ขั้นตอนที่ 12: การประกอบบอร์ด PC
การประกอบทำได้โดยการเพิ่มส่วนประกอบที่เล็กที่สุดก่อน และค่อยๆ ขยายไปสู่ส่วนประกอบที่ใหญ่ที่สุด
ส่วนประกอบทั้งหมดที่ใช้ในคำแนะนำนี้ ยกเว้นโมดูล SIM800 มีที่มาจากซัพพลายเออร์ในพื้นที่ของฉัน คิดว่าพวกเขามีหุ้นอยู่เสมอ โปรดดูที่ websie แอฟริกาใต้ของพวกเขา:
www.shop.rabtron.co.za/catalog/index.php
บันทึก! ขั้นแรกให้บัดกรีจัมเปอร์สองตัวที่อยู่ใต้ ATMEGA328p IC
คำสั่งดังต่อไปนี้:
- ตัวต้านทานและไดโอด
- ปุ่มรีเซ็ต
- ซ็อกเก็ตไอซี
- ตัวควบคุมแรงดันไฟฟ้า
- หมุดส่วนหัว
- ตัวเก็บประจุขนาดเล็ก
- ไฟ LED
- กล่องฟิวส์
- เทอร์มินัลบล็อก
- รีเลย์
- ตัวเก็บประจุด้วยไฟฟ้า
ก่อนเสียบไอซี ให้ต่อยูนิตเข้ากับ 12V และทดสอบแรงดันไฟฟ้าทั้งหมดว่าถูกต้อง
สุดท้าย ใช้แล็กเกอร์ใสปิดด้านทองแดงของบอร์ด PC เพื่อป้องกันส่วนประกอบต่างๆ
เมื่อแล็คเกอร์แห้งแล้ว ให้ใส่ไอซี แต่ปล่อยโมดูล GSM ไว้จนกว่า AtMega จะถูกตั้งโปรแกรม
ขั้นตอนที่ 13: การเขียนโปรแกรม AtMega328p
# # อัพเกรดเฟิร์มแวร์เป็นเวอร์ชัน 3.02 # #
เปิดใช้งาน SMS เพื่อส่งไปยัง MASTER USER เมื่อพลังงานถูกเรียกคืนไปยังอุปกรณ์
ฉันกำลังใช้ Arduino Uno พร้อมตัวป้องกันการเขียนโปรแกรมเพื่อตั้งโปรแกรมยูนิต สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ Arduino Uno เป็นโปรแกรมเมอร์ โปรดดูคำแนะนำนี้:
Arduino UNO ในฐานะโปรแกรมเมอร์ AtMega328P
ต้องถอดโมดูล GSM ออกจากบอร์ด PC เพื่อเข้าถึงส่วนหัวของโปรแกรม ระวังอย่าให้สายเสาอากาศเสียหายเมื่อถอดโมดูล GSM
เชื่อมต่อสายเคเบิลการเขียนโปรแกรมระหว่างโปรแกรมเมอร์และยูนิตโดยใช้ส่วนหัวของโปรแกรมบนบอร์ด PC และอัปโหลดภาพร่างไปยังยูนิต
ไม่จำเป็นต้องใช้แหล่งจ่ายไฟภายนอก 12V เพื่อตั้งโปรแกรมเครื่อง บอร์ดพีซีจะใช้พลังงานจาก Arduino ผ่านสายเคเบิลการเขียนโปรแกรม
เปิดไฟล์ที่แนบมาใน Arduino IDE และตั้งโปรแกรมไปที่หน่วย
หลังจากตั้งโปรแกรมแล้ว ให้ถอดสายการเขียนโปรแกรมออก แล้วใส่โมดูล GSM
เครื่องพร้อมใช้งานแล้ว
ขั้นตอนที่ 14: เชื่อมต่อยูนิต
การเชื่อมต่อกับตัวเครื่องทั้งหมดทำผ่านขั้วต่อสกรู
การเปิดเครื่อง
ตรวจสอบให้แน่ใจว่าคุณได้ใส่ซิมการ์ดที่ลงทะเบียนไว้ในโมดูล GSM และซิมการ์ดนั้นสามารถส่งและรับข้อความ SMS ได้
เชื่อมต่อแหล่งจ่ายไฟ 12V DC เข้ากับ 12V IN และขั้ว 0V ใดๆ เมื่อเปิดเครื่องแล้ว ไฟ LED สีแดงบนบอร์ด PC จะเปิดขึ้น ในเวลาประมาณหนึ่งนาที โมดูล GSM ควรเชื่อมต่อกับเครือข่ายมือถือแล้ว ไฟ LED สีแดงจะดับลง และไฟ LED สีแดงบนโมดูล GSM จะกะพริบอย่างรวดเร็ว
เมื่อถึงขั้นตอนนี้แล้ว หน่วยก็พร้อมที่จะกำหนดค่า
การเชื่อมต่ออินพุต
อินพุตดิจิตอลทำงานบน 12V หากต้องการเปิดอินพุต ต้องใช้ 12V กับอินพุต การถอด 12V จะเป็นการปิดอินพุต
การเชื่อมต่อเอาท์พุต
แต่ละเอาต์พุตประกอบด้วยหน้าสัมผัสการเปลี่ยนแปลง วางสายผู้ติดต่อแต่ละรายตามต้องการ
ขั้นตอนที่ 15: การตั้งค่าเริ่มต้น
ต้องดำเนินการตั้งค่าเริ่มต้นของอุปกรณ์เพื่อให้แน่ใจว่าพารามิเตอร์ทั้งหมดได้รับการตั้งค่าเป็นค่าเริ่มต้นจากโรงงาน และซิมการ์ดที่กำหนดค่าให้ยอมรับข้อมูลผู้ใช้ในรูปแบบที่ถูกต้อง
เนื่องจากคำสั่งทั้งหมดเป็นแบบ SMS คุณจะต้องใช้โทรศัพท์อีกเครื่องเพื่อทำการตั้งค่า
สำหรับการตั้งค่าเริ่มต้น คุณต้องอยู่ที่หน่วย
ตั้งหมายเลขโทรศัพท์ MASTER USER
เนื่องจากมีเพียง MASTER USER เท่านั้นที่สามารถกำหนดค่าเครื่องได้ ขั้นตอนนี้จะต้องดำเนินการก่อน
- หน่วยจะต้องได้รับพลังงาน
- กดและปล่อยปุ่มรีเซ็ต และรอให้ไฟ LED สีแดงบนบอร์ด PC ปิด
- NET LED บนโมดูล GSM จะกะพริบอย่างรวดเร็ว
- ขณะนี้เครื่องพร้อมที่จะยอมรับคำสั่งการตั้งค่าเริ่มต้น จะต้องดำเนินการภายใน 10 นาที
- ส่งข้อความ SMS ที่มี MASTER คำอธิบายไปยังหมายเลขโทรศัพท์ของหน่วย
- หากได้รับ ไฟ LED สีเขียวบนบอร์ด PC จะกะพริบสองครั้ง
- MASTER USER ได้รับการตั้งโปรแกรมแล้ว
คืนค่าหน่วยเป็นค่าเริ่มต้นจากโรงงาน
หลังจากตั้งโปรแกรม MASTER USER แล้ว การตั้งค่าของเครื่องจะต้องตั้งค่าเป็นค่าเริ่มต้นจากโรงงาน
- ส่งข้อความ SMS เฉพาะ CLEARALL ไปยังหมายเลขโทรศัพท์ของหน่วย
- หากได้รับ ไฟ LED สีเขียวและสีแดงบนบอร์ด PC จะกะพริบสลับกันหนึ่งครั้งต่อวินาที เครื่องได้รับการคืนค่าด้วยการตั้งค่าเริ่มต้นจากโรงงาน
- คืนค่าการตั้งค่าทั้งหมดกลับเป็นค่าเริ่มต้นจากโรงงาน
- กดและปล่อยปุ่มรีเซ็ตเพื่อรีบูตเครื่อง
การฟอร์แมตซิมการ์ด
ขั้นตอนสุดท้ายคือการลบข้อมูลทั้งหมดที่เก็บไว้ในซิมการ์ดและกำหนดค่าเพื่อใช้ในเครื่องนี้
- กดและปล่อยปุ่มรีเซ็ต และรอให้ไฟ LED สีแดงบนบอร์ด PC ปิด
- NET LED บนโมดูล GSM จะกะพริบอย่างรวดเร็ว
- ขณะนี้เครื่องพร้อมที่จะยอมรับคำสั่งการตั้งค่าเริ่มต้น จะต้องดำเนินการภายใน 10 นาที
- ส่งข้อความ SMS ที่มีเพียง ERASESIM ไปยังหมายเลขโทรศัพท์ของหน่วย
- หากได้รับ ไฟ LED สีเขียวบนบอร์ด PC จะกะพริบเป็นลำดับต้นๆ
ขณะนี้เครื่องได้รับการกำหนดค่าและพร้อมใช้งานแล้ว
ขั้นตอนที่ 16: คำสั่ง SMS
มีสามประเภทของคำสั่งที่ใช้โดยหน่วย คำสั่งทั้งหมดส่งทาง SMS และทั้งหมดอยู่ในรูปแบบต่อไปนี้:
สั่งการ,,,,,
- คำสั่งทั้งหมด ยกเว้นคำสั่ง NORMAL USER จะคำนึงถึงขนาดตัวพิมพ์
- พารามิเตอร์ไม่คำนึงถึงขนาดตัวพิมพ์
คำสั่งการตั้งค่าเริ่มต้น
อาจารย์ ชื่อ
หมายเลขโทรศัพท์ของผู้ส่ง SMS ใช้เป็นหมายเลขโทรศัพท์ MASTER USER สามารถเพิ่มคำอธิบายสำหรับหน่วยได้ที่นี่
ลบทั้งหมด
รีเซ็ตเครื่องเป็นค่าเริ่มต้นจากโรงงาน
เคลียร์ซิม
ลบข้อมูลทั้งหมดออกจากซิมการ์ด
รีเซ็ต
รีบูตเครื่อง
MASTER USER คำสั่งสำหรับกำหนดค่าเครื่อง
OUTMODE, c, m, t หมายเหตุ ! ! ! ยังไม่ได้ดำเนินการ
ตั้งค่าช่องสัญญาณเฉพาะให้มีเอาต์พุต PULSED, TIMED หรือ LATCHING t คือระยะเวลาเป็นนาทีสำหรับเอาต์พุต TIMED
พัลส์, cccc
ตั้งค่าช่องสัญญาณเฉพาะเป็นเอาต์พุต PULSED หากไม่ได้ตั้งค่า ช่องจะถูกตั้งค่าเป็นเอาต์พุต LATCHING
PULSETIME, tตั้งค่าระยะเวลาเอาต์พุตพัลซิ่งเป็นวินาที (0.. 10s)
อินพุต cccc
ตั้งค่าช่องที่ต้องทริกเกอร์และส่งข้อความ SMS เมื่อสถานะเปลี่ยนจาก OFF เป็น ON
อินพุต cccc
ตั้งค่าช่องสัญญาณที่ต้องทริกเกอร์และส่งข้อความ SMS เมื่อสถานะเปลี่ยนจากเปิดเป็นปิด
INTIME, c, t
ตั้งเวลาหน่วงอินพุตสำหรับตรวจจับการเปลี่ยนแปลงสถานะเป็นวินาที
INTEXT, ch, ชื่อ, เปิด, ปิด
ตั้งชื่อช่องอินพุตแต่ละช่อง, บนข้อความและปิดข้อความ
OUTTEXT, ch, ชื่อ, เปิด, ปิด
ตั้งชื่อช่องสัญญาณออกแต่ละช่องในข้อความและปิดข้อความ
เพิ่ม, ตำแหน่ง, หมายเลข, คำบรรยายภาพ, SMSoutputs, อินพุต
เพิ่มผู้ใช้ลงในซิมการ์ดที่ 'ตำแหน่ง' หน่วยความจำ พร้อมช่องสัญญาณออกและอินพุตที่กำหนดให้กับผู้ใช้
เดล, ที่ตั้ง
ลบผู้ใช้จาก 'ตำแหน่ง' หน่วยความจำซิมการ์ด
ชื่อช่อง
จะพัลส์เอาต์พุตด้วยชื่อ ChannelName
ChannelName, onText หรือ ChannelName, offText
จะเปิด/ปิดเอาต์พุตด้วยชื่อ ChannelName และ onText/offText
คำสั่งผู้ใช้ปกติสำหรับควบคุมเครื่อง
????ขออัปเดตสถานะ I/O SMS สถานะจะถูกส่งไปยังผู้สร้าง
ชื่อช่อง
จะพัลส์เอาต์พุตด้วยชื่อ ChannelName
ChannelName, onText
จะเปิดเอาต์พุตด้วยชื่อ ChannelName และข้อความสถานะบนText
ChannelName, offText จะปิดเอาต์พุตด้วยชื่อ ChannelName และข้อความสถานะ offText
สำหรับคำอธิบายรายละเอียดเพิ่มเติมของคำสั่ง โปรดดูเอกสาร PDF ที่แนบมา
แนะนำ:
นาฬิกา LED ที่ใช้ Neopixels: 4 ขั้นตอน (พร้อมรูปภาพ)
นาฬิกา LED ที่ใช้ Neopixels: ยินดีต้อนรับสู่คำแนะนำของฉันเกี่ยวกับวิธีสร้างนาฬิกา LED โดยใช้ 60 Neopixels คุณจะพบไฟล์ PDF 3 ไฟล์ที่แนบมา ไฟล์หนึ่งสำหรับส่วนของนาฬิกา อีกอันสำหรับฐาน และอันสุดท้ายคือเทมเพลตเพื่อช่วยในการติดกาว ส่วนต่างๆ เข้าด้วยกัน เพื่อคอม
Lora Gateway ที่ใช้ MicroPython ESP32: 10 ขั้นตอน (พร้อมรูปภาพ)
Lora Gateway จาก MicroPython ESP32: Lora ได้รับความนิยมอย่างมากในช่วงไม่กี่ปีที่ผ่านมา โมดูลการสื่อสารไร้สายที่ใช้เทคโนโลยีนี้มักจะราคาถูก (โดยใช้คลื่นความถี่อิสระ) ขนาดเล็ก ประหยัดพลังงาน และมีระยะการสื่อสารที่ยาวนาน และส่วนใหญ่ใช้สำหรับการสื่อสารระหว่างกัน
ATTiny84 ไดร์เวอร์ LED 3A Step-Down ที่ใช้ ATTiny84: 7 ขั้นตอน (พร้อมรูปภาพ)
ATTiny84 ไดร์เวอร์ LED 3A Step-Down ที่ใช้ ATTiny84: หากคุณต้องการจ่ายไฟ LED 10W คุณสามารถใช้ไดรเวอร์ 3A LED นี้ได้ ด้วย LED Cree XPL 3 ดวง คุณสามารถบรรลุ 3000 ลูเมน
บันไดอัตโนมัติ LED "Bloody Red" ที่ใช้ Arduino: 5 ขั้นตอน (พร้อมรูปภาพ)
บันไดอัตโนมัติ LED "Bloody Red" ที่ใช้ Arduino: อะไรนะ ฉันทำบันได LED ที่มีเลือดออกแล้ว! เป็น Instructables ใหม่ที่ใช้ประโยชน์จากการติดตั้งฮาร์ดแวร์บางอย่างที่ฉันได้ทำไปแล้วจากก่อนหน้านี้ที่ฉันสามารถทำได้จากของฉัน ฉันสร้างแอนิเมชั่นสีแดงที่คล้ายกับหยดเลือด เหมาะที่จะเปิดใช้งานโดยอัตโนมัติระหว่าง
MIDI Fighter ที่ใช้ Arduino (ไวต่อการสัมผัส): 7 ขั้นตอน (พร้อมรูปภาพ)
MIDI Fighter (ไวต่อการสัมผัส): MIDI ย่อมาจาก Musical Instrument Digital Interface ที่นี่ เรากำลังสร้างเครื่องบินรบ MIDI ที่ไวต่อการสัมผัส มี 16 แผ่น สิ่งเหล่านี้สามารถเพิ่มขึ้นหรือลดลงได้ ที่นี่ฉันใช้ 16 เนื่องจากพิน Arduino ที่ จำกัด นอกจากนี้ฉันยังใช้พินอินพุตแบบอะนาล็อก