Sabtu, 03 Januari 2015

Arduino dan sensor ultrasonik


Link menuju  Halaman 2

Pada kesempatan sekarang marilah kita berlatih menguunakan sensor ultrasonik yang digabungkan dengan Mikokontroller Arduino. Alat yang dibutuhkan adalah sebuah mikrokontroller Arduino dan sensor ultrasonik ping parallax. Sensor ultrasonik mempunyai 3 kaki yang harus dihubungkan dengan tegangan 5 Volt, Ground dan kaki Signal yang harus dihubungkan dengan digital pin Arduino contohnya seperti gambar di bawah ini




***********************************************************************

/* Ping))) Sensor

   This sketch reads a PING))) ultrasonic rangefinder and returns the
   distance to the closest object in range. To do this, it sends a pulse
   to the sensor to initiate a reading, then listens for a pulse
   to return.  The length of the returning pulse is proportional to
   the distance of the object from the sensor.

   The circuit:
* +V connection of the PING))) attached to +5V
* GND connection of the PING))) attached to ground
* SIG connection of the PING))) attached to digital pin 7

   http://www.arduino.cc/en/Tutorial/Ping

   created 3 Nov 2008
   by David A. Mellis
   modified 30 Aug 2011
   by Tom Igoe

   This example code is in the public domain.

 */

// this constant won't change.  It's the pin number
// of the sensor's output:
const int pingPin = 7;

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
}

void loop()
{
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(100);
}

long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

************************************************************************

Wah program di atas panjang banget yaaaa.. kayaknya susah nih memahaminya.. eiiit tenang dulu Booos. coba perhatikan lebih seksama. Panjang programnya juga kebanyakan komentar saja. intinya adalah mengukur jarak kemudian ditampilkan ke monitor hasilnya berupa sentimenter dan inchi. itu saja kooo.....
jika program di atas sudah diupload ke arduino dan di jalankan maka alat akan mengukur jarak dan di tampilkan di serial monitor contoh tampilannya adalah seperti gambar dibawah ini..




Nah sekarang marilah kita berlatih ke tahap selanjutnya yaaa. siapkan alatnay yaitu :
  • Mikrokontroller Arduino UNO
  • Sensor Ultrasonik Ping Parallax
  • LCD 16x2 Karakter




-----------------------------------------------------------------------
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long  x;

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
pinMode(7,OUTPUT);
digitalWrite(7,LOW);
delayMicroseconds(2);
digitalWrite(7,HIGH);
delayMicroseconds(5);
digitalWrite(7,LOW);
pinMode(7,INPUT);
x=pulseIn(7,HIGH);
x=x/29/2;
lcd.clear();
  lcd.setCursor(0, 0); lcd.print(x);
  delay(400);
}

------------------------------------------------------------------------------


Jika program ini sudah diupload ke mikrokontroller dan dijalankan maka di layar lcd akan ada tampilan hasil pembacaan dari jarak yang terbaca oleh ultrasonik. hanya angka saja memang, angka tersebut satuannya centi meter. tidak keren tentunya.. coba perhatikan baris program di atas yang tulisannya berwarna  beda. gantilah tulisan tersebut dengan baris program dibawah ini


  lcd.clear();
  lcd.setCursor(0, 0); lcd.print("Hasil Pengukuran");
  lcd.setCursor(0, 1); lcd.print("Jarak :");lcd.print(x);
  lcd.setCursor(14, 1); lcd.print("Cm");

 
 coba rekan-rekan upload ke mikrokontroller dan perhatikanlah perbedaannya. lebih keren bukaaan.
Nah coba juga list Program di bawah ini

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long  x;
int xx = 7;
String baris1, baris2 ;

void setup() {
  lcd.begin(20, 4);
}
void loop() {
pinMode(xx,OUTPUT);
digitalWrite(xx,LOW);   delayMicroseconds(2);
digitalWrite(xx,HIGH);  delayMicroseconds(5);
digitalWrite(xx,LOW);   pinMode(xx,INPUT);
x=pulseIn(xx,HIGH);     x=x/29/2;
baris1= "Hasil Pengukuran";
baris2= "Jarak ="+String(x)+ " Cm";
lcd.clear();
  lcd.setCursor(0, 0); lcd.print(baris1);
  lcd.setCursor(0, 1); lcd.print(baris2);
  delay(400);
}

Coba perhatikan dimana perbedaannya..

Jika latihan di atas adalah latihan untuk membuat alat ukur jarak benda dari sensor, Nah sekarang mari kita coba menggunakan alat ini untuk mengukur ketinggian air water turn. perhatikan gambar di bawah ini :


Gambar diatas adalah sebuah wadah air dengan ketinggian 30 Centi meter. alat sensor ultrasonik rencananya ditempatkan pada ketinggian 40 centi meter. maka program alat perlu kita modifikasi sedikit supaya dapat digunakan untuk mengukur ketinggian air

-------------------------------------------------------------------

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long  x;
int y=40;
int z;
void setup() {
  lcd.begin(16, 2);
}

void loop() {
pinMode(7,OUTPUT);
digitalWrite(7,LOW);
delayMicroseconds(2);
digitalWrite(7,HIGH);
delayMicroseconds(5);
digitalWrite(7,LOW);
pinMode(7,INPUT);
x = pulseIn(7,HIGH);
x = x/29/2;
z = y-x;
lcd.clear();
  lcd.setCursor(0, 0); lcd.print("Hasil Pengukuran");
  lcd.setCursor(0, 1); lcd.print("Jarak :");lcd.print(z);
  lcd.setCursor(14, 1); lcd.print("Cm");

  delay(400);
}

-----------------------------------------------------------------------------
Alat yang kita buat sekarang sudah dapat digunakan untuk mengukur ketinggian air. jika ketinggian air yang diukur berbeda maka yang harus dirubah adala baris program " int y=40; " misalnya ketinggian wadah airnya adalah 1meter dan alat akan diletakan pada ketinggian 1,2 Meter. maka ganti nilai y yang tadinya diisi dengan nilai 40 dengan nilai 120.

tahap selanjutnya yaaa. siapkan alatny yaitu :
  • Mikrokontroller Arduino UNO
  • Sensor Ultrasonik Ping Parallax
  • LCD 16x2 Karakter






Bersambung ke bagian 2.......

Ini adalah percobaan Kang mas yadi menggunakan arduino mega 260 dengan Sensor ping parllax. Kunjungi Juga Yaaaaa.....   Link Ke percobaan Lanjutan

10 komentar:

  1. Mas kalo biar hitung volume kubus gimaña codingan nya kalo di atas kanvas cuma tinggi air ya ?

    BalasHapus
    Balasan
    1. volume kubus = panjang x lebar x tinggi...... Jika bak panjangnya 1m lebar 1m dan tinggi 1 m maka volume nya adalah 1 mkubik atau 1000 liter (1dm kubik =1 liter) jadi jika sensor membaca ketinggian adalah 500 cm maka harus di kalkulasikan menjadi volume dahulu. baru ddi tampilkan di lcd.... bersambung....

      Hapus
    2. maap d atas seharusnya 50 cm. di kalkulasikan dengan panjang dan lebar 100 cm maka 50x100x100 = 500.000 cmkubik di jadikan dmkubik menjadi 500 dmkubik atau 500 liter

      Hapus
    3. perhatikan program terakhir.
      x = pulseIn(7,HIGH);
      x = x/29/2;
      z = y-x;
      x adalah jarak sebenarnya yanng terbaca sensor misal kita asumsikan tingi air adalah 50 cm sensor di tempatkan 120 cm dari dasaar bak maka sensor akan membaca nilai 70 cm (x= 70 cm. z=ketinggian sensor - sensor terbaca maka nilainya adalah 120-70 = 50 cm billa programnya di rmodifikasi menjadi
      x = pulseIn(7,HIGH);
      x = x/29/2;
      z = y-x;
      z = (z*100*100)/1000;
      maka nilai z adalah bukan ketinggian air lagi tetapi berupa volume dm3 atau liter. karena alatnya sudah di bongkar memang belum di coba . coba saja di bahas dengan teman di kampus. seiring banyak berlath pasti akan semakin mahir . terima kasih atas kunjungannya. semangaaaat

      Hapus
  2. mas, saya mencoba menjalankan program yang berbahasa inggris tentang sensor jarak diatas, saya running bisa akan tetapi pada saat tidak terhalang objek mengapa jarak maks nya +-215cm ? padahal di datasheet range nya 2cm-500cm... apakah karena dibagi dua dari 500 sehingga ketemu +- 215cm an itu?

    BalasHapus
    Balasan
    1. sensor jarak yan di gunakan dalam latihan ini adalah ping parallax , jika tidak ada objek maka akan menu jukan nilai maksimum, yang pernah di coba adlah 3 meter.

      Hapus
  3. serta apabila memang dibagi dua sehingga ketemu +-215cm itu, apakah berarti jarak maks yang didatasheet yakni 500cm itu yang dimaksud jarak travels out and back? mohon tanggapannya. Terimakasih

    BalasHapus
    Balasan
    1. jika memang jarak maks di datasheet 500 cm. maka seharusnya nilainya 500 untuk jarak maksimumnya. coba cari contoh proram lain di googgle. mungkin ada perbedaan dala memprogramnya. karena program di atas untuk sensor yg jarak maks nya 300 cm

      Hapus
  4. mas kalo sensor ultrasonik dipake buat ngontrol level air pada bak tandon untuk mengaktifkan pompa kira kira efisien ga ya mas?
    atau saya boleh minta no wa nya buat tanya tanya hehe

    BalasHapus
  5. Bagus... Terima kasih....!

    BalasHapus