ኮድ ይፈልጉ

ትምህርት 74፡ ከአርዱኖ ጋር ስለታም ኢንፍራሬድ ዳሳሽ ሞጁል መጠቀም

ትምህርት 74፡ ከአርዱኖ ጋር ስለታም ኢንፍራሬድ ዳሳሽ ሞጁል መጠቀም

መግቢያ

ይህ መመሪያ ከአርዱኖ (Arduino) ጋር ሁለት ወይም ከዚያ በላይ የሻርፕ (Sharp) ኢንፍራሬድ (IR) የርቀት ዳሳሾችን እንዴት መጠቀም እንደሚቻል፣ ርቀትን ለመለካት እና ውጤቱን በሴሪያል ሞኒተር (Serial Monitor) ላይ ለማሳየት ያሳያል። አንድ ነጠላ ዳሳሽ ጠቃሚ ቢሆንም፣ እንደ ስማርት መኪና፣ ሮቦቲክ ክንድ፣ ወይም ማንኛውም ተንቀሳቃሽ ማሽን ያሉ ብዙ ተግባራዊ አፕሊኬሽኖች ከበርካታ አቅጣጫዎች በአንድ ጊዜ የርቀት መለኪያዎችን ይፈልጋሉ። ለምሳሌ፣ አንድ ዳሳሽ ከፊት ለፊት ያለውን ርቀት ለመለካት፣ እና ሌላውን በቀኝ ወይም በግራ በኩል ግጭትን ለማስቀረት መጫን ይችላሉ። ይህ ቱቶሪያል የእያንዳንዱን ዳሳሽ ዝርዝር እና አሰራር የሚያብራራ የተለየ ዝርዝር ቪዲዮ ላይ በመመስረት፣ አርዱኖዎን ብዙ ዳሳሾችን በብቃት እንዲያስተዳድር እንዴት ማዋቀር እንደሚችሉ ያሳይዎታል።

እነዚህ ሊያነሳሷቸው የሚችሉ ጥቂት ተግባራዊ የፕሮጀክት ሀሳቦች እዚህ አሉ፦

  • በግራ፣ በቀኝ እና በፊት በኩል ርቀቶችን በመለካት እንቅፋቶችን የሚያስወግድ ሮቦት መገንባት።
  • ተሽከርካሪን ወደ ጠባብ ቦታ ለመምራት ብዙ ዳሳሾችን የሚጠቀም ብልህ የመኪና ማቆሚያ ረዳት መፍጠር።
  • በተለያዩ ማዕዘኖች በተቀመጡ ዳሳሾች የበር መንገድን ወይም ኮሪደርን የሚከታተል የደህንነት ስርዓት ማዘጋጀት።
  • የተመልካቹ እጅ ርቀት የሚታየውን ነገር የሚቀይርበት በይነተገናኝ የጥበብ ጭነት መስራት።
Sharpt IR distance sensor

በዚህ ቪዲዮ ውስጥ፣ ትኩረቱ ብዙ የሻርፕ IR ዳሳሾችን ለማስኬድ በሚያስፈልገው የወልና (wiring) እና ኮድ ላይ ነው። ማሳያው ከ10 እስከ 80 ሴ.ሜ ርቀትን የሚለኩ ሁለት GP2Y0A21YK0F ዳሳሾችን ይጠቀማል። ኮዱ በቀላሉ ሊሰፋ በሚችል መልኩ የተዋቀረ ነው፣ ስለዚህ ሶስተኛ፣ አራተኛ፣ ወይም ከዚያ በላይ ዳሳሾችን በጥቂት የኮድ መስመሮች ብቻ ማከል ይችላሉ።

ሃርድዌር እና ክፍሎች

ከዚህ ፕሮጀክት ጋር ለመከታተል፣ የሚከተሉትን ክፍሎች ያስፈልግዎታል፦

  • የአርዱኖ ቦርድ (ለምሳሌ፣ Uno፣ Mega)።
  • ሁለት ወይም ከዚያ በላይ የሻርፕ IR የርቀት ዳሳሾች (ለምሳሌ፣ GP2Y0A21YK0F)።
  • የመዝለያ ሽቦዎች (Jumper wires)።
  • የብሬድቦርድ (breadboard) (አማራጭ፣ ለቀላል ግንኙነቶች)።

የወልና መመሪያ

የሻርፕ IR ዳሳሽ ሶስት ሽቦዎች አሉት፦ ቀይ (ኃይል)፣ ጥቁር (መሬት)፣ እና ቢጫ (የምልክት ውፅዓት)። የወልና አሰራሩ ቀላል ነው። ለመጀመሪያው ዳሳሽ፣ ቀዩን ሽቦ ከአርዱኖው 5V ፒን ጋር፣ ጥቁሩን ሽቦ ከመሬት (GND) ፒን ጋር፣ እና ቢጫውን የምልክት ሽቦ ከአናሎግ ፒን ጋር፣ ለምሳሌ A1፣ ያገናኙ። ለሁለተኛው ዳሳሽ፣ ቀዩን ሽቦ ከተመሳሳይ ወይም ከሌላ 5V ፒን ጋር፣ ጥቁሩን ሽቦ ከGND ጋር፣ እና ቢጫውን ሽቦ ከተለየ አናሎግ ፒን ጋር፣ እንደ A2፣ ያገናኙ።

የ5V ፒኖች ካለቀቁ፣ ቪዲዮው ብልህ መፍትሄ ይሰጣል። ማንኛውንም ዲጂታል ፒን እንደ የኃይል ምንጭ መጠቀም ይችላሉ። በኮዱ ውስጥ፣ ዲጂታል ፒን 2 እንደ ውፅዓት ተዋቅሮ HIGH ተደርጓል፣ ይህም ቋሚ 5V ያቀርባል። ከዚያ የዳሳሾችዎን ቀይ ሽቦዎች ከዚህ ዲጂታል ፒን ጋር ከተወሰነው 5V ፒን ይልቅ ያገናኛሉ። የመሬት ሽቦዎቹ በአርዱኖው ላይ ካሉ ማናቸውም GND ፒኖች ጋር ሊገናኙ ይችላሉ። ቪዲዮው የዚህን ውቅር ማሳያ በ[00:06:10] ላይ ያሳያል።

ለግንኙነቶች ምስላዊ ማጣቀሻ፣ እባክዎ ከታች ያለውን የወልና ሥዕላዊ መግለጫ ይመልከቱ፦

Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602

የኮድ ማብራሪያ

ይህ ክፍል በተጠቃሚ ሊዋቀሩ በሚችሉት የኮድ ክፍሎች ላይ ያተኩራል፣ እነዚህም ሁሉም በስኬች (sketch) አናት ላይ ይገኛሉ። ፒኖችዎን እና የዳሳሽ ሞዴሎችዎን የሚገልጹበት ቦታ ይህ ነው።

በመጀመሪያ፣ ኮዱ ለሻርፕ IR ዳሳሾች አስፈላጊውን ቤተ-መጻሕፍት ያካትታል፣ #include <SharpIR.h>። ይህ ቤተ-መጻሕፍት ከዳሳሹ የሚመጣውን አናሎግ ቮልቴጅ ወደ የርቀት ንባብ ለመቀየር የሚያስፈልገውን ውስብስብ ሂሳብ ያስተናግዳል።

በመቀጠል፣ ለእያንዳንዱ ዳሳሽዎ የአናሎግ ፒኖችን ይገልጻሉ። የምሳሌ ኮዱ #define IR1 A1 እና #define IR2 A2 ይጠቀማል። ከሁለት በላይ ዳሳሾችን እየተጠቀሙ ከሆነ፣ እንደ #define IR3 A3 ያሉ ተጨማሪ ትርጓሜዎችን እዚህ ያክላሉ።

የውቅሩ ወሳኝ ክፍል ለዳሳሽዎ ትክክለኛውን ሞዴል ማዘጋጀት ነው። ኮዱ #define model1 1080 እና #define model2 1080 ይጠቀማል። ይህ ቁጥር የዘፈቀደ አይደለም፤ የትኛው ዳሳሽ እንዳለዎት ለቤተ-መጻሕፍቱ ይነግራል፣ ምክንያቱም እያንዳንዱ ሞዴል የተለየ የቮልቴጅ-ወደ-ርቀት ኩርባ አለው። የኮድ አስተያየቶቹ ጠቃሚ ዝርዝር ይሰጣሉ፦

  • ከ2 እስከ 15 ሴ.ሜ GP2Y0A51SK0F 215 ይጠቀሙ
  • ከ4 እስከ 30 ሴ.ሜ GP2Y0A41SK0F / GP2Y0AF30 ተከታታይ 430 ይጠቀሙ
  • ከ10 እስከ 80 ሴ.ሜ GP2Y0A21YK0F 1080 ይጠቀሙ
  • ከ10 እስከ 150 ሴ.ሜ GP2Y0A60SZLF 10150 ይጠቀሙ
  • ከ20 እስከ 150 ሴ.ሜ GP2Y0A02YK0F 20150 ይጠቀሙ
  • ከ100 እስከ 550 ሴ.ሜ GP2Y0A710K0F 100550 ይጠቀሙ

ይህንን እሴት ከተጠቀሙበት ልዩ ዳሳሽ ጋር እንዲዛመድ መቀየር አለብዎት። ለምሳሌ፣ GP2Y0A02YK0F እየተጠቀሙ ከሆነ፣ ትርጓሜውን ወደ #define model1 20150 ይቀይራሉ። ከዚያ ኮዱ ለእያንዳንዱ ዳሳሽ አንድ ነገር ይፈጥራል፣ ለምሳሌ SharpIR SharpIR1(IR1, model1);። ይህ መስመር ፒኑን እና ሞዴሉን ለመጀመሪያው ዳሳሽ ያገናኛል። ተጨማሪ ዳሳሾችን ካከሉ፣ ይህንን መስመር ገልብጠው የነገሩን ስም፣ ፒን እና ሞዴል በዚሁ መሰረት ይቀይራሉ።

setup() ተግባር ውስጥ፣ ሴሪያል ሞኒተሩ በ9600 ባውድ (baud) ይጀመራል። ይህ አርዱኖ ከኮምፒውተርዎ ጋር የሚገናኝበት ፍጥነት ነው። ኮዱ እንደ አስፈላጊነቱ ዲጂታል ፒን እንደ 5V ምንጭ ለመጠቀም የሚያስችል ክፍልም ያካትታል፣ በወልና ክፍል እንደተብራራው። ይህ የሚደረገው በpinMode(2,OUTPUT); እና digitalWrite(2, HIGH); ነው።

በመጨረሻም፣ የloop() ተግባር ዋናውን አመክንዮ ይዟል። መጀመሪያ ላይ delay(500); አለ፣ ይህም በእያንዳንዱ የንባብ ስብስብ መካከል ያለውን ጊዜ ወደ 500 ሚሊሰከንድ ያዘጋጃል። ንባቦቹን ይበልጥ ተደጋጋሚ ወይም ብዙ ጊዜ ለማድረግ ይህንን ማስተካከል ይችላሉ። የloop ዋናው ክፍል የቤተ-መጻሕፍቱን distance() ተግባር በመጠቀም ከእያንዳንዱ ዳሳሽ ርቀቱን የሚያነብበት ነው፣ ለምሳሌ int dis1=SharpIR1.distance();። ውጤቶቹ ከዚያ ገላጭ ጽሑፍ ጋር ወደ ሴሪያል ሞኒተሩ ይታተማሉ፣ ለምሳሌ Serial.print("Distance (1): ");፣ ከዚያም እሴቱ እና "ሴ.ሜ" የሚለው አሃድ።

የቀጥታ ፕሮጀክት ማሳያ

በቪዲዮው ውስጥ፣ አቅራቢው በሁለት ዳሳሾች ያለውን ውቅር ያሳያል። በ[00:07:44] ላይ ባለው ማሳያ እንደሚታየው፣ የሴሪያል መቆጣጠሪያው ከሁለቱም ዳሳሾች የርቀት ንባቦችን ያሳያል። አንድ ነገር በመጀመሪያው ዳሳሽ ፊት ሲቀመጥ፣ የ"ርቀት (1)" ንባብ ይለወጣል። በተመሳሳይ፣ አንድ ነገር በሁለተኛው ዳሳሽ ፊት ሲቀመጥ፣ የ"ርቀት (2)" ንባብ ይዘምናል። ቪዲዮው እንደሚያሳየው፣ አንድ ወረቀት በርቀት ሲያዙ፣ ዳሳሾቹ በግምት 23 እና 24 ሴ.ሜ ያነባሉ። አንድ ዳሳሽ ሲዘጋ፣ ንባቡ ወደ 17 ሴ.ሜ ገደማ ይወርዳል፣ ይህም እያንዳንዱ ዳሳሽ በተናጥል እንደሚሰራ እና ለየአቅጣጫው የእውነተኛ ጊዜ የርቀት መረጃ እንደሚሰጥ ያረጋግጣል። ይህ ኮዱ ብዙ ዳሳሾችን በአንድ ጊዜ የመቆጣጠር ችሎታን ያረጋግጣል።

ምዕራፎች

  • [00:00] የበርካታ ሻርፕ IR ዳሳሾች አጠቃቀም መግቢያ
  • [00:28] ለበርካታ የርቀት ዳሳሾች መተግበሪያዎች
  • [01:34] የኮድ ማብራሪያ፡ ቤተ-መጻሕፍት እና የፒን ትርጓሜዎች
  • [02:24] የዳሳሽ ሞዴሎችን ማዋቀር እና ነገሮችን መፍጠር
  • [04:15] የሴትአፕ እና የሉፕ ተግባራት ተብራርተዋል
  • [06:10] ለበርካታ ዳሳሾች የሽቦ አያያዝ መመሪያ
  • [07:44] ከሁለት ዳሳሾች ጋር የቀጥታ ማሳያ

ምስሎች

Sharpt IR distance sensor GP2Y0A21YK0F
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for multiple Sharp IR distance sensors
Arduino wiring for Sharf IR distance sensor
Arduino wiring for Sharf IR distance sensor
Sharpt IR distance sensor
Sharpt IR distance sensor GP2Y0A21YK0F
Arduino wiring for Sharp IR sensor with LCD1602
Arduino wiring for Sharp IR sensor with LCD1602
176-Using a Sharp IR sensor module with Arduino
ቋንቋ: C++
++
/*
 * Using two or more Sharp IR distance sensors with Arduino
 * Measure distance 

 * Download and resource page for this video https://robojax.com/RJT143
 * Watch video instructions for this video: https://youtu.be/WQ3oFyF5qeY
 * 
 * Watch main video explaining the Sharp IR distance sensor:
 * https://robojax.com?vid=robojax-sharp_IR
 * 
 * Written by Ahmad Shamshiri for Robojax.com on Saturday, December 1, 2018 
 * at 20:56 in Ajax, Ontario, Canada

 * 
  * 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 <SharpIR.h>

#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin

#define model1 1080 // for GP2Y0A21YK0F  used 1080
#define model2 1080 // for GP2Y0A21YK0F  used 1080

// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F  use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series  use 430
10 to 80 cm GP2Y0A21YK0F  use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F  use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);

void setup() {
    // Multiple Sharp IR Distance meter code for Robojax.com
 Serial.begin(9600);
 Serial.println("Robojax Sharp IR  ");

 // extra pin for 5V if needed
 pinMode(2,OUTPUT);// define pin 2 as output
 digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
  // Robojax.com 20181201
}

void loop() {
    // Sharp IR code for Robojax.com 20181201
    delay(500);   

  unsigned long startTime=millis();  // takes the time before the loop on the library begins

  int dis1=SharpIR1.distance();  // this returns the distance for sensor 1
  int dis2=SharpIR2.distance();  // this returns the distance for sensor 2
  // Sharp IR code for Robojax.com 20181201

  Serial.print("Distance (1): ");
  Serial.print(dis1);
  Serial.println("cm");
  
  Serial.print("Distance (2): ");
  Serial.print(dis2);
  Serial.println("cm");
     // Sharp IR code for Robojax.com
     
}
452-Lesson 74: Using Two Sharp Infrared Sensors with Arduino
ቋንቋ: C++
++
/*
  * Lesson 74: Using two or more Sharp IR distance sensors
 * Sharp IR (infrared) distance measurement module for Arduino
 * Measures the distance in cm. 
 * Written by Ahmad Shamshiri for Robojax.com 
 * on February 25, 2019 at 21:38 in Ajax, Ontario, Canada




 * Original library: https://github.com/guillaume-rico/SharpIR
 
 * Watch video instructions for this code: https://youtu.be/WQ3oFyF5qeY
 * 
 * Full explanation of this code and wiring diagram is available at
 * my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62

 * Written by Ahmad Shamshiri on February 3, 2018 at 07:34
 * in Ajax, Ontario, Canada. www.robojax.com
 * 


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/>.

*/




 */
  // Sharp IR code for Robojax.com
#include 

#define IR A0 // define signal pin
#define model 1080 // used 1080 because model GP2Y0A21YK0F is used
// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
// model: an int that determines your sensor:  1080 for GP2Y0A21Y
//                                            20150 for GP2Y0A02Y
//                                            430 for GP2Y0A41SK   
/*
2 to 15 cm GP2Y0A51SK0F	use 1080
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series	use 430
10 to 80 cm GP2Y0A21YK0F	use 1080
10 to 150 cm GP2Y0A60SZLF	use 10150
20 to 150 cm GP2Y0A02YK0F	use 20150
100 to 550 cm GP2Y0A710K0F	use 100550

*/
#include <SharpIR.h>

#define IR1 A1 // define signal pin
#define IR2 A2 // define signal pin

#define model1 1080 // for GP2Y0A21YK0F  used 1080
#define model2 1080 // for GP2Y0A21YK0F  used 1080

// Sharp IR code for Robojax.com
// ir: the pin where your sensor is attached
/*
2 to 15 cm GP2Y0A51SK0F  use 215
4 to 30 cm GP2Y0A41SK0F / GP2Y0AF30 series  use 430
10 to 80 cm GP2Y0A21YK0F  use 1080
10 to 150 cm GP2Y0A60SZLF use 10150
20 to 150 cm GP2Y0A02YK0F use 20150
100 to 550 cm GP2Y0A710K0F  use 100550
*/
SharpIR SharpIR1(IR1, model1);
SharpIR SharpIR2(IR2, model2);

void setup() {
    // Multiple Sharp IR Distance meter code for Robojax.com
 Serial.begin(9600);
 Serial.println("Robojax Sharp IR  ");

 // extra pin for 5V if needed
 pinMode(2,OUTPUT);// define pin 2 as output
 digitalWrite(2, HIGH);// set pin 2 HIGH so it always have 5V
  // Robojax.com 20181201
}

void loop() {
    // Sharp IR code for Robojax.com 20181201
    delay(500);   

  unsigned long startTime=millis();  // takes the time before the loop on the library begins

  int dis1=SharpIR1.distance();  // this returns the distance for sensor 1
  int dis2=SharpIR2.distance();  // this returns the distance for sensor 2
  // Sharp IR code for Robojax.com 20181201

  Serial.print("Distance (1): ");
  Serial.print(dis1);
  Serial.println("cm");
  
  Serial.print("Distance (2): ");
  Serial.print(dis2);
  Serial.println("cm");
     // Sharp IR code for Robojax.com
     
}

ፋይሎች📁

ፍሪትዚንግ ፋይል

ሌላ ፋይሎች