รหัส Arduino และวิดีโอสำหรับโมดูลวัดระยะอินฟราเรด Sharp พร้อม LCD1602 และโมดูล I2C
คู่มือโปรเจกต์นี้จะแนะนำคุณในการสร้างระบบวัดระยะทางที่เรียบง่ายแต่มีประสิทธิภาพ โดยใช้เซนเซอร์วัดระยะอินฟราเรด (IR) ของ Sharp และจอแสดงผล LCD1602 การตั้งค่านี้ช่วยให้คุณวัดระยะทางในช่วงที่กำหนดได้อย่างแม่นยำและแสดงผลบนหน้าจอได้โดยตรง ทำให้เหมาะสำหรับงานอิเล็กทรอนิกส์ DIY หลากหลายประเภท
โมดูลเอาต์พุตแอนะล็อกของ Sharp:
2 ถึง 15 ซม. GP2Y0A51SK0F
4 ถึง 30 ซม. GP2Y0A41SK0F / ซีรีส์ GP2Y0AF30
10 ถึง 80 ซม. GP2Y0A21YK0F
10 ถึง 150 ซม. GP2Y0A60SZLF
20 ถึง 150 ซม. GP2Y0A02YK0F
100 ถึง 550 ซม. GP2Y0A710K0F

ตัวอย่างการใช้งานจริงและแนวคิดโปรเจกต์สำหรับระบบนี้ ได้แก่:
- สร้างระบบช่วยจอดรถอัตโนมัติเพื่อป้องกันความเสียหายของกันชน
- สร้างเซนเซอร์วัดระดับน้ำอย่างง่ายสำหรับถังหรือบ่อน้ำ
- พัฒนาเครื่องจ่ายของเหลวแบบไม่สัมผัส
- ติดตั้งสัญญาณเตือนความปลอดภัยพื้นฐานโดยการตรวจจับความใกล้ชิด
- สร้างตัวบ่งชี้ระดับการเติมสำหรับฮอปเปอร์หรือถังเก็บ
- ออกแบบระบบหลีกเลี่ยงการชนสำหรับหุ่นยนต์ขนาดเล็กหรือยานพาหนะ RC
ฮาร์ดแวร์/ส่วนประกอบ
เพื่อให้โปรเจกต์นี้สำเร็จ คุณจะต้องมีส่วนประกอบดังต่อไปนี้:
- บอร์ด Arduino Uno หรือบอร์ดที่เข้ากันได้
- เซนเซอร์วัดระยะอินฟราเรด Sharp (รุ่น GP2Y0A41SK0F วัดได้ 4 ถึง 30 ซม.)
- LCD1602 พร้อมโมดูล I2C (เพื่อการเดินสายไฟที่ง่ายขึ้น)
- เบรดบอร์ด (ไม่บังคับ สำหรับการสร้างต้นแบบ)
- สายจัมเปอร์
- สาย USB สำหรับจ่ายไฟและโปรแกรม Arduino
คู่มือการเดินสายไฟ

การเชื่อมต่อเซนเซอร์ IR ของ Sharp และ LCD1602 พร้อมโมดูล I2C เข้ากับ Arduino ของคุณเป็นเรื่องง่าย ต้องขอบคุณโมดูล I2C ที่ช่วยลดจำนวนสายไฟที่จำเป็นสำหรับ LCD
เซนเซอร์ IR ของ Sharp มีสามสาย: สีแดง (5V), สีดำ (กราวด์) และสีเหลือง (เอาต์พุต) เชื่อมต่อสายสีแดงเข้ากับพิน 5V ของ Arduino สายสีดำเข้ากับพิน GND ใดก็ได้บน Arduino และสายเอาต์พุตสีเหลืองเข้ากับพินแอนะล็อก A0 ของ Arduino (ในวิดีโอที่ 03:55)
LCD1602 พร้อมโมดูล I2C มีสี่สาย: VCC, GND, SDA และ SCL เชื่อมต่อพิน VCC เข้ากับ 5V ของ Arduino และพิน GND เข้ากับ GND ของ Arduino สาย SDA (สายข้อมูลอนุกรม) ควรเชื่อมต่อกับพินแอนะล็อก A4 ของ Arduino และสาย SCL (สายสัญญาณนาฬิกาอนุกรม) ควรเชื่อมต่อกับพินแอนะล็อก A5 ของ Arduino (ในวิดีโอที่ 02:42)
คำอธิบายโค้ด
โค้ด Arduino ที่ให้มานี้ใช้ไลบรารีหลักสองตัว: Wire.h สำหรับการสื่อสาร I2C และ LiquidCrystal_I2C.h สำหรับควบคุม LCD และ SharpIR.h สำหรับเซนเซอร์ IR ของ Sharp ส่วนของโค้ดที่ผู้ใช้สามารถกำหนดค่าได้นั้นเกี่ยวข้องกับการกำหนดเซนเซอร์และการเริ่มต้น LCD เป็นหลัก
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// กำหนดที่อยู่ LCD เป็น 0x27 สำหรับจอแสดงผล 16 ตัวอักษรและ 2 บรรทัด
LiquidCrystal_I2C lcd(0x27, 16, 2);
บรรทัด LiquidCrystal_I2C lcd(0x27, 16, 2); เริ่มต้นออบเจกต์ LCD พารามิเตอร์แรก 0x27 (ในวิดีโอที่ 03:26) คือที่อยู่ I2C เริ่มต้นสำหรับโมดูล LCD I2C ที่ใช้ PCF8574 ส่วนใหญ่ หาก LCD ของคุณไม่ทำงาน คุณอาจต้องหาที่อยู่ที่ถูกต้อง (ทางเลือกทั่วไปคือ 0x3F) พารามิเตอร์ที่สอง 16 ระบุว่า LCD ของคุณมี 16 ตัวอักษรต่อบรรทัด และพารามิเตอร์ที่สาม 2 ระบุว่ามี 2 บรรทัด
#include <SharpIR.h>
#define IR A0 // กำหนดพินสัญญาณ Sharp IR
#define model 430 // รุ่นของโมดูล IR
// โค้ด Sharp IR สำหรับ Robojax.com
// ir: พินที่เซนเซอร์ของคุณเชื่อมต่ออยู่
// model: จำนวนเต็มที่กำหนดเซนเซอร์ของคุณ:
/*
* GP2Y0A02YK0F --> "20150"
GP2Y0A21YK --> "1080"
GP2Y0A710K0F --> "100500"
GP2YA41SK0F --> "430"
*/
SharpIR SharpIR(IR, model);
บรรทัดเหล่านี้ตั้งค่าเซนเซอร์ IR ของ Sharp #define IR A0 กำหนดพินแอนะล็อกของ Arduino ที่เชื่อมต่อกับสายเอาต์พุตของเซนเซอร์ IR ของ Sharp #define model 430 (ในวิดีโอที่ 04:27) มีความสำคัญเนื่องจากระบุรุ่นที่แน่นอนของเซนเซอร์ IR ของ Sharp ไลบรารีใช้หมายเลขรุ่นนี้เพื่อใช้การแปลงทางคณิตศาสตร์ที่ถูกต้องจากแรงดันไฟฟ้าเอาต์พุตแอนะล็อกของเซนเซอร์เป็นระยะทางเป็นเซนติเมตร บล็อกความคิดเห็นแสดงรายการรุ่น Sharp IR ต่างๆ และค่าจำนวนเต็มที่สอดคล้องกันที่ควรใช้ที่นี่ ตัวอย่างเช่น หากคุณใช้ GP2Y0A21YK คุณจะต้องเปลี่ยน 430 เป็น 1080
void setup()
{
lcd.begin();
lcd.backlight();
}
ในฟังก์ชัน setup() คำสั่ง lcd.begin() เริ่มต้น LCD และ lcd.backlight() เปิดไฟแบ็คไลท์ ทำให้จอแสดงผลมองเห็นได้
void loop()
{
lcd.clear();
lcd.print("Robojax IR Test");
lcd.setCursor (0,1); // ไปที่จุดเริ่มต้นของบรรทัดที่ 2
int dis=SharpIR.distance();// รับระยะทางเป็นซม.
String distance = String(dis);
distance ="Distance: "+distance+"cm";
lcd.print(distance);
delay(500);
}
ภายในฟังก์ชัน loop():
lcd.clear();ล้างข้อความก่อนหน้าบนจอแสดงผลlcd.print("Robojax IR Test");พิมพ์ข้อความคงที่บนบรรทัดแรกlcd.setCursor (0,1);ย้ายเคอร์เซอร์ไปยังจุดเริ่มต้นของบรรทัดที่สอง (0 คือคอลัมน์แรก, 1 คือบรรทัดที่สอง เนื่องจากบรรทัดเริ่มนับจาก 0)int dis=SharpIR.distance();เรียกใช้ฟังก์ชันdistance()จากไลบรารี SharpIR เพื่ออ่านค่าจากเซนเซอร์และแปลงเป็นจำนวนเต็มที่แทนระยะทางในหน่วยเซนติเมตร (ในวิดีโอที่ 05:06) นี่คือฟังก์ชันหลักสำหรับการวัดค่าString distance = String(dis);แปลงค่าระยะทางที่เป็นจำนวนเต็มให้เป็นสตริง เนื่องจากไม่สามารถเชื่อมจำนวนเต็มกับสตริงโดยตรงเพื่อการพิมพ์ได้distance ="Distance: "+distance+"cm";จัดรูปแบบสตริงให้มี "Distance: " นำหน้าค่า และ "cm" ต่อท้ายlcd.print(distance);แสดงสตริงระยะทางที่จัดรูปแบบแล้วบนจอ LCDdelay(500);หน่วงเวลา 500 มิลลิวินาที (ในวิดีโอที่ 06:00) การหน่วงเวลานี้สำคัญต่อความแม่นยำและความเสถียรของเซนเซอร์ Sharp คุณสามารถปรับค่านี้ได้: การเพิ่มขึ้นอาจปรับปรุงความแม่นยำแต่ทำให้การอัปเดตช้าลง ในขณะที่การลดลงจะทำให้การอัปเดตเร็วขึ้นแต่อาจลดความแม่นยำ
โปรเจกต์/การสาธิตสด
เมื่อเชื่อมต่ออุปกรณ์และอัปโหลดโค้ดไปยัง Arduino แล้ว ระบบจะเริ่มวัดและแสดงระยะทาง โปรเจกต์นี้สาธิตการวัดที่แม่นยำในระยะใกล้ เช่น แสดง 12 ซม. เมื่อวัตถุอยู่ที่ 12 ซม. (ในวิดีโอที่ 00:31) และ 10 ซม. สำหรับ 10 ซม. (ในวิดีโอที่ 00:37)
อย่างไรก็ตาม เมื่อวัตถุเคลื่อนออกไปไกลขึ้น โดยเฉพาะเกิน 15-20 ซม. ความแม่นยำอาจลดลง ตัวอย่างเช่น ที่ 20 ซม. จอแสดงผลอาจแสดง 21 ซม. (ในวิดีโอที่ 07:06) และที่ 25 ซม. อาจอ่านได้ 28 หรือ 29 ซม. (ในวิดีโอที่ 07:32) พฤติกรรมนี้เป็นลักษณะเฉพาะของเซนเซอร์อินฟราเรดเหล่านี้ เซนเซอร์ Sharp IR ส่งออกแรงดันไฟฟ้าแบบแอนะล็อกที่แปรผันตามระยะทาง: เมื่อระยะทางเพิ่มขึ้น แรงดันเอาต์พุตจะลดลง (ในวิดีโอที่ 07:56)
ความสัมพันธ์ระหว่างระยะทางและแรงดันเอาต์พุตไม่เป็นเชิงเส้น โดยเฉพาะที่ขอบเขตของช่วงการวัดของเซนเซอร์ ความไม่เป็นเชิงเส้นนี้เป็นเหตุผลที่ไลบรารี SharpIR มีประโยชน์ เนื่องจากมีข้อมูลการปรับเทียบเพื่อแปลงแรงดันไฟฟ้าที่แปรผันเหล่านี้ให้เป็นการอ่านระยะทางที่แม่นยำยิ่งขึ้น สำหรับการใช้งานที่ต้องการความแม่นยำสูงในระยะไกล อาจจำเป็นต้องเลือก Sharp IR รุ่นอื่นที่ออกแบบมาสำหรับระยะทางเหล่านั้นหรือปรับใช้เส้นโค้งการปรับเทียบแบบกำหนดเอง
บทต่างๆ
- [00:06] บทนำโปรเจกต์และภาพรวม
- [01:10] รายละเอียดเซนเซอร์ Sharp IR และการกำหนดพิน
- [02:09] การเดินสายโมดูล LCD I2C
- [02:58] คำอธิบายโค้ด Arduino
- [06:36] การสาธิตการวัดระยะทาง
- [07:47] ลักษณะเซนเซอร์และข้อจำกัดด้านความแม่นยำ
- [08:48] ข้อสรุปและแหล่งข้อมูล
/*
* Sharp IR 555 (infrared) distance measurement module with LCD1602 and I2C for Arduino
* Measures the distance in cm.
* Watch the video https://youtu.be/RHgMwtKLEnE
* *
Original library: https://github.com/guillaume-rico/SharpIR
// Written and updated by Ahmad for Robojax.com
// on January 3, 2018 at 20:01 in Ajax, Ontario, Canada
// Get this code and other Arduino codes from Robojax.com
// Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
// all in one place.
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
///////////////////***** start of Sharp IR
#include <SharpIR.h>
#define IR A0 // define Sharp IR signal pin
#define model 430 // the model of the IR module
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:
/*
* GP2Y0A02YK0F --> "20150"
GP2Y0A21YK --> "1080"
GP2Y0A710K0F --> "100500"
GP2YA41SK0F --> "430"
*/
SharpIR SharpIR(IR, model);
/////////////////////**** end of Sharp IR
void setup()
{
// Robojax code for LCD with I2C
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
// Robojax code for LCD with I2C
}
void loop()
{
//start of loop Robojax code for LCD with I2C
lcd.clear();
lcd.print("Robojax IR Test");
lcd.setCursor (0,1); // go to start of 2nd line
int dis=SharpIR.distance();// gets the distance in cm
String distance = String(dis);
distance ="Distance: "+distance+"cm";
lcd.print(distance);
//lcd.print(millis() / 1000);
delay(500);
//end of loopcode Robojax code for LCD with I2C
}
สิ่งที่คุณอาจต้องการ
-
อเมซอนBuy LCD1602-I2C from Amazonamzn.to
-
อเมซอน
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไลบรารี Arduino (zip)
-
Arduino library for sharp IR distance sensor
robojax-sharp_IR-master.zip
แผ่นข้อมูล (pdf)
-
Sharp IR GP2Y0A21YK Infrared distance sensor datasheet
robojax_sharp_IR_GP2Y0A21YK_datasheet.pdf0.36 MB
ไฟล์ Fritzing
-
LCD LCD1602-I2C module with 4 wires
LCD1602-I2C.fzpz0.01 MB -
sharp ir sensor GP2Y0A02YK0F
sharp ir sensor GP2Y0A02YK0F .fzz
ไฟล์อื่น ๆ
-
Sharp GP2Y0A41SK0F Infrared distance sensor datasheet
robojax_sharp_IR_GP2Y0A41SK0F_datasheet.pdf0.84 MB -
Sharp GP2Y0A710K0F Infrared distance sensor datashee
robojax_sharp_IR_GP2Y0A710K0F_datasheet.pdf0.33 MB