10อัลตราโซนิกเซนเซอร์ตรวจจับระยะไกลใน ARDUINO พร้อม TINKERCAD
อัลตราโซนิกเซนเซอร์ตรวจจับระยะไกลใน ARDUINO พร้อม TINKERCAD
บทนำ: อัลตราโซนิคเซนเซอร์ตรวจจับระยะไกลใน Arduino พร้อม Tinkercad
ลองวัดระยะทางด้วยเรนจ์ไฟนอัลตราโซนิค (เซ็นเซอร์ระยะทาง) และอินพุตดิจิตอลของ Arduino เราจะเชื่อมต่อวงจรโดยใช้ breadboard และใช้รหัส Arduino ง่ายๆในการควบคุม LED ตัวเดียว
คุณอาจได้เรียนรู้การอ่านเซ็นเซอร์แบบกดและเซ็นเซอร์การเคลื่อนไหว PIRด้วยอินพุตดิจิตอลของ Arduino และเราจะพัฒนาทักษะเหล่านี้ในบทเรียนนี้
เครื่องวัดระยะคลื่นแบบอัลตราซาวด์ใช้คลื่นเสียงในการเด้งวัตถุที่อยู่ด้านหน้าของพวกเขาเหมือนกับค้างคาวใช้ตำแหน่ง echolocation เพื่อทำความเข้าใจกับสภาพแวดล้อมของพวกเขา เซ็นเซอร์ความใกล้ชิดจะส่งสัญญาณและวัดระยะเวลาที่ใช้ในการส่งคืน โปรแกรม Arduino ได้รับข้อมูลนี้และคำนวณระยะห่างระหว่างเซนเซอร์และวัตถุ
สำรวจวงจรตัวอย่างที่ฝังอยู่ที่นี่โดยการเริ่มต้นการจำลองและคลิกที่เซ็นเซอร์ความใกล้ชิด ซึ่งจะเปิดใช้งานบริเวณที่เน้นที่ด้านหน้าของเซ็นเซอร์โดยมี "วัตถุ" วงกลมอยู่ข้างใน คุณอาจต้องปรับขนาดมุมมองหากวงกลมปิดหน้าจอ
คลิกและลากวงกลม "วัตถุ" ใกล้และไกลออกไปสังเกตเห็นการเปลี่ยนค่าระยะทางบนหน้าจอ LED เพิ่มเติมจะสว่างขึ้นใกล้คุณจะได้รับการเซ็นเซอร์
ในบทเรียนนี้คุณจะสร้างวงจรจำลองนี้เองตามตัวอย่าง หากต้องการสร้างวงจรทางกายภาพให้รวบรวมบอร์ด Arduino Uno ของคุณสาย USB เคเบิ้ลบอร์ดบัดกรีไฟ LED สามดวงตัวต้านทาน (ค่าใด ๆ จาก 100-1K), เครื่องเรมิดังเซอร์อัลตราโซนิคและสายไฟเมนบอร์ด
คุณสามารถทำตามความจริงโดยใช้วงจร Tinkercad คุณยังสามารถดูบทเรียนนี้จากภายใน Tinkercad(เข้าสู่ระบบฟรีที่จำเป็น)! สำรวจวงจรตัวอย่างและสร้างสิทธิของคุณเองถัดจากนั้น Tinkercad Circuits เป็นโปรแกรมที่ใช้เบราว์เซอร์ฟรีเพื่อช่วยในการสร้างและจำลองวงจร มันเหมาะสำหรับการเรียนรู้ , การเรียนการสอนและการสร้างต้นแบบ
ขั้นที่ 1: สร้างวงจรไฟ LED
เช่นเดียวกับที่คุณได้เรียนรู้จากบทเรียนเบื้องต้นให้เริ่มต้นด้วยการต่อสายไฟ Arduino และเมนบอร์ดของคุณกับแหล่งจ่ายไฟและพื้นดินข้างวงจรตัวอย่างจากนั้นเพิ่มไฟ LED สีแดงสามดวงลงใน breadboard ตามที่แสดง เหล่านี้จะเป็นไฟ "กราฟแท่ง" เพื่อแสดงการวัดระยะทางของสายตา
ลาก Arduino Uno และ breadboard จากแผงส่วนประกอบไปที่ workplane ถัดจากวงจรที่มีอยู่
ต่อพิน 5 โวลต์และพินดินบน Arduino เข้ากับรางไฟ (+) และพื้น (-) บนเมนบอร์ดพร้อมสายไฟ คุณสามารถเปลี่ยนสีลวดถ้าคุณต้องการ! ใช้ลิสต์แบบดรอปดาวน์ของผู้ตรวจสอบหรือแป้นตัวเลขบนแป้นพิมพ์ของคุณ
ลาก LED สามดวงลงบนไม้กระดานในแถว E ห่างกัน 2 แหนบสำหรับใส่ไม้เนื้อแข็ง คุณสามารถเปลี่ยนสี LED โดยใช้ตัวตรวจสอบที่ปรากฏขึ้นเมื่อคุณคลิกที่แต่ละตัว
ใช้ตัวต้านทาน 220 โอห์มเพื่อเชื่อมต่อแคโทดแต่ละตัวของ LED (ขาซ้าย) เข้ากับรางกราวด์ (สีดำ) ของกระดานทำบอร์ด คุณสามารถเปลี่ยนค่าของตัวต้านทานได้โดยการไฮไลต์และใช้เมนูแบบเลื่อนลง
ต่ออะแดปเตอร์ LED (ขาขวา) เข้ากับหมุดดิจิตอล 4, 3 และ 2 บน Arduino แอโนด LED (+) คือขั้วที่กระแสไหลเข้า นี้จะเชื่อมต่อกับขาออกดิจิตอลใน Arduino ขั้วลบ (-) เป็นขั้วที่กระแสไหลจาก นี้จะเชื่อมต่อกับรถไฟใต้ดิน
ขั้นที่ 2: เพิ่มเซนเซอร์จับความใกล้เคียง
เซ็นเซอร์ความใกล้เคียงมาในหลายรสชาติ ที่นี่ในวงจร Tinkercad คุณสามารถเลือกระหว่างเซ็นเซอร์สามพินหรือเซ็นเซอร์สี่ขา โดยทั่วไปแล้ว rangefinders ล้ำเสียงมีขาที่เชื่อมต่อกับพื้นอีกสายหนึ่งที่เชื่อมต่อกับ 5 โวลต์หนึ่งในสามสำหรับการส่งสัญญาณและหนึ่งในสี่สำหรับรับสัญญาณ หมุด 'ส่ง' และ 'รับ' จะรวมกันเป็นขาเดียวที่มีรสสามพิน
ในตัวแก้ไขวงจรให้หาเครื่องเรนจ์แวร์ล้ำเสียงในลิ้นชักส่วนประกอบ หากต้องการค้นหาเซ็นเซอร์สี่ขาให้ดู "ทั้งหมด" ในแผงส่วนประกอบ (ใช้เมนูแบบเลื่อนลง)
วางเซ็นเซอร์บนเมนบอร์ดที่ด้านซ้ายของไฟ LED ในแถว E ดังแสดงในรูป
เชื่อมต่อเซ็นเซอร์เพื่อให้ขา 5V เชื่อมต่อกับรางแรงดันไฟฟ้า 5 โวลต์ขา GND เชื่อมต่อกับรางกราวด์ขา SIG หรือ TRIG ไปยังขา 7 ของ Arduino และหากใช้รูปทรงสี่ขาพิน ECHO จะเชื่อมต่อกับ Arduino หมุด 6
ขั้นตอนที่ 3: โค้ดพร้อมบล็อก
ลองใช้ตัวแก้ไขบล็อคโค้ดเพื่อฟังสถานะของเซ็นเซอร์แล้วตัดสินใจว่าไฟ LED ใดจะสว่างขึ้นตามค่าของเซ็นเซอร์
คลิกปุ่ม "รหัส" เพื่อเปิดตัวแก้ไขรหัส บล็อค Notation สีเทาเป็นความคิดเห็นสำหรับการจดบันทึกสิ่งที่คุณต้องการให้โค้ดของคุณทำ แต่ข้อความนี้ไม่จำเป็นต้องใช้หรือดำเนินการเป็นส่วนหนึ่งของโปรแกรม
คลิกประเภทตัวแปรในโปรแกรมแก้ไขโค้ด สร้างตัวแปรใหม่ที่เรียกว่า DistanceThreshold และใช้ชุด "set" เพื่อกำหนดให้เป็น 350 (เซนติเมตร)
หากต้องการเก็บค่าเซ็นเซอร์ให้สร้างตัวแปรชื่อ "ซม."
ลากชุด "ตั้ง" และปรับรายการแบบเลื่อนลงไปยังตัวแปรใหม่ของเรา cm
ในประเภท Input ให้ลาก "อ่านอัลตราโซนิคเซนเซอร์ระยะทาง" ไว้ที่ด้านข้างและวางไว้ภายในชุดบล็อก
ปรับเมนูแบบเลื่อนลงภายในบล็อคอินพุตเพื่อตั้งพินการเรียกให้ 7, echo pin ให้เท่ากับ "trigger" และหน่วยเป็นซม.
เลือกตัวแปรใหม่สำหรับการแปลงเซนติเมตรไปเป็นนิ้วพร้อมกับชุดบล็อกและกลุ่มเลขคณิตเพื่ออ่าน "ตั้งค่านิ้วเป็น (ซม. / 2.54)"
เพิ่มบล็อกการตรวจสอบแบบอนุกรมเพื่อพิมพ์ระยะทางเซนเซอร์และเซนติเมตร
คลิกหมวดหมู่ Control แล้วลากออกจากหากบล็อกแล้วไปที่คณิตศาสตร์และลากกลุ่มผู้เปรียบเทียบไปยังบล็อก if
ในตัวแปรประเภทคว้า cm ตัวแปรและระยะทางตัวแปรตัวแปรและลากลงในบล็อก comparator การปรับเลื่อนลงเพื่ออ่าน "if cm> distanceThreshold then"
เพิ่มชุดเอาต์พุตดิจิตอล 3 ชุดภายในคำสั่ง if เพื่อตั้งพิน 2, 3 และ 4 LOW
ทำซ้ำคำสั่ง if ถ้าสี่ครั้งและเพิ่มบล็อคเลขคณิตและและ / หรือบล็อคเพื่อสร้างการตรวจจับสถานะทั้งหมดห้าชุดถ้าคำสั่ง สถานะแรกคือ "ระยะห่างไกลกว่าเกณฑ์ของเรา" ดังนั้นไฟ LED จึงไม่สว่างขึ้น เมื่อระยะห่างใกล้หรือเท่ากับระยะทางและมากกว่าระยะทาง threshold-100 ให้ไฟ LED ที่ pin 2 ขึ้นเท่านั้น เมื่ออุณหภูมิอยู่ระหว่างระยะทาง threshold-100 และ distance-threshold 250 ให้ไฟ LED สองดวงสว่างขึ้น และอื่น ๆ เพื่อบัญชีสำหรับทุกรัฐที่ต้องการ
ขั้นที่ 4: อธิบายรหัส Arduino Rangefinder อัลตราโซนิค
เมื่อเปิดโปรแกรมแก้ไขโค้ดคุณสามารถคลิกเมนูแบบเลื่อนลงทางด้านซ้ายและเลือก "Blocks + Text" เพื่อแสดงรหัส Arduino ที่สร้างโดยบล็อกโค้ด ปฏิบัติตามตามที่เราสำรวจรหัสในรายละเอียดเพิ่มเติม
int distanceThreshold = 0; int cm = 0; int inches = 0;
Before the
setup()
, we create variables to store the target distance threshold, as well as the sensor value in centimeters (cm) and inches. They're called int
because they are integers, or any whole number.long readUltrasonicDistance(int triggerPin, int echoPin) { pinMode(triggerPin, OUTPUT); // Clear the trigger digitalWrite(triggerPin, LOW); delayMicroseconds(2); // Sets the trigger pin to HIGH state for 10 microseconds digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); pinMode(echoPin, INPUT); // Reads the echo pin, and returns the sound wave travel time in microseconds return pulseIn(echoPin, HIGH); }
The next section is a special bit of code for reading the ultrasonic distance sensor. It's called a function. So far you are familiar with setup() and loop(), but in this sketch, the function
readUltrasonicDistance()
is used to describe the sensor code and keep it separate from the main body of the program. The function definition starts with what type of data the function will return, or send back to the main program. In this case the function returns a long
, which is a decimal point number with many digits. Next is the name of the function, which is up to you. Then in parentheses are the arguments the function takes. int triggerPin, int echoPin
are the variable declarations for your sensor's connection pins. The pin numbers will be specified when you call the function in the main program loop()
. Inside the function, these local variables are used to reference the information you passed to it from the main loop (or from another function). The function itself sends a signal through the triggerPin and reports back the time it takes to get the signal back over echoPin.void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); }
Inside the setup, pins are configured using the
pinMode()
function. The serial monitor connection is established with Serial.begin
. Pins 2, 3, and 4 are configured as outputs to control the LEDs.void loop() { // set threshold distance to activate LEDs distanceThreshold = 350; // measure the ping time in cm cm = 0.01723 * readUltrasonicDistance(7, 6);
In the main loop, distanceThreshold is set to its target 350cm.
// convert to inches by dividing by 2.54 inches = (cm / 2.54); Serial.print(cm); Serial.print("cm, "); Serial.print(inches); Serial.println("in");
To convert centimeters to inches, divide by 2.54. Printing to the serial monitor helps you observe the distance change more granularly than the LED states show alone.
if (cm > distanceThreshold) { digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); } if (cm <= distanceThreshold && cm > distanceThreshold - 100) { digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } if (cm <= distanceThreshold - 100 && cm > distanceThreshold - 250) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } if (cm <= distanceThreshold - 250 && cm > distanceThreshold - 350) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } if (cm <= distanceThreshold - 350) { digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } delay(100); // Wait for 100 millisecond(s) }
The loop's six if statements evaluate for different ranges of distance between 0 and 350cm, lighting up more LEDs the closer the object.
If you want to see a more obvious change in bar graph lights, you can change the distanceThreshold variable and/or the range that you are looking at by changing the arguments in the if() statements. This is called calibration.
ความคิดเห็น
แสดงความคิดเห็น