Пребарување код

Лекција 74: Користење на остар инфрацрвен сензорски модул со Arduino

Лекција 74: Користење на остар инфрацрвен сензорски модул со Arduino

Вовед

Овој водич покажува како да користите два или повеќе Sharp инфрацрвени (IR) сензори за растојание со Arduino за мерење на растојание и прикажување на резултатите на Serial Monitor. Иако еден сензор е корисен, многу реални апликации, како што се паметен автомобил, роботска рака или било која подвижна машина, бараат мерење на растојание од повеќе насоки истовремено. На пример, можете да поставите еден сензор напред за мерење на растојанието пред вас, а друг на десната или левата страна за да избегнете судири. Овој туторијал ви покажува како да го конфигурирате вашиот Arduino за ефикасно ракување со повеќе сензори, надградувајќи се на посебно, детално видео кое ги објаснува спецификациите и работата на поединечниот сензор.

Еве неколку практични идеи за проекти кои ќе ве инспирираат:

  • Изградба на робот кој избегнува пречки со мерење на растојанија на неговата лева, десна и предна страна.
  • Креирање паметен асистент за паркирање кој користи повеќе сензори за да го води возилото во тесен простор.
  • Развивање безбедносен систем кој го надгледува влезот или коридорот со сензори поставени под различни агли.
  • Изработка на интерактивна уметничка инсталација каде растојанието на раката на гледачот го менува она што се прикажува.
Sharpt IR distance sensor

Во ова видео, фокусот е на жиците и кодот потребни за работа со повеќе Sharp IR сензори. Демонстрацијата користи два GP2Y0A21YK0F сензори, кои мерат растојанија од 10 до 80 cm. Кодот е структуриран да биде лесно проширлив, така што можете да додадете трет, четврт или дури и повеќе сензори со само неколку линии код.

Хардвер и компоненти

За да го следите овој проект, ќе ви требаат следниве компоненти:

  • Arduino плоча (на пр., Uno, Mega).
  • Два или повеќе Sharp IR сензори за растојание (на пр., GP2Y0A21YK0F).
  • Поврзувачки жици (jumper wires).
  • Прототипна плоча (breadboard) (опционално, за полесно поврзување).

Водич за поврзување

Sharp IR сензорот има три жици: црвена (напојување), црна (земја) и жолта (излез на сигнал). Поврзувањето е едноставно. За првиот сензор, поврзете ја неговата црвена жица на 5V пин на Arduino, црната жица на пин за земја (GND), а жолтата сигнална жица на аналоген пин, на пример, A1. За вториот сензор, поврзете ја неговата црвена жица на истиот или друг 5V пин, црната жица на GND, а жолтата жица на различен аналоген пин, како што е A2.

Ако ви снема 5V пинови, видеото дава паметно решение. Можете да користите било кој дигитален пин како извор на напојување. Во кодот, дигиталниот пин 2 е конфигуриран како излез и поставен на HIGH, што обезбедува постојани 5V. Потоа би ги поврзале црвените жици на вашите сензори на овој дигитален пин наместо на посветениот 5V пин. Жиците за земја може да се поврзат на било кој од GND пиновите на Arduino. Видеото прикажува демонстрација на ова поставување на [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 cm GP2Y0A51SK0F користете 215
  • 4 до 30 cm GP2Y0A41SK0F / GP2Y0AF30 серија користете 430
  • 10 до 80 cm GP2Y0A21YK0F користете 1080
  • 10 до 150 cm GP2Y0A60SZLF користете 10150
  • 20 до 150 cm GP2Y0A02YK0F користете 20150
  • 100 до 550 cm 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): ");, проследено со вредноста и единицата "cm".

Демонстрација на жив проект

Во видеото, презентерот демонстрира поставување со два сензори. Како што можете да видите во демонстрацијата на [00:07:44], Serial Monitor ги прикажува отчитувањата на растојанието од двата сензори. Кога предмет се поставува пред првиот сензор, отчитувањето за „Distance (1)“ се менува. Слично, кога предмет се поставува пред вториот сензор, отчитувањето за „Distance (2)“ се ажурира. Видеото покажува дека со држење на лист хартија на одредено растојание, сензорите отчитуваат приближно 23 и 24 cm. Кога еден сензор е блокиран, неговото отчитување паѓа на околу 17 cm, потврдувајќи дека секој сензор работи независно и обезбедува податоци за растојанието во реално време за својата соодветна насока. Ова ја потврдува способноста на кодот да ракува со повеќе сензори истовремено.

Поглавја

  • [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 датотека

Други датотеки