สารบัญ:
- ขั้นตอนที่ 1: ลอจิกซอฟต์แวร์: สถาปัตยกรรมระบบ
- ขั้นตอนที่ 2: ขั้นตอนที่ 1: การเดินสายฮาร์ดแวร์
- ขั้นตอนที่ 3: ขั้นตอนที่ 2: Arduino
- ขั้นตอนที่ 4: ขั้นตอนที่ 3: NodeJS
- ขั้นตอนที่ 5: ขั้นตอนที่ 4: เว็บอินเตอร์เฟส
- ขั้นตอนที่ 6: ผลลัพธ์
วีดีโอ: โครงการ Arduino: ควบคุมอุปกรณ์อิเล็กทรอนิกส์ผ่านอินเทอร์เน็ตโดยใช้ Nodejs + ฐานข้อมูลและเว็บไซต์ SQL: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
โครงการโดย:Mahmed.tech
วันที่สร้าง: 14 กรกฎาคม 2017
ระดับความยาก: เริ่มต้นด้วยความรู้ด้านการเขียนโปรแกรม
ความต้องการของฮาร์ดแวร์:
- Arduino Uno, Nano, Mega (ฉันคิดว่า MCU ส่วนใหญ่ที่มีการเชื่อมต่อแบบอนุกรมจะใช้งานได้)
- ตัวต้านทานกระแสไฟ LED และกระแสไฟเดี่ยว ใช้เครื่องคิดเลขนี้หากคุณไม่แน่ใจ: Ohms Law Calculator
- โพเทนชิออมิเตอร์ 10K
ความต้องการซอฟต์แวร์:
- Arduino IDE
- Node. JS (นี่คือซอฟต์แวร์บนคอมพิวเตอร์ ติดตั้งง่ายมาก)
- MySQL Server (วิธีที่ง่ายที่สุดที่ฉันพบคือการใช้เว็บโฮสติ้งราคาถูก คุณยังสามารถรับชื่อโดเมนฟรีได้)
ภาษาการเขียนโปรแกรมและการเขียนสคริปต์ที่ใช้:
Arduino (ดัดแปลง C/C++), JavaScript (Nodejs), PHP, HTML & CSS
บทนำโปรเจ็กต์นี้โดยย่อ: การควบคุมไมโครคอนโทรลเลอร์ Arduino จากเว็บอินเตอร์เฟส จึงควบคุมอุปกรณ์ไฟฟ้าได้จากทุกที่ด้วยอินเทอร์เน็ต ฉันต้องการขยายความเข้าใจเกี่ยวกับการเขียนโปรแกรมและการพัฒนาเว็บ และจะมีวิธีใดที่จะดีไปกว่าการทำโปรเจ็กต์ที่เรียบง่ายแต่มีประสิทธิภาพ ฮาร์ดแวร์ถูกเก็บไว้ให้น้อยที่สุด ดังนั้นฉันจึงสามารถมุ่งเน้นไปที่ซอฟต์แวร์ได้มากขึ้น ดังนั้นฉันจึงเลือกใช้ LED แบบง่าย ๆ การติดตั้งหม้อ หม้อจะส่งข้อมูลและไฟ LED จะได้รับ (ความสว่าง PWM) การใช้ NodeJS ข้อมูลอนุกรมจะถูกอ่าน (ค่าโพเทนชิออมิเตอร์) และเขียน (ความสว่างนำ) ส่วนที่ยากของโครงการนี้คือการรับข้อมูลเข้าจากตำแหน่งระยะไกล (เว็บเซิร์ฟเวอร์)
ขั้นตอนที่ 1: ลอจิกซอฟต์แวร์: สถาปัตยกรรมระบบ
ข้อมูลโพเทนชิออมิเตอร์:
สิ่งนี้เริ่มต้นที่ Arduino อ่านค่าพ็อตคือการพิมพ์แบบอนุกรม อย่างไรก็ตาม คราวนี้เราจะใช้ Node. JS เพื่ออ่านค่า NodeJS จะเปิดการสื่อสารแบบอนุกรมไปยังพอร์ตเดียวกับที่ Arduino เชื่อมต่อและอ่านค่าพ็อตที่พิมพ์ออกมา จากนั้น NodeJS จะอัปโหลดข้อมูลไปยังฐานข้อมูล SQL ระยะไกล ซึ่งจะเกิดขึ้นทุกครั้งที่พิมพ์ค่า pot ใหม่ หน้าเว็บจะเชื่อมต่อกับช่วงการตั้งค่าฐานข้อมูล SQL และดึงค่าโพเทนชิออมิเตอร์ จากนั้นจะปรากฏบนหน้าเว็บ
ข้อมูลนำ:
สำหรับไฟ LED ความสว่างของ PWM จะถูกตั้งค่าโดยผู้ใช้บนหน้าเว็บระยะไกล ดังนั้นการเดินทางจึงเริ่มต้นที่ฝั่งตรงข้ามของสเปกตรัม ข้อมูลอินพุตจะถูกบันทึกลงในฐานข้อมูล SQL ทุกช่วงที่ตั้งไว้ ฐานข้อมูลจะถูกตรวจสอบการเปลี่ยนแปลงใน PWM นำ ซึ่งทำโดย NodeJS หากค่าต่างจากค่าก่อนหน้า ค่าใหม่จะถูกส่งไปยัง Arduino ผ่านบัสอนุกรม Arduino เปลี่ยนค่าเอาต์พุต PWM ของ led เพื่อเปลี่ยนความสว่าง
เครื่องคิดเลขกฎหมายโอห์มใช้สูตร V = IR และ P = IV = I²R = V²/R สำหรับโครงงานนี้ ฉันจะใช้ไฟ LED สีฟ้า นี่เป็นสิ่งสำคัญเพราะเมื่อความถี่แสงเพิ่มขึ้น แรงดันตกคร่อมก็เพิ่มขึ้นเช่นกัน เนื่องจากแสงสีน้ำเงินมีความถี่สูงกว่าเมื่อเปรียบเทียบกับไฟ LED สีแดง นี่หมายถึงแรงดันไปข้างหน้าที่สูงขึ้น ช่วงการทำงานจะแตกต่างกันไปขึ้นอยู่กับยี่ห้อ ชนิด และขนาด สำหรับการตั้งค่าของฉัน ฉันใช้ตัวต้านทาน 220 Ω แบบอนุกรม ลบกับกราวด์และบวกกับพิน PWM บน Arduino หม้อเชื่อมต่อกับพินอะนาล็อก ด้วย 5VCC ปลายด้านหนึ่ง GND อีกข้างหนึ่งและพินกลางเชื่อมต่อกับพินอะนาล็อก (A0 ในกรณีของฉัน)
ขั้นตอนที่ 2: ขั้นตอนที่ 1: การเดินสายฮาร์ดแวร์
สิ่งนี้ง่ายมาก: เพียงเชื่อมต่อตัวต้านทานจำกัดกระแสของคุณเป็นอนุกรมกับ LED ตรวจสอบให้แน่ใจว่าคุณได้รับไฟ LED ที่ถูกต้อง จุดหนึ่งจะไปที่ GND ในขณะที่อีกจุดหนึ่งจะไปที่ขา Arduino สำหรับการตั้งค่าของฉัน ฉันใช้พิน 12 สำหรับ led และ A7 สำหรับ Pot ฉันไม่มีแผนผังเนื่องจากเป็นวงจรที่ง่ายมาก อย่างไรก็ตาม ฉันพบสิ่งนี้ทางออนไลน์ (ภาพ)
ขั้นตอนที่ 3: ขั้นตอนที่ 2: Arduino
ขั้นแรกให้ตรวจสอบไฟ LED และหม้อว่าทำงานตามที่คาดไว้หรือไม่ สิ่งนี้ลดลงโดยโปรแกรมง่าย ๆ ที่ค่า pot ควบคุมการเป็นผู้นำ ฉันใช้ฟังก์ชันจำกัดเพื่อเปลี่ยนช่วงหม้อจาก 0 ถึง 1023 เป็น 0 ถึง 255 แต่ /4 แบบธรรมดาก็ใช้งานได้เช่นกัน ค่า pot ถูกทำให้เรียบโดยเอาค่าเฉลี่ยจากการอ่าน 10 ค่าที่ต่อเนื่องกัน นี่คือการลบ spikes (อย่างไรก็ตาม การปรับให้เรียบนี้ทำให้เกิดปัญหากับ NodeJS ดังนั้นสิ่งนี้จึงถูกลบออกในภายหลังในโปรเจ็กต์ - มากกว่านั้น)
รหัส Arduino
อ่าน / เขียน Serial ขั้นตอนต่อไปคือการป้อนข้อมูลของผู้ใช้ผ่านหน้าต่างมอนิเตอร์แบบอนุกรมที่จัดเตรียมโดย Arduino ide เพื่อตั้งค่าความสว่าง เมื่อต้องการทำเช่นนี้ serial.parseInt() จะใช้ซึ่งรับค่าจำนวนเต็มและละเว้นสตริง นอกจากนี้ยังมีการเพิ่มการตรวจสอบข้อผิดพลาดในรหัส ช่วงที่ถูกต้องของค่า PWM คือ 0 - 255 เมื่อผู้ใช้ป้อน >255 ก็จะกำหนดค่า 255 และหากผู้ใช้ป้อนค่าหรือ < +/-5 ฉันได้ทำสิ่งนี้เพื่อให้การอ่านมีเสถียรภาพมากขึ้นเนื่องจากเป็นความผันผวน. เหตุใดจึงเป็นปัญหาใหญ่ที่เกี่ยวข้องกับการอัปเดต SQL เพิ่มเติมในภายหลัง
ขั้นตอนที่ 4: ขั้นตอนที่ 3: NodeJS
ฉันจะไม่แสดงวิธีรับหรือตั้งค่าและเซิร์ฟเวอร์ SQL มีแบบฝึกหัดมากมาย
โปรแกรม NodeJS มี 3 ประเด็นหลัก:
อ่านข้อมูลอนุกรม
เขียนข้อมูลอนุกรม
อัปเดตฐานข้อมูล SQL
ในการสร้างการเชื่อมต่อแบบอนุกรมภายใน NodeJS จะต้องดาวน์โหลดโมดูลที่เรียกว่าพอร์ตอนุกรม ซึ่งสามารถทำได้โดยใช้คำสั่ง npm เปิด CMD ในโฟลเดอร์ที่จะเก็บโปรแกรม NodeJS ไว้ ติดตั้งโดยพิมพ์: npm install serialport นอกจากนี้ยังต้องติดตั้งโมดูล SQL เพื่อให้สามารถเชื่อมต่อกับฐานข้อมูล sql: npm install mysql NodeJS - Serial Port ขั้นตอนแรกของฉันกับ NodeJS โปรแกรมคือการอ่านข้อมูลที่พิมพ์และส่งความสว่าง pwm ไปยัง Arduino ทำได้โดยเปิดการเชื่อมต่อแบบอนุกรมที่ braudrate และพอร์ตเดียวกัน เมื่อสร้างการเชื่อมต่อแล้ว ฉันอ่านข้อความที่เข้ามาและพิมพ์ลงในหน้าต่างคอนโซล ปัญหาเกิดขึ้นเมื่อฉันพยายามเขียนค่า pwm เพื่อควบคุมความสว่าง
มันยังคงส่งข้อผิดพลาด: Port Not Open วิธีแก้ปัญหาเริ่มต้นของฉันคือการเรียกใช้ฟังก์ชันการเขียนเมื่อมีข้อมูลขาเข้า อย่างไรก็ตาม นี่เป็นวิธีแก้ไขที่ไม่ดี และฉันค่อนข้างไม่พอใจกับวิธีแก้ปัญหา แม้ว่าจะใช้งานได้ แต่จะส่งเมื่อค่า pot เปลี่ยนไปเท่านั้น โค้ดตัวอย่างสำหรับโมดูลซีเรียลจะไม่ทำงานหากมีข้อผิดพลาดเดียวกัน ต่อมาฉันพบว่าโปรแกรมกำลังพยายามเรียกใช้ฟังก์ชันการเขียนโดยไม่เปิดพอร์ต ซึ่งทำให้เกิดข้อผิดพลาดนั้น ฉันพบปัญหานี้โดยใช้ฟังก์ชัน setInterval()
NodeJS - MySQLไลบรารี MySQL ถูกใช้ (npm ติดตั้ง MySQL) เพื่อเชื่อมต่อกับฐานข้อมูล SQL เนื่องจากเซิร์ฟเวอร์ในตำแหน่งระยะไกลจะใช้ที่อยู่ IP ของเซิร์ฟเวอร์แทน localhost
var con เก็บข้อมูลการเชื่อมต่อในรูปแบบ JSON เมื่อทำการเชื่อมต่อสำเร็จ ฐานข้อมูลสามารถสอบถามข้อมูลได้ มีการสร้างฟังก์ชัน 2 รายการสำหรับอัปเดตตารางอื่นๆ โดยเลือกด้วยพารามิเตอร์ที่ใช้ในแบบสอบถาม SQL ตารางการอัปเดตจะถูกเรียกเมื่อได้รับค่า pot ใหม่และแบบสอบถามการตรวจสอบความสว่างจะทำงานเป็นระยะ
NodeJSCCode ลิงค์
ขั้นตอนที่ 5: ขั้นตอนที่ 4: เว็บอินเตอร์เฟส
เว็บอินเตอร์เฟส
หน้าเว็บหลักเขียนด้วย PHP เนื่องจากฉันมีประสบการณ์บางอย่างจากฐานข้อมูล CO323 ของฉันและโมดูลเว็บที่มหาวิทยาลัยแล้ว ใช้ตารางและแบบฟอร์ม Html เพื่อแสดงข้อมูล sql
รหัสการเข้าถึง PHP SQL: ลิงก์ เลื่อนไปที่ส่วนเว็บอินเตอร์เฟส
HTML & CSS * รหัสเว็บเพจ Javascript: ลิงก์ เลื่อนไปที่ด้านล่าง
หน้าเว็บสุดท้าย