אחרי הסקירה הקצרה שלי על Arduino הגיע הזמן שנגע בנושא הכי מעניין מסביב Arduino והוא החיישנים,
יש המון חיישנים שניתן לחבר ל Arduino ולממש בעזרתם המון מוצרים , החלטתי לעשות את המאמר הראשון על Ultrasonic דרך פשוטה למדוד מרחקים ולשליטה במרחב התנועה של המוצר שלנו.
דרישות:
- Arduino Uno
- Arduino Prototype Shiled
- Wires
- Ultasonic Sensor Based SDM-IO Module
Ultrasonic
אני לא מומחה גדול בעיבוד אותות אבל אנסה בכול מקרה, מדובר על גלי קול בתדר גבוה שבני אדם לא מסוגלים לשמוע, הרכיב המרכזי במערכות Sonar, החיישן שולח גל קול ומחכה לגל החוזר במקרה ולא חוזר גל הדרך פנויה או שאינה בטווח החיישן, וכאשר יש גל חוזר ניתן לחשב את המרחק שלקח לגל קול לחזור לחיישן, אחד השימושים עבור Ultrasonic הוא "עיניים" , בדיוק כמו שזה נשמע נניח שנרצה לבנות שואב אבק ביתי שהסתובב לנו בבית באופן רנדומלי ,נוכל לבצע זאת בעזרת Ultrasonic שיבדוק אם הדרך עבור השואב שלנו פנויה ובמקרה שלא שהסתובב עד שהחיישן יחזיר שהדרך חופשית.
קיימים סוגים שונים של חיישנים חלקם מגיעים עם 3 ו 4 פינים, החיישן שלי מבוסס על SDM-IO Moudle עם 4 פינים,Vcc,Trig,Echo,Gnd.
נקודות החיבור עם ה Arduino
Arduino Protoype Shield
אחד התוספות החשובות בעבודה עם Arduino מאפשר לנו לפתח אב טיפוס ע"ג ה Arduino לפני יצירת ה Sheild שלכם, ניתן למצוא אותו ברשת במחיר ממוצע של 10 דולר.
מבנה סופי:
קוד:
//time out waiting for signal
#define SDM_IO_TIMEOUT 1000
//TrigPin in Arduino
int TrigPin = 12;
//EchoPin in Arduino
int EchoPin = 13;
unsigned long ultrasoundDuration;
int timeout;
unsigned long tStartPing = 0;
int sensorValue = 0;
void setup() {
//init the serial
Serial.begin(9600);
//pins setup
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
sensorValue = read_sdm_io_range();
if(sensorValue != 999)
{
//printing distanse value
Serial.print(sensorValue);
Serial.println(" cm");
//delay before new sample
delay(300);
}
}
//SDM-IO Ultrasonic Range Sensor distance function
float read_sdm_io_range() {
unsigned char pin = 0;
unsigned int time_flag = 0;
//send HIGH signal
digitalWrite(TrigPin, HIGH);
//wait 2 microsecond
delayMicroseconds(2);
//send LOW signal
digitalWrite(TrigPin, LOW);
//wait 10 microsecond
delayMicroseconds(10);
//send HIGH signal
digitalWrite(TrigPin, HIGH);
//getting system clock
tStartPing = micros();
timeout = 0;
pin = digitalRead(EchoPin);
while(pin)
{
//waiting for response from EchoPin
//break out when timeout
pin = digitalRead(EchoPin);
time_flag++;
//break when time_flag equal to
//timeout limit
if(time_flag > SDM_IO_TIMEOUT)
{ timeout = 1; break; }
}
//calculate the response time
ultrasoundDuration = micros() - tStartPing;
//if timeout equal 1
if (timeout)
return 999;
else
return ultrasoundDuration * 0.017;
// result in cm
}
#define SDM_IO_TIMEOUT 1000
//TrigPin in Arduino
int TrigPin = 12;
//EchoPin in Arduino
int EchoPin = 13;
unsigned long ultrasoundDuration;
int timeout;
unsigned long tStartPing = 0;
int sensorValue = 0;
void setup() {
//init the serial
Serial.begin(9600);
//pins setup
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
sensorValue = read_sdm_io_range();
if(sensorValue != 999)
{
//printing distanse value
Serial.print(sensorValue);
Serial.println(" cm");
//delay before new sample
delay(300);
}
}
//SDM-IO Ultrasonic Range Sensor distance function
float read_sdm_io_range() {
unsigned char pin = 0;
unsigned int time_flag = 0;
//send HIGH signal
digitalWrite(TrigPin, HIGH);
//wait 2 microsecond
delayMicroseconds(2);
//send LOW signal
digitalWrite(TrigPin, LOW);
//wait 10 microsecond
delayMicroseconds(10);
//send HIGH signal
digitalWrite(TrigPin, HIGH);
//getting system clock
tStartPing = micros();
timeout = 0;
pin = digitalRead(EchoPin);
while(pin)
{
//waiting for response from EchoPin
//break out when timeout
pin = digitalRead(EchoPin);
time_flag++;
//break when time_flag equal to
//timeout limit
if(time_flag > SDM_IO_TIMEOUT)
{ timeout = 1; break; }
}
//calculate the response time
ultrasoundDuration = micros() - tStartPing;
//if timeout equal 1
if (timeout)
return 999;
else
return ultrasoundDuration * 0.017;
// result in cm
}
פלט:
סיכום:
החיישנים הם החלק הבולט והמעניין ביותר בעבודה עם Arduino ומאפשר לנו ללכת צעד קדימה בעיצוב ובתכנון של מוצרי Embedded בהמשך אני אסקור עוד חיישנים רבים עבור מגוון רחב של שימושים.
זה חי...
אין תגובות:
הוסף רשומת תגובה