Pretraži kod

Lekcija 74: Korištenje oštrog infracrvenog senzorskog modula s Arduinom

Lekcija 74: Korištenje oštrog infracrvenog senzorskog modula s Arduinom

Uvod

Ovaj vodič pokazuje kako koristiti dva ili više Sharp infracrvenih (IR) senzora udaljenosti s Arduinom za mjerenje udaljenosti i prikaz rezultata na Serial Monitoru. Iako je jedan senzor koristan, mnoge stvarne primjene, poput pametnog automobila, robotske ruke ili bilo koje pokretne mašine, zahtijevaju mjerenje udaljenosti iz više smjerova istovremeno. Na primjer, možete instalirati jedan senzor sprijeda za mjerenje udaljenosti ispred, a drugi s desne ili lijeve strane za izbjegavanje sudara. Ovaj tutorijal pokazuje kako konfigurirati vaš Arduino za efikasno upravljanje s više senzora, nadograđujući se na zaseban, detaljan video koji objašnjava specifikacije i rad pojedinačnog senzora.

Evo nekoliko praktičnih ideja za projekte koje vas mogu inspirirati:

  • Izgradnja robota koji izbjegava prepreke mjerenjem udaljenosti s lijeve, desne i prednje strane.
  • Kreiranje pametnog parking asistenta koji koristi više senzora za vođenje vozila u tijesan prostor.
  • Razvijanje sigurnosnog sistema koji prati vrata ili hodnik sa senzorima postavljenim pod različitim uglovima.
  • Pravljenje interaktivne umjetničke instalacije gdje udaljenost ruke posmatrača mijenja ono što se prikazuje.
Sharpt IR distance sensor

U ovom videu, fokus je na ožičenju i kodu potrebnim za pokretanje više Sharp IR senzora. Demonstracija koristi dva GP2Y0A21YK0F senzora, koji mjere udaljenosti od 10 do 80 cm. Kod je strukturiran tako da se lako može proširiti, pa možete dodati treći, četvrti ili čak više senzora sa samo nekoliko linija koda.

Hardver i komponente

Za praćenje ovog projekta, trebat će vam sljedeće komponente:

  • Arduino ploča (npr. Uno, Mega).
  • Dva ili više Sharp IR senzora udaljenosti (npr. GP2Y0A21YK0F).
  • Žice za spajanje (jumper wires).
  • Breadboard (opciono, za lakše povezivanje).

Vodič za ožičenje

Sharp IR senzor ima tri žice: crvenu (napajanje), crnu (uzemljenje) i žutu (izlaz signala). Ožičenje je jednostavno. Za prvi senzor, spojite njegovu crvenu žicu na 5V pin Arduina, crnu žicu na pin za uzemljenje (GND), a žutu signalnu žicu na analogni pin, na primjer A1. Za drugi senzor, spojite njegovu crvenu žicu na isti ili drugi 5V pin, crnu žicu na GND, a žutu žicu na drugi analogni pin, kao što je A2.

Ako vam ponestane 5V pinova, video nudi pametno rješenje. Možete koristiti bilo koji digitalni pin kao izvor napajanja. U kodu, digitalni pin 2 je konfigurisan kao izlaz i postavljen na HIGH, što osigurava konstantnih 5V. Zatim biste spojili crvene žice vaših senzora na ovaj digitalni pin umjesto na namjenski 5V pin. Žice za uzemljenje mogu se spojiti na bilo koji od GND pinova na Arduinu. Video prikazuje demonstraciju ove postavke na [00:06:10].

Za vizuelnu referencu povezivanja, pogledajte dijagram ožičenja ispod:

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

Objašnjenje koda

Ovaj dio se fokusira na korisnički konfigurabilne dijelove koda, koji se svi nalaze na vrhu skice. Ovdje ćete definirati svoje pinove i modele senzora.

Prvo, kod uključuje potrebnu biblioteku za Sharp IR senzore, #include <SharpIR.h>. Ova biblioteka upravlja složenom matematikom potrebnom za pretvaranje analognog napona iz senzora u očitavanje udaljenosti.

Zatim ćete definirati analogne pinove za svaki od vaših senzora. Primjer koda koristi #define IR1 A1 i #define IR2 A2. Ako koristite više od dva senzora, dodali biste još definicija ovdje, poput #define IR3 A3.

Ključni dio konfiguracije je postavljanje ispravnog modela za vaš senzor. Kod koristi #define model1 1080 i #define model2 1080. Ovaj broj nije proizvoljan; on govori biblioteci koji senzor imate, jer svaki model ima drugačiju krivulju napon-udaljenost. Komentari u kodu pružaju korisnu listu:

  • 2 do 15 cm GP2Y0A51SK0F koristi 215
  • 4 do 30 cm GP2Y0A41SK0F / GP2Y0AF30 serija koristi 430
  • 10 do 80 cm GP2Y0A21YK0F koristi 1080
  • 10 do 150 cm GP2Y0A60SZLF koristi 10150
  • 20 do 150 cm GP2Y0A02YK0F koristi 20150
  • 100 do 550 cm GP2Y0A710K0F koristi 100550

Morate promijeniti ovu vrijednost kako bi odgovarala vašem specifičnom senzoru. Na primjer, ako koristite GP2Y0A02YK0F, promijenili biste definiciju u #define model1 20150. Kod zatim kreira objekat za svaki senzor, poput SharpIR SharpIR1(IR1, model1);. Ova linija povezuje pin i model za prvi senzor. Ako dodate više senzora, kopirali biste ovu liniju i promijenili ime objekta, pin i model u skladu s tim.

U setup() funkciji, Serial Monitor se inicijalizira na 9600 bauda. To je brzina kojom Arduino komunicira s vašim računarom. Kod također uključuje dio za korištenje digitalnog pina kao 5V izvora ako je potrebno, kao što je objašnjeno u dijelu o ožičenju. To se radi sa pinMode(2,OUTPUT); i digitalWrite(2, HIGH);.

Konačno, loop() funkcija sadrži glavnu logiku. Na početku je delay(500);, koji postavlja vrijeme između svakog seta očitavanja na 500 milisekundi. Ovo možete prilagoditi da očitavanja budu više ili manje česta. Jezgro petlje je mjesto gdje čitate udaljenost sa svakog senzora koristeći distance() funkciju biblioteke, poput int dis1=SharpIR1.distance();. Rezultati se zatim ispisuju na Serial Monitor s opisnim tekstom, kao što je Serial.print("Distance (1): ");, nakon čega slijedi vrijednost i jedinica "cm".

Demonstracija projekta uživo

U videu, voditelj demonstrira postavljanje s dva senzora. Kao što možete vidjeti u demonstraciji na [00:07:44], Serial Monitor prikazuje očitanja udaljenosti s oba senzora. Kada se objekt postavi ispred prvog senzora, očitanje za "Distance (1)" se mijenja. Slično tome, kada se objekt postavi ispred drugog senzora, očitanje za "Distance (2)" se ažurira. Video pokazuje da držanjem lista papira na udaljenosti, senzori očitavaju približno 23 i 24 cm. Kada je jedan senzor blokiran, njegovo očitanje pada na oko 17 cm, što potvrđuje da svaki senzor radi nezavisno i pruža podatke o udaljenosti u realnom vremenu za svoj odgovarajući smjer. Ovo potvrđuje sposobnost koda da upravlja s više senzora istovremeno.

Poglavlja

  • [00:00] Uvod u korištenje više Sharp IR senzora
  • [00:28] Primjene za više senzora udaljenosti
  • [01:34] Objašnjenje koda: Biblioteka i definicije pinova
  • [02:24] Konfiguriranje modela senzora i kreiranje objekata
  • [04:15] Objašnjene setup i loop funkcije
  • [06:10] Vodič za povezivanje više senzora
  • [07:44] Živa demonstracija s dva senzora

Slike

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
Jezik: 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
Jezik: 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
     
}

Datoteke📁

Fritzing datoteka

Ostale datoteke