Arduino MEGA ir atstumo detektorius

arduino-range-finder

Kaip ir žadėjau toliau tęsiu eksperimentus su davikliais. Prie jau pajungto LCD ekrano prijungiau SRF05: ultragarsinį atstumo detektorių, kuris bus roboto rega ir leis neatsimušti į kliūtis. Įrenginys yra tos dvi „akys“ schemos dešinėje viršuje. Veikimo principas nesudėtingas: garsiakalbio pagalba siunčiams aukšto dažnio (40 kHz) garsas ir mikrofonas laukia kol nuo netoliese esančio daikto sugrįš aidas. Kai tik aidas sugrįžta išmatuojamas laikas kiek toks procesas užtruko ir atstumas grąžinamas atgal į Arduino kaip impulso trukmė daviklio išėjime. Visa tai vaizdžiai atrodo taip:

YouTube Preview Image

Pagaliau nuspirkau FireWire kabelį. Dabar savo eksperimentus galiu filmuoti su DV kamera ir kokybė nepalyginamai geresnė nei nei filmuojant su telefonu.

Kodo galabaliukas, kuris veikia mikroprocesoriuje:

// include the library code:
#include <LiquidCrystal.h>

#define echoPin 6             // the SRF05's echo pin
#define initPin 7             // the SRF05's init pin
unsigned long pulseTime = 0;  // variable for reading the pulse

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
 // set up the LCD's number of rows and columns:
 lcd.begin(16, 2);

 // make the init pin an output:
 pinMode(initPin, OUTPUT);
 // make the echo pin an input:
 pinMode(echoPin, INPUT);
}

void loop() {
 digitalWrite(initPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(initPin, LOW);

 pulseTime = pulseIn(echoPin, HIGH);

 lcd.setCursor(0,0);
 lcd.print(pulseTime / 58, DEC);
 lcd.print("cm");

 delay(100);
 lcd.clear();
}

Kas 100 milisekundžių programa nusiunčia impulsą į SRF05, sulaukia iš jo atsakymo ir rezultatą parodo LCD ekrane.

Su šiuo davikliu galima sukonstruoti labai įdomų instrumentą pavadintą theremin. Net nežinau kaip jis verčiasi į lietuvių kalbą. Principą yra lengviau pademonstruoti, negu paaiškinti:

Flickr Video Flickr Video

Daugiau informacijos apie instrumentą su Arduino:

Roboto kūrimas eitųsi kur kas greičiau jeigu pažingsniui nebloginčiau visko ką darau, bet aprašymas tebūnie irgi proceso dalis. :) Galite matyti kaip sekasi mokintis.

Jeigu šis įrašas patiko, nepatingėkit pakomentuoti arba užsiprenumeruoti RSS srautą.

27 komentarai

    • Taip, kodo labai mažai, bet čia reikia dėkoti Arduino platformai. Visas kodas yra užslėptas pagalbiniuose API failuose. Gavau aš irgi porą RGB LED’ų kai pirkau detales iš Oomlaut, bet dar nesugalvojau ką su jais nuveikti. :) Kol kas pažingsniui darau viską, kad susikurti savo robotą.

    • Žinoma galima! Va kodas kurio pagalba duomenys perduodami per COM portą:

      /*
        Ultrasonic Sensor sketch
      
        This program reads a Devantech SRF04 ultrasonic 
        distance sensor. The SRF04 sensor's pins are connected 
        as described below.
        Created 9 November 2006
        By Tom Igoe and Neilson Abeel
      */
      
      #define echoPin 2             // the SRF04's echo pin
      #define initPin 3             // the SRF04's init pin
      unsigned long pulseTime = 0;  // reading the pulse
      
      void setup() {
        // make the init pin an output:
        pinMode(initPin, OUTPUT);
        // make the echo pin an input:
        pinMode(echoPin, INPUT);
        // initialize the serial port:
        Serial.begin(9600);
      }
      
      void loop() {
        // send the sensor a 10microsecond pulse:
        digitalWrite(initPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(initPin, LOW);
      
        // wait for the pulse to return. The pulse
        // goes from low to HIGH to low, so we specify
        // that we want a HIGH-going pulse below:
      
        pulseTime = pulseIn(echoPin, HIGH);
      
        // print out that number
        Serial.println(pulseTime, DEC);
      }
      

      Arduino MEGA ar Decimilinova prie kompiuterio jungiama per USB, o specialūs draiveriai sukuria virtualų COM portą, per kurį galima komunikuoti su bet kuria programavimo kalba, sugebančia atidaryti COM portą ir iš jo nuskaityti duomenis.

  1. Arvydai, ka reiskia tos raides „DEC“?

    Ir kodel man blogai kodas veikia, gal zinai?
    Kodas:
    #include
    LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

    #define TRIGPIN 23
    #define ECHOPIN 22

    void setup()
    {
    lcd.begin(16, 2);
    pinMode(TRIGPIN, OUTPUT);
    pinMode(ECHOPIN, INPUT);
    }
    void loop()
    {
    lcd.setCursor(0, 0);
    lcd.print(Distance());
    }

    float Distance () {

    digitalWrite(TRIGPIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIGPIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGPIN, LOW);
    // Distance Calculation

    float distance = pulseIn(ECHOPIN, HIGH);
    distance= distance/58;
    return(distance);
    }

    P. S. pas mane lcd maunasi ant arduino, taigi nieko papildomai jungineti nereikia :)

  2. Skaicius keiciasi, bet labai jau keistai palyginus su tavo (pas tave kazkaip sklandziau viskas vyksta)
    O kai visiskai uzdengiu atstumo jutikli, man, kaip sakiau, rodo virs 7m. Gali pats isbandyti koda, paziureti (gal as kanors netaip darau)

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *