ในโครงการนี้เราใช้แนวคิด ADC (Analog to Digital Conversion) ใน ARDUINO UNO เราจะใช้เซ็นเซอร์ Hall EffectและArduino unoเพื่อวัดความแรงของสนามแม่เหล็ก เซ็นเซอร์ที่เราได้ใช้ที่นี่เป็นUGN3503Uนี่คือเซ็นเซอร์ฮอลล์ที่ตรวจจับความแรงของสนามแม่เหล็กและให้แรงดันไฟฟ้าที่แตกต่างกันที่เอาต์พุตตามสัดส่วนกับความแรงของสนาม เซ็นเซอร์นี้รับความแรงของสนามในหน่วยของ ' GAUSS '
ดังนั้นด้วยเซ็นเซอร์นี้เราจะมีความแรงของสนามเป็นแรงดันไฟฟ้าที่แตกต่างกัน โดยใช้คุณสมบัติ ADC เราจะแปลงแรงดันไฟฟ้านี้เป็นตัวเลข ตัวเลขนี้แสดงถึงความแรงของสนามและแสดงบน LCD
Arduino มีช่อง ADC หกช่อง ในหนึ่งหรือทั้งหมดสามารถใช้เป็นอินพุตสำหรับแรงดันไฟฟ้าแบบอะนาล็อก UNO ADC มีความละเอียด 10 บิต (ดังนั้นค่าจำนวนเต็มตั้งแต่ (0- (2 ^ 10) 1023)) ซึ่งหมายความว่าจะแมปแรงดันไฟฟ้าอินพุตระหว่าง 0 ถึง 5 โวลต์เป็นค่าจำนวนเต็มระหว่าง 0 ถึง 1023 ดังนั้นสำหรับทุกๆ (5/1024 = 4.9mV) ต่อหน่วย
ทั้งหมดนี้เราจะเชื่อมต่อโพเทนชิออมิเตอร์หรือหม้อเข้ากับช่อง 'A0' และเราจะแสดงผลลัพธ์ ADC ในการแสดงผลอย่างง่าย จอแสดงผลแบบธรรมดาคือหน่วยแสดงผล 16x1 และ 16x2 หน่วยแสดงผล 16x1 จะมี 16 ตัวอักษรและอยู่ในบรรทัดเดียว 16x2 จะมี 32 ตัวอักษรรวม 16in 1 เซนต์ line และอีก 16 ใน 2 ครั้งที่บรรทัด ที่นี่เราต้องเข้าใจว่าในแต่ละอักขระมี 5x10 = 50 พิกเซลดังนั้นการที่จะแสดงอักขระหนึ่งตัวทั้ง 50 พิกเซลจะต้องทำงานร่วมกัน แต่เราไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้เพราะมีคอนโทรลเลอร์อื่น (HD44780) ในหน่วยแสดงผลซึ่งทำหน้าที่ งานควบคุมพิกเซล (คุณสามารถเห็นได้ในหน่วย LCD เป็นตาดำที่ด้านหลัง)
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์: ARDUINO UNO, แหล่งจ่ายไฟ (5v), JHD_162ALCD (16x2LCD), ตัวเก็บประจุ 100uF (2 ชิ้น), UGn3503U
ซอฟต์แวร์: arduino IDE (Arduino ทุกคืน)
แผนภาพวงจรและคำอธิบาย
ดังกล่าวข้างต้นแสดงให้เห็นว่ารูป วงจรสำหรับการตรวจวัดสนามแม่เหล็กโดยใช้ Arduino Uno
ในจอ LCD 16x2 จะมีหมุดทั้งหมด 16 พินหากมีไฟด้านหลังหากไม่มีไฟส่องหลังจะมี 14 พิน หนึ่งสามารถจ่ายไฟหรือปล่อยหมุดไฟด้านหลัง ตอนนี้ใน 14 ขามี 8 ข้อมูลหมุด (7-14 หรือ D0-D7) 2 หมุดแหล่งจ่ายไฟ (1 & 2 หรือ VSS & VDD หรือ GND & + 5V) 3 ถพินสำหรับการควบคุมความคมชัด (วีควบคุมวิธีการหนาตัวละครที่ควรจะเป็น แสดง) และ 3 พินควบคุม (RS & RW & E)
ในวงจรด้านบนคุณสามารถสังเกตได้ว่าฉันใช้พินควบคุมเพียงสองตัวเท่านั้นไม่ได้ใช้บิตคอนทราสต์และ READ / WRITE บ่อยครั้งดังนั้นจึงสามารถลัดลงกราวด์ได้ ทำให้ LCD มีคอนทราสต์สูงสุดและโหมดอ่าน เราต้องควบคุมพิน ENABLE และ RS เพื่อส่งอักขระและข้อมูลตามนั้น
การเชื่อมต่อที่ทำกับ LCD มีดังต่อไปนี้:
PIN1 หรือ VSS ลงกราวด์
PIN2 หรือ VDD หรือ VCC ถึง + 5v
PIN3 หรือ VEE กับพื้น (ให้ความเปรียบต่างสูงสุดที่ดีที่สุดสำหรับผู้เริ่มต้น)
PIN4 หรือ RS (Register Selection) เป็น PIN8 ของ ARDUINO UNO
PIN5 หรือ RW (อ่าน / เขียน) ลงกราวด์ (ทำให้ LCD อยู่ในโหมดอ่านช่วยให้การสื่อสารสำหรับผู้ใช้ง่ายขึ้น)
PIN6 หรือ E (เปิดใช้งาน) เป็น PIN9 ของ ARDUINO UNO
PIN11 หรือ D4 ถึง PIN10 ของ ARDUINO UNO
PIN12 หรือ D5 ถึง PIN11 ของ ARDUINO UNO
PIN13 หรือ D6 ถึง PIN12 ของ ARDUINO UNO
PIN14 หรือ D7 ถึง PIN13 ของ ARDUINO UNO
ARDUINO IDE อนุญาตให้ผู้ใช้ใช้ LCD ในโหมด 4 บิต การสื่อสารประเภทนี้ช่วยให้ผู้ใช้สามารถลดการใช้พินบน ARDUINO ซึ่งแตกต่างจาก ARDUINO อื่น ๆ ที่ไม่จำเป็นต้องตั้งโปรแกรมแยกต่างหากสำหรับการใช้งานในโหมด 4 it เนื่องจากโดยค่าเริ่มต้น ARDUINO ถูกตั้งค่าให้สื่อสารในโหมด 4 บิต ในวงจรคุณจะเห็นว่าเราใช้การสื่อสาร 4 บิต (D4-D7) ดังนั้นจากการสังเกตจากตารางด้านบนเรากำลังเชื่อมต่อ 6 พินของ LCD เข้ากับคอนโทรลเลอร์ซึ่ง 4 พินเป็นพินข้อมูลและ 2 พินสำหรับควบคุม
กำลังทำงาน
สำหรับการเชื่อมต่อ LCD กับ ARDUINO UNO เราจำเป็นต้องรู้บางสิ่ง
|
ก่อนอื่นช่อง UNO ADC มีค่าอ้างอิงเริ่มต้นที่ 5V ซึ่งหมายความว่าเราสามารถให้แรงดันไฟฟ้าอินพุตสูงสุด 5V สำหรับการแปลง ADC ที่ช่องอินพุตใดก็ได้ เนื่องจากเซ็นเซอร์บางตัวให้แรงดันไฟฟ้าตั้งแต่ 0-2.5V ด้วยการอ้างอิง 5V เราจึงมีความแม่นยำน้อยกว่าดังนั้นเราจึงมีคำสั่งที่ช่วยให้เราสามารถเปลี่ยนค่าอ้างอิงนี้ได้ ดังนั้นสำหรับการเปลี่ยนค่าอ้างอิงเรามี (“ analogReference ();”)
ตามค่าเริ่มต้นเราจะได้รับความละเอียด ADC สูงสุดของบอร์ดซึ่งเป็น 10 บิตความละเอียดนี้สามารถเปลี่ยนแปลงได้โดยใช้คำสั่ง (“ analogReadResolution (bits);”) การเปลี่ยนแปลงความละเอียดนี้อาจมีประโยชน์ในบางกรณี
ตอนนี้หากเงื่อนไขข้างต้นถูกตั้งค่าเป็นค่าเริ่มต้นเราสามารถอ่านค่าจาก ADC ของช่อง '0' ได้โดยการเรียกใช้ฟังก์ชัน "analogRead (พิน) โดยตรง" ที่นี่ "พิน" หมายถึงพินที่เราเชื่อมต่อสัญญาณแอนะล็อกในกรณีนี้จะ เป็น“ A0” ค่าจาก ADC สามารถนำมาเป็นจำนวนเต็มเป็น“ int ADCVALUE = analogRead (A0); ” โดยคำสั่งนี้ค่าหลังจาก ADC จะถูกเก็บไว้ในจำนวนเต็ม“ ADCVALUE”
ตอนนี้เรามาพูดถึง LCD 16x2 กันสักหน่อย ก่อนอื่นเราต้องเปิดใช้งานไฟล์ส่วนหัว ('#include
อย่างที่สองเราต้องบอกบอร์ดว่าเราใช้ LCD ประเภทใดที่นี่ เนื่องจากเรามี LCD ประเภทต่างๆมากมาย (เช่น 20x4, 16x2, 16x1 เป็นต้น) ที่นี่เราจะเชื่อมต่อ LCD 16x2 กับ UNO ดังนั้นเราจึงได้ 'lcd.begin (16, 2);' สำหรับ 16x1 เราจะได้ 'lcd.begin (16, 1);'
ในคำแนะนำนี้เราจะบอกบอร์ดที่เราเชื่อมต่อพินพินที่เชื่อมต่อจะถูกแสดงตามลำดับเป็น“ RS, En, D4, D5, D6, D7” หมุดเหล่านี้จะต้องแสดงอย่างถูกต้อง เนื่องจากเราเชื่อมต่อ RS กับ PIN0 และอื่น ๆ ตามที่แสดงในแผนภาพวงจรเราจึงแสดงหมายเลขพินที่จะบอร์ดเป็น "LiquidCrystal lcd (0, 1, 8, 9, 10, 11);"
หลังจากที่ด้านบนเหลือเพียงการส่งข้อมูลข้อมูลที่ต้องแสดงใน LCD ควรเขียนเป็น "cd.print (" hello, world! ");" ด้วยคำสั่งนี้หน้าจอ LCD จะแสดงคำว่า "สวัสดีชาวโลก!" อย่างที่คุณเห็นเราไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งอื่นใดเราเพียงแค่ต้องเริ่มต้นและ UNO ก็พร้อมที่จะแสดงข้อมูล เราไม่ต้องเขียนโปรแกรมวนซ้ำเพื่อส่งข้อมูล BYTE by BYTE ที่นี่
เมื่อแม่เหล็กถูกนำเข้าใกล้เซ็นเซอร์เซ็นเซอร์จะแสดงแรงดันไฟฟ้าที่เอาต์พุตเป็นสัดส่วนกับสนามค่านี้จะถูกนำมาใช้โดย Uno และแสดงใน LCD การทำงานของโครงการวัดสนามแม่เหล็กนี้อธิบายเพิ่มเติมผ่านรหัส C ด้านล่าง