Search Code

Сабақ 74: Arduino-мен өткір инфрақызыл сенсор модулін қолдану

Сабақ 74: Arduino-мен өткір инфрақызыл сенсор модулін қолдану

Кіріспе

Бұл нұсқаулық Arduino-мен екі немесе одан да көп Sharp инфрақызыл (IR) қашықтық сенсорларын қалай пайдалану керектігін, қашықтықты өлшеуді және нәтижелерді Serial Monitor-да көрсетуді көрсетеді. Бір сенсор пайдалы болғанымен, көптеген нақты әлем қолданбалары, мысалы, ақылды көлік, роботтық қол немесе кез келген қозғалатын машина, бір уақытта бірнеше бағыттан қашықтықты өлшеуді талап етеді. Мысалы, алдыңғы жаққа қашықтықты өлшеу үшін бір сенсорды алдыңғы жаққа, ал соқтығысуды болдырмау үшін оң немесе сол жаққа тағы біреуін орнатуға болады. Бұл оқулық Arduino-ны бірнеше сенсорларды тиімді басқаруға қалай конфигурациялау керектігін көрсетеді, жеке сенсордың сипаттамалары мен жұмысын түсіндіретін жеке, егжей-тегжейлі бейнеге негізделген.

Міне, сізді шабыттандыратын бірнеше практикалық жоба идеялары:

  • Сол, оң және алдыңғы жақтарындағы қашықтықты өлшеу арқылы кедергілерден аулақ болатын робот құру.
  • Көлікті тар орынға бағыттау үшін бірнеше сенсорларды қолданатын ақылды тұрақ көмекшісін жасау.
  • Әртүрлі бұрыштарда орнатылған сенсорлармен есік алдын немесе дәлізді бақылайтын қауіпсіздік жүйесін әзірлеу.
  • Көрерменнің қолының қашықтығына байланысты көрсетілетін нәрсені өзгертетін интерактивті өнер қондырғысын жасау.
Sharpt IR distance sensor

Бұл бейнеде бірнеше Sharp IR сенсорларын іске қосу үшін қажетті сымдар мен кодқа назар аударылады. Демонстрацияда 10-нан 80 см-ге дейінгі қашықтықты өлшейтін екі GP2Y0A21YK0F сенсоры қолданылады. Код оңай кеңейтілетін етіп құрылымдалған, сондықтан сіз бірнеше жол кодпен үшінші, төртінші немесе одан да көп сенсорларды қоса аласыз.

Аппараттық құралдар мен компоненттер

Осы жобамен жұмыс істеу үшін сізге келесі компоненттер қажет:

  • Arduino тақтасы (мысалы, Uno, Mega).
  • Екі немесе одан да көп Sharp IR қашықтық сенсорлары (мысалы, GP2Y0A21YK0F).
  • Жалғағыш сымдар.
  • Макет тақтасы (міндетті емес, оңай қосылу үшін).

Сымдарды жалғау нұсқаулығы

Sharp IR сенсорының үш сымы бар: қызыл (қуат), қара (жер) және сары (сигнал шығысы). Сымдарды жалғау қарапайым. Бірінші сенсор үшін оның қызыл сымын Arduino-ның 5V түйреуішіне, қара сымын жер (GND) түйреуішіне, ал сары сигнал сымын аналогтық түйреуішке, мысалы, A1-ге қосыңыз. Екінші сенсор үшін оның қызыл сымын сол немесе басқа 5V түйреуішіне, қара сымын GND-ге, ал сары сымын басқа аналогтық түйреуішке, мысалы, A2-ге қосыңыз.

Егер 5V түйреуіштері жетіспесе, бейнеде ақылды шешім ұсынылады. Кез келген цифрлық түйреуішті қуат көзі ретінде пайдалануға болады. Кодта цифрлық түйреуіш 2 шығыс ретінде конфигурацияланып, HIGH күйіне орнатылады, бұл тұрақты 5V қамтамасыз етеді. Содан кейін сенсорларыңыздың қызыл сымдарын арнайы 5V түйреуішінің орнына осы цифрлық түйреуішке қосасыз. Жер сымдарын Arduino-дағы кез келген 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

Кодты түсіндіру

Бұл бөлім кодтың пайдаланушы конфигурациялайтын бөліктеріне назар аударады, олардың барлығы скетчтің жоғарғы жағында орналасқан. Мұнда сіз түйреуіштеріңіз бен сенсор үлгілеріңізді анықтайсыз.

Біріншіден, код Sharp 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() функциясында Serial Monitor 9600 бод жылдамдығында инициализацияланады. Бұл Arduino-ның компьютеріңізбен байланысатын жылдамдығы. Код сонымен қатар қажет болған жағдайда цифрлық түйреуішті 5V көзі ретінде пайдалану бөлімін қамтиды, сымдар бөлімінде түсіндірілгендей. Бұл pinMode(2,OUTPUT); және digitalWrite(2, HIGH); арқылы жасалады.

Соңында, loop() функциясы негізгі логиканы қамтиды. Басында delay(500); бар, ол әрбір көрсеткіштер жиынтығы арасындағы уақытты 500 миллисекундқа орнатады. Сіз оны көрсеткіштерді жиі немесе сирек ету үшін реттей аласыз. Циклдің негізі - әр сенсордан қашықтықты кітапхананың distance() функциясы арқылы оқу, мысалы int dis1=SharpIR1.distance();. Нәтижелер содан кейін сипаттамалық мәтінмен Serial Monitor-ға басып шығарылады, мысалы Serial.print("Distance (1): ");, содан кейін мән және "см" бірлігі.

Тірі жоба демонстрациясы

Бейнеде жүргізуші екі сенсормен құрылғыны көрсетеді. [00:07:44] демонстрациясында көрініп тұрғандай, Serial Monitor екі сенсордан қашықтық көрсеткіштерін шығарады. Бірінші сенсордың алдына нысан қойылғанда, "Distance (1)" көрсеткіші өзгереді. Сол сияқты, екінші сенсордың алдына нысан қойылғанда, "Distance (2)" көрсеткіші жаңартылады. Бейнеде қағаз парағын белгілі бір қашықтықта ұстағанда, сенсорлар шамамен 23 және 24 см көрсететіні көрсетілген. Бір сенсор жабылғанда, оның көрсеткіші шамамен 17 см-ге төмендейді, бұл әр сенсордың тәуелсіз жұмыс істейтінін және өз бағыты бойынша нақты уақыттағы қашықтық деректерін беретінін растайды. Бұл кодтың бірнеше сенсорды бір уақытта өңдеу қабілетін дәлелдейді.

Тараулар

  • [00:00] Бірнеше Sharp IR сенсорларын қолдануға кіріспе
  • [00:28] Бірнеше қашықтық сенсорларына арналған қолдану аймақтары
  • [01:34] Код түсіндірмесі: Кітапхана және пин анықтамалары
  • [02:24] Сенсор үлгілерін конфигурациялау және нысандар құру
  • [04:15] Setup және Loop функциялары түсіндірілді
  • [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
     
}

Файлдар📁

Fritzing файлы

Басқа файлдар