- วัสดุที่ใช้
- โมดูล GPS NEO6M
- 1.3 นิ้ว I2C จอแสดงผล OLED
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม Arduino สำหรับ Arduino OLED Speedometer
Speedometers ใช้เพื่อวัดความเร็วในการเดินทางของยานพาหนะ ก่อนหน้านี้เราใช้เซ็นเซอร์ IR และเซ็นเซอร์ฮอลล์เพื่อสร้างมาตรวัดความเร็วแบบอนาล็อกและมาตรวัดความเร็วแบบดิจิตอลตามลำดับ วันนี้เราจะใช้ GPS ในการวัดความเร็วของยานพาหนะที่กำลังเคลื่อนที่ เครื่องวัดความเร็ว GPS มีความแม่นยำมากกว่าเครื่องวัดความเร็วมาตรฐานเนื่องจากสามารถระบุตำแหน่งรถได้อย่างต่อเนื่องและสามารถคำนวณความเร็วได้ เทคโนโลยี GPS ใช้กันอย่างแพร่หลายในสมาร์ทโฟนและยานพาหนะเพื่อการนำทางและแจ้งเตือนการจราจร
ในโครงการนี้เราจะสร้างเครื่องวัดความเร็ว Arduino GPSโดยใช้โมดูล GPS NEO6M พร้อมจอแสดงผล OLED
วัสดุที่ใช้
- Arduino นาโน
- โมดูล GPS NEO6M
- 1.3 นิ้ว I2C จอแสดงผล OLED
- เขียงหั่นขนม
- การเชื่อมต่อจัมเปอร์
โมดูล GPS NEO6M
ที่นี่เรากำลังใช้โมดูล GPS NEO6M โมดูล GPS NEO-6M เป็นเครื่องรับ GPS ยอดนิยมที่มีเสาอากาศเซรามิกในตัวซึ่งให้ความสามารถในการค้นหาดาวเทียมที่แข็งแกร่ง เครื่องรับนี้มีความสามารถในการตรวจจับตำแหน่งและติดตามดาวเทียมได้มากถึง 22 ดวงและระบุตำแหน่งได้ทุกที่ในโลก ด้วยตัวบ่งชี้สัญญาณออนบอร์ดเราสามารถตรวจสอบสถานะเครือข่ายของโมดูลได้ มีแบตเตอรี่สำรองข้อมูลเพื่อให้โมดูลสามารถบันทึกข้อมูลเมื่อไฟหลักดับโดยไม่ได้ตั้งใจ
หัวใจหลักภายในโมดูลตัวรับสัญญาณ GPS คือชิป GPS NEO-6M จาก u-blox สามารถติดตามดาวเทียมได้มากถึง 22 ดวงใน 50 ช่องสัญญาณและมีระดับความไวที่น่าประทับใจมากคือ -161 dBm เครื่องมือกำหนดตำแหน่ง u-blox 6 50 ช่องนี้มี Time-To-First-Fix (TTFF) ที่ต่ำกว่า 1 วินาที โมดูลนี้รองรับอัตราการรับส่งข้อมูลตั้งแต่ 4800-230400 bps และมีบอดเริ่มต้นที่ 9600
คุณสมบัติ:
- แรงดันไฟฟ้า: (2.7-3.6) V DC
- กระแสไฟที่ใช้งาน: 67 mA
- อัตราบอด: 4800-230400 bps (ค่าเริ่มต้น 9600)
- โปรโตคอลการสื่อสาร: NEMA
- อินเทอร์เฟซ: UART
- เสาอากาศภายนอกและ EEPROM ในตัว
Pinout ของโมดูล GPS:
- VCC: ขาแรงดันไฟฟ้าขาเข้าของโมดูล
- GND: พินกราวด์
- RX, TX: พินการสื่อสาร UART พร้อมไมโครคอนโทรลเลอร์
ก่อนหน้านี้เราได้เชื่อมต่อ GPS กับ Arduino และสร้างโครงการมากมายโดยใช้โมดูล GPS รวมถึงการติดตามยานพาหนะ
1.3 นิ้ว I2C จอแสดงผล OLED
คำว่า OLED ย่อมาจาก“ Organic Light emitting diode” ซึ่ง ใช้เทคโนโลยีเดียวกับที่ใช้ในโทรทัศน์ส่วนใหญ่ของเรา แต่มีพิกเซลน้อยกว่าเมื่อเทียบกับพวกเขา เป็นเรื่องสนุกจริงๆที่จะมีโมดูลการแสดงผลที่ดูดีเหล่านี้เชื่อมต่อกับ Arduino เพราะมันจะทำให้โครงการของเราดูเท่ เราได้กล่าวถึงบทความฉบับเต็มเกี่ยวกับจอแสดงผล OLED และประเภทต่างๆที่นี่ นี่เรากำลังใช้ ขาวดำ 4 ขา SH1106 OLED 1.28” จอแสดงผล จอแสดงผลนี้ใช้ได้เฉพาะกับโหมด I2C เท่านั้น
ข้อกำหนดทางเทคนิค:
- IC ไดร์เวอร์: SH1106
- แรงดันไฟฟ้าอินพุต: 3.3V-5V DC
- ความละเอียด: 128x64
- อินเทอร์เฟซ: I2C
- การบริโภคปัจจุบัน: 8 mA
- สีพิกเซล: น้ำเงิน
- มุมมอง:> 160 องศา
คำอธิบายพิน:
VCC:แหล่งจ่ายไฟเข้า 3.3-5V DC
GND:พินอ้างอิงกราวด์
SCL:เข็มนาฬิกาของอินเทอร์เฟซ I2C
SDA:พิน Serial Data ของอินเทอร์เฟซ I2C
ชุมชน Arduino ได้มอบไลบรารีจำนวนมากให้กับเราแล้วซึ่งสามารถใช้โดยตรงเพื่อทำให้สิ่งนี้ง่ายขึ้นมาก ฉันลองใช้ห้องสมุดสองสามแห่งและพบว่า ห้องสมุด Adafruit_SH1106.h นั้นใช้งานง่ายมากและมีตัวเลือกกราฟิกจำนวนมากดังนั้นเราจะใช้สิ่งเดียวกันในบทช่วยสอนนี้
OLED ดูเท่ห์มากและสามารถเชื่อมต่อกับไมโครคอนโทรลเลอร์อื่น ๆ ได้อย่างง่ายดายเพื่อสร้างโครงการที่น่าสนใจ:
- การเชื่อมต่อจอแสดงผล OLED SSD1306 กับ Raspberry Pi
- การเชื่อมต่อจอแสดงผล OLED SSD1306 กับ Arduino
- นาฬิกาอินเทอร์เน็ตโดยใช้ ESP32 และจอแสดงผล OLED
- เครื่องควบคุมอุณหภูมิ AC อัตโนมัติโดยใช้ Arduino, DHT11 และ IR Blaster
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับเครื่องวัดความเร็ว Arduino GPS ที่ใช้ OLED แสดงไว้ด้านล่าง
การตั้งค่าทั้งหมดจะมีลักษณะดังนี้:
การเขียนโปรแกรม Arduino สำหรับ Arduino OLED Speedometer
รหัสทั้งหมดของโครงการมีให้ที่ด้านล่างของบทช่วยสอน ที่นี่เรากำลังอธิบายรหัสที่สมบูรณ์ทีละบรรทัด
ก่อนอื่นรวมไลบรารีทั้งหมด ไลบรารี TinyGPS ++ ที่นี่ใช้เพื่อรับพิกัด GPS โดยใช้โมดูลตัวรับสัญญาณ GPS และ Adafruit_SH1106.h ใช้สำหรับ OLED
# รวม
จากนั้นกำหนดที่อยู่ OLED I2C ซึ่งอาจเป็นได้ทั้ง OX3C หรือ OX3D นี่คือ OX3C ในกรณีของฉัน นอกจากนี้ต้องกำหนดพินรีเซ็ตของจอแสดงผลด้วย ในกรณีของฉันมันถูกกำหนดให้เป็น -1 เนื่องจากจอแสดงผลกำลังแชร์พินรีเซ็ตของ Arduino
# กำหนด OLED_ADDRESS 0x3C # กำหนด OLED_RESET -1 จอแสดงผล Adafruit_SH1106 (OLED_RESET);
ถัดไปอ็อบเจ็กต์สำหรับ คลาส TinyGPSPlus และ Softwareserial ถูกกำหนดดังที่แสดงด้านล่าง คลาสอนุกรมของซอฟต์แวร์ต้องการหมายเลขพิน Arduino สำหรับการสื่อสารแบบอนุกรมซึ่งกำหนดเป็น 2 และ 3 ที่นี่
int RX = 2, TX = 3; TinyGPSPlus จีพีเอส; SoftwareSerial gpssoft (RX, TX);
การตั้งค่า ภายใน () การ กำหนดค่าเริ่มต้นเสร็จสิ้นสำหรับการสื่อสารแบบอนุกรมและ OLED อัตราการรับส่งข้อมูลเริ่มต้นสำหรับการสื่อสารแบบอนุกรมของซอฟต์แวร์กำหนดไว้ที่ 9600 ที่นี่ SH1106_SWITCHCAPVCC ใช้เพื่อสร้างแรงดันไฟฟ้าที่แสดงจาก 3.3V ภายในและฟังก์ชัน display.begin ใช้เพื่อเริ่มต้นการแสดง
การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); gpssoft.begin (9600); display.begin (SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay (); }
ภายใน ขณะ ที่ลูปจริงข้อมูลอนุกรมที่ได้รับจะได้รับการตรวจสอบความถูกต้องหากได้รับสัญญาณ GPS ที่ถูกต้องจะมีการเรียก displayspeed () เพื่อแสดงค่าความเร็วบน OLED
ในขณะที่ (gpssoft.available ()> 0) ถ้า (gps.encode (gpssoft.read ())) แสดง ความเร็ว ();
ภายในฟังก์ชัน displayspeed () ข้อมูลความเร็วจากโมดูล GPS จะถูกตรวจสอบโดยใช้ฟังก์ชัน gps.speed.isValid () และหากส่งคืนค่าจริงค่าความเร็วจะแสดงบนจอแสดงผล OLED ที่นี่ขนาดข้อความบน OLED ถูกกำหนดโดยใช้ฟังก์ชัน display.setTextSize และตำแหน่งเคอร์เซอร์ถูกกำหนดโดยใช้ฟังก์ชัน display.setCursor ข้อมูลความเร็วจากโมดูลจีพีเอสจะถอดรหัสโดยใช้ gps.speed.kmph () ฟังก์ชั่นและในที่สุดก็จะแสดงการใช้ display.display ()
ถ้า (gps.speed.isValid ()) { display.setTextSize (2); display.setCursor (40, 40); display.print (gps.speed.kmph ()); display.display (); }
สุดท้ายอัปโหลดรหัสใน Arduino Uno และวางระบบในการเคลื่อนย้ายยานพาหนะและคุณจะเห็นความเร็วบนจอแสดงผล OLED ดังที่แสดงในภาพด้านล่าง
รหัสที่สมบูรณ์พร้อมวิดีโอสาธิตได้รับด้านล่าง