Thursday, July 28, 2016

Menampilkan angka di seven segment (seven segment) dengan arduino uno

Menampilkan angka di seven segment (seven segment) dengan arduino uno

7  Segment  merupakan  rangkaian  LED  yang  dikonfigurasikan  membentuk  7 segment/bagian  (+1  untuk  dot/titik).  7  segment  dapat digunakan  sebagai  opsi  untuk display selain menggunakan LCD 16x2, namun untuk menampilkan karakter yang lebih  terbatas tentunya. Gambar 7-1 merupakan tampilan 7 segment dalam berbagai ukuran  dan warna.
seven segment
seven segment

Sebelum belajar tentang cara memprogram 7 segment, mari kita memahami siapa  sih 7 segment itu? Eh, apa sih 7 segment itu? Hehehehe..
LED Common Anoda dan LED common Cathoda
LED Common Anoda dan LED common Cathoda


Jika kita lihat pada gambar di atas, terdapat 7 buah led (D1-D7) yang bagian katodanya terhubung menjadi 1, dan 7 buah led (D8-D14) lainnya bagian anodanya-lah yang terhubung menjadi 1. Rangkaian Led D1-D7 disebut commond katoda, dan rangkaian led D8-D14 disebut common anoda. Apa hubungannya dengan 7 segment?

Di dalam seven segment ternyata komponen utaman nya adalah LED, hanya saja dengan bentuk yang mungkin tidak sama dengan yang anda bayangkan,namun secara skematik, yang ada di dalam sebuah seven segment adalah LED yang di rangkai baik secara common anoda atau common cathode,silakan perhatikan gambar berikut :
Skematik seven segment common anoda
Skematik seven segment common anoda



Perhatikan gambar di bawah ini,ini adalah contoh mengakses 7 segment untuk menampilkan angka 1, sebagai catatatan jika anda perhatikan 7 segment yang ada, configutasinya adalah  common cathoda
7 segment membentuk angka 1


logika untuk menanpilkan angka pada seven segment common katoda  di tabel kan sebagai berikut:
logika untuk menanpilkan angka pada seven segment common katoda
Logika untuk menanpilkan angka pada seven segment common katoda





lalu bagaimana untuk menyalakan 2 buah seven segment yang semisal di paralel (dengan driver tentunya) driver pengontrolan led common katoda nya,semisal pin common katoda di berikan logika low otomatis seven segment yang bersesuaian dengan pin common catoda  akan menyala, namun ketika sebaliknya common katoda di berikan logika high maka seven segment yang bersesuaian dengan common catoda akan padam,

berikut gambarannya
akses seven segment paralel
akses seven segment paralel

Pada intinya, untuk menyalakan led pada 7 segment, pin CK (common katoda) harus berlogika low. Misalkan ingin menampilkan angka 20, maka prosesnya adalah: 

1. Membuat logika 1011011 pada pin A-G, 0 pada pin CKkiri dan 1 pada pin CKkanan
Ini membuat 7 segment bagian kiri akan menampilkan angka 2, sedangkan 7segment bagian kanan akan mati 


2. Membuat logika 0111111 pada pin A-G, 1 pada pin CKkiri dan 0 pada pin CKkanan
 Ini membuat 7 segment bagian kanan akan menampilkan angka 0, sedangkan 7segment bagian kiri akan mati 

3. Lakukan looping langkah1 dan langkah 2 secara terus menerus. Jadi sebenarnya, angka pada 7segmentkiri dan 7segmentkanan dinyalakan secara bergantian. Hanya saja, karena proses loopingnya cepat, mata kita melihatnya sebagai sebuah tampilan yang menyala secara bersamaan. 

7segment pin A, B, ..., G, dan Dot terhubung pada Arduino Uno pin 6-13
Pin aktifasi common anoda untuk segment kiri, kanan berturut-turut terhubung pada pin 5 dan 4. 
Karena aktifasi pin common anoda menggunakan transistor, maka agar pin common anoda berlogika low, pin 5 atau 4 harus berlogika high , perhatikan gambar






Source code Menampilkan angka di seven segment (seven segment) dengan arduino uno

const int segA = 6;
const int segB = 7;
const int segC = 8;
const int segD = 9;
const int segE = 10;
const int segF = 11;
const int segG = 12;
const int segDot = 13;

const int aktifSegmentKiri = 5;
const int aktifSegmentKanan = 4;

int segmentKiri = 0;
int segmentKanan = 0;
int konter;

void setup(){
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
 
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
 
  pinMode(pButton1, INPUT_PULLUP);
  pinMode(pButton2, INPUT_PULLUP);  
  pinMode(pButton3, INPUT_PULLUP);  

}

void loop(){

 konter= konter+1;
 if (konter>99){
 konter = 99;

 if (konter < 10){
  segmentKiri = 0;
  segmentKanan = konter;
 } else
 {
  segmentKiri = konter/10;
  segmentKanan = konter%10;
 }

 bacaAngka(segmentKiri);
 digitalWrite(aktifSegmentKiri,HIGH);
 digitalWrite(aktifSegmentKanan,LOW); 
 delay(5);
 bacaAngka(segmentKanan);
 digitalWrite(aktifSegmentKiri,LOW);
 digitalWrite(aktifSegmentKanan,HIGH);
 delay(5);

}
}


void bacaAngka(int angkaSegment){
  switch (angkaSegment){
  case 0:  angka0(); break;
  case 1:  angka1(); break;
  case 2:  angka2(); break;
  case 3:  angka3(); break;
  case 4:  angka4(); break;
  case 5:  angka5(); break;
  case 6:  angka6(); break;
  case 7:  angka7(); break;
  case 8:  angka8(); break;
  case 9:  angka9(); break;
  } 
}


void angka0()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka1()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka2()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka3()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka4()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka5()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka6()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka7()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka8()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka9()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}


jika anda upload sketch di atas ke arduino dengan tampilan seven segment sebagaimana gambar yang ada pada penjelasan di atas, maka seven segment akan menampilkan angka 0-99 lalu kembali ke 0 dan naik 1 per 1 sampai angka 99

sedikit penjelasan

void bacaAngka(int angkaSegment){
  switch (angkaSegment){
  case 0:  angka0(); break;
  case 1:  angka1(); break;
  case 2:  angka2(); break;
  case 3:  angka3(); break;
  case 4:  angka4(); break;
  case 5:  angka5(); break;
  case 6:  angka6(); break;
  case 7:  angka7(); break;
  case 8:  angka8(); break;
  case 9:  angka9(); break;
  } 
}

merupakan fungsi untuk memanggil subprogram angka0() sampai dengan angka9(). Misalkan pada program utama kita tulis: bacaAngka(1);, maka subrutin angka1() akan dieksekusi


kemudian bagian 


void angka0()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka1()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka2()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka3()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka4()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka5()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka6()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka7()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka8()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka9()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

merupakan program untuk mengkonfigurasikan pin a-g agar dapat menampilkan angka 0 sampai dengan 9, cek tabel yang ada di tengah postingan ini, jika bingung cek tabel di bawah ini (saya tampilkan kembali)




nah ini program utama sebenar nya 



 konter= konter+1;
 if (konter>99){
 konter = 99;

 if (konter < 10){
  segmentKiri = 0;
  segmentKanan = konter;
 } else
 {
  segmentKiri = konter/10;
  segmentKanan = konter%10;
 }

 Penjelasan:
7segment pada Ardu Mini Lab bagian kiri akan menampilkan nilai puluhan, dan bagian kanan menampilkan nilai satuan. Misalkan nilai konter = 23, maka 7segmentkiri akan menampilkan angka 2, dan 7segmentkanan akan menampilkan angka 3.
Nilai puluhan akan disimpan pada variabel segmentKiri, dan nilai satuan akan disimpan pada variabel segmentKanan.
Apabila nilai konter <10, maka 7segmentkiri akan selalu menampilkan angka 0 dan 7segmentkanan akan menampilkan nilai konter (code 7-1.5a). Sehingga variabel segmentKiri diberi nilai nol, dan segmentKanan diberi nilai sama dengan nilai konter.
Apabila nilai konter >= 10, maka nilai konter /10 untuk mendapatkan nilai puluhan (disimpan pada variabel segmentKiri) dan nilai konter %10 untuk mendapatkan nilai satuan (disimpan pada variabel segmentKanan ) (code 7-1.5b).
Misalkan konter bernilai 54. “konter/10;” akan menghasilkan nilai segmentKiri = 5, dan “konter%10;” akan menghasilkan nilai segmentKanan=4. “%” merupakan modulus, digunakan untuk menghitung sisa pembagian. Misal 10%4 = 2, 3%2=1, dll.


untuk bagian ini

bacaAngka(segmentKiri);
 digitalWrite(aktifSegmentKiri,HIGH);
 digitalWrite(aktifSegmentKanan,LOW); 
 delay(5);
 bacaAngka(segmentKanan);
 digitalWrite(aktifSegmentKiri,LOW);
 digitalWrite(aktifSegmentKanan,HIGH);
 delay(5);

Penjelasan:
Sesuai penjelasan sebelumnya, apabila konter = 54, maka segmentKiri bernilai 5 dan segmentKanan bernilai 4.
Untuk menampilkan angka 5 pada 7segmentKiri, terdapat 2 step, yaitu memanggil sub rutin bacaAngka(segmentKiri); untuk mengkonfigurasikan kondisi pin a-g, lalu membuat pin 5 (aktifSegmentKiri) berlogika High sedangkan pin 4 (aktifSegmentKanan) berlogika Low. Code 7-1.6a akan menampilkan angka 5 pada 7segmentkiri.
Untuk menampilkan angka 4 pada 7segmentkanan, terdapat 2 step, yaitu memanggil sub rutin bacaAngka(segmentKanan); untuk mengkonfigurasikan kondisi pin a-g, lalu membuat pin 4 (aktifSegmentKiri) berlogika High sedangkan pin 5 (aktifSegmentKanan) berlogika Low. Code 7-1.6a akan menampilkan angka 4 pada 7segmentkiri



Penjelasan:silakan di implementasi dikembangkan semisal untuk menampilkan data sensor suhu, pembacaan sensor suhu ada di halaman lain web site ini (cek postingan sebelumnya)

 

Membaca Jarak Sensor Ultrasonic ditampilkan ke LCD 16X2 dengan Arduino uno

Membaca Jarak Sensor Ultrasonic ditampilkan ke LCD dengan Arduino

•  Prinsip  kerja sensor ultrasonik
Sensor  Ultrasonik  dapat  berfungsi  sebagai  pemancar  maupun  penerima  gelombang ultrasonik. Sensor yang ada di pasaran berbentuk silinder dengan warna silver.


 Satu  paket  sensor  ultrasonik  terdiri  dari  2  sensor. Dikemas  dalam  satu  board.  Satu sensor sebagai pemancar dan satu sensor lagi sebagai penerima.


Sensor Ultrasonik SRF04.
Ada beberapa macam sensor ultrasonik.ping sensor,srf04 srf 08,srf 05 dan sebagainya  Tipe SRF04 salah satunya, yang akan kita pakai pada aplikasi ini. Kemampuan (range) ukur jarak antara 3 cm sd 400 cm. lebih dari cukup untuk mengukur tinggi orang tertinggi didunia sekalipun pada tahun tahun ini. mungkin berbeda jika sensor ini mau dipakai mengukur ketinggian kaum Ad.




Mari kita perhatikan. Ada 4 pin/kaki pada sensor SRF04.
Berikut keterangannya :
-  Pin  Trig (Triger) >>  sebagai  pin/kaki  untuk  memicu  (mentrigger)  pemancaran ngelombang  ultrasonik.  Cukup  dengan  membuat  logika  “HIGH  –  LOW”  maka  sensor akan memancarkan gelombang ultrasonik.
-  Pin   Echo >> sebagai  pin/kaki  untuk  mendeteksi  ultrasonik,  apakah  sudah  diterima atau  belum.  Selama  gelombang  ultrasonik  belum  diterima,  maka  logika  pin  ECHO
akan  “LOW”.  Setelah  gelombang  ultrasonik  diterima  maka  pin  ECHO  berlogika “HIGH”.
-  Pin  Vcc >> sebagai  pin  koneksi  ke  power  supply  +  5  Vdc.  Dapat juga  dihubungkan langsung ke pin Vcc mikrokontroler.
-  Pin  Gnd (Ground) >>  adalah  pin  koneksi  ke  power  supply  Ground.  Dapat  juga dihubungkan ke pin Gnd mikrokontroler.

Prinsip  dasar  dari  sensor  ultrasonik  SRF04  dapat  kita  jelaskan  dengan  mulai  memperhatikan gambar berikut :



Timing  diagram (diagram  waktu)  merupakan  gambaran  sinyal  (HIGH  &  LOW)  yang terjadi pada masing – masing pin (Trig & Echo) berdasarkan waktu.
Gambarnya kita potong satu persatu ya.. Kita mulai  dari bagian atas. Bagian sinyal pin Trig.

 
Pin Trig berfungsi sebagai pemicu (trigger). Pin ini harus diberi sinyal “HIGH” kemudian  “LOW”. Siapa yang memberinya ? Ya tentu saja mikrokontroler.  Berapa lama ? Seperti  pada gambar yaitu minimal 10 µs (micro seconds).
Begitu  mendapat  trigger,  sensor  ultrasonik  (bagian  pemancar)  akan  memancarkan  gelombang  ultrasonik  sebanyak  8  siklus  dengan  frekuensi  40  Khz.  Gelombang ultrasonik akan terus merambat, bergerak dengan kecepatan 344 m/s.

Nah,  selama  gelombang  ultrasonik  masih  merambat  (belum  mengenai penghalang/dinding), logika pin Echo adalah “HIGH”.


 Begitu ultrasonik mengenai penghalang/dinding, sebagian gelombang akan diteruskan ke media yang ditabrak, sebagian lagi memantul dan kembali menuju arah sensor. Pada saat  ultrasonik  diterima  kembali  oleh  sensor,  maka  otomatis  pin  ECHO  akan  berubah  logikanya menjadi “LOW”.


Gimana, sudah mulai ada gambaran ? OK,  next  ! Lebar  pulsa atau “lamanya” pin ECHO berlogika “HIGH” = waktu tempuh ultrasonik.


Paham ? Baik, kita perjelas :
-  Ketika gel.ultrasonik memancar (pergi) maka logika pin Echo = 1.
-  Selama gel.ultrasonik masih merambat (belum kembali) logika pin Echo = 1.
-  Setelah gel.ultrasonik memantul dan kembali trus terdeteksi oleh sensor penerima, maka pin ECHO = 0.
Jelas ?
Selesai...
Selanjutnya  tinggal  kita  panggil  guru  matematika  kita  dulu  waktu  SMP  untuk  ngajari cara  ngitungnya.  Yups  betul,  jarak  tempuhnya  yang  akan  dihitung  sehingga  kita  tahu berapa jarak antara sensor ultrasonik dengan dinding yang diukur.
Nih resepnya :
Kecepatan (cepat rambat) gelombang ultrasonik di udara = 344 m/s (meter per-detik).
Artinya untuk menempuh jarak 344 m dibutuhkan waktu1 detik.
Atau untuk menempuh jarak 1 m butuh waktu 1/344 s atau 0,0029 s.
Jika  menempuh  jarak  1  cm  (  1  cm  =  0,01  m)  maka  butuh  waktu  0,01  x  0,0029  s  = 0,000029 s (29 µs).

Nah  karena  gelombang  ultrasonik  melakukan  perjalanan  pergi  –  pulang  (pancar  – terima)  sehingga  waktu  yang  dibutuhkan  menjadi  2x.  Hal  ini  berpengaruh  pada perhitungan  jaraknya.  Waktu  tempuh  menjadi  2x,  sehingga  untuk  menempuh  jarak  1 cm diperlukan waktu 29 µs x 2 = 58 µs.

Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm  Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm  Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm  Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm dibutuhkan waktu 58 µs. Dengan kata lain, dibutuhkan waktu 58 µs. Dengan kata lain,    untuk menghitung jarak  tempuh = waktu tempuh/58 (cm). tempuh = waktu tempuh/58 (dalam satuan cm).

Rangkaian Membaca Jarak Sensor Ultrasonic ditampilkan ke LCD 16X2 dengan Arduino

Jarak Sensor Ultrasonic ditampilkan ke LCD 16X2 Arduino
Jarak Sensor Ultrasonic ditampilkan ke LCD 16X2 dengan Arduino

Sketch Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dan LCD dengan Arduino


/*

    * VVC  +5V
    * GND  ground
    * TRIG digital pin 12
     * ECHO digital pin 11
*/

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4,5, 6, 7);
const int TRIG_PIN = 12;// pin triger sensor ultrasonic di koneksikan ke pin 12 pada arduino
const int ECHO_PIN = 11;// pin echo sensor ultrasonic di koneksikan ke pin 11 pada arduino

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

  pinMode(TRIG_PIN,OUTPUT);
  pinMode(ECHO_PIN,INPUT);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Arduino VS Sensor");
  lcd.setCursor(0, 1);
  lcd.print("Ultrasonic ");
delay(3000);

}

void loop()
{
   long duration, distanceCm;

  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
 
  duration = pulseIn(ECHO_PIN,HIGH);

  // convert the time into a distance
  // 340 m/s--> dalam satu detik jarak tempuh adalah 340 meter,
  //1/10 detik untuk 34 meter,
  //1/100 detik (10 /1000 detik (baca 10 mili detik))untuk 3,4 meter
  // 1/1000 detik baca 1 mili detik untuk jarak 0,34 meter (34cm)
 
 // jadi untuk menempuh jarak 1 cm --> (1/100 meter) diperlukan waktu sebanyak :
  //29.1 ųs/cm
  distanceCm = duration / 29.41 / 2 ;

  if (distanceCm <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distanceCm);
    Serial.println("CM");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Jarak");
  lcd.setCursor(0, 1);
  lcd.print(distanceCm);
  lcd.print(" Cm ");
 
  }
  delay(1000);
}

Catatan upload sketch ke arduino  maka data jarak hasil pembacaan sensor ultrasonic akan ditampilkan LCD yang terpasang di arduino uno, jika anda buka serial monitor pada software arduino, jarak juga akan ditampilkan ke serial monitor karenan ada nya sketch :


Serial.print(distanceCm);
Serial.println("CM");

Selamat Belajar

NB : jika LCD blank,silakan atur contrast LCD dengan memutar trimport (varibale resistor) untuk mendapatkan display yang bagus.

Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dengan Arduino

Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dengan Arduino

•  Prinsip  kerja sensor ultrasonik
Sensor  Ultrasonik  dapat  berfungsi  sebagai  pemancar  maupun  penerima  gelombang ultrasonik. Sensor yang ada di pasaran berbentuk silinder dengan warna silver.


 Satu  paket  sensor  ultrasonik  terdiri  dari  2  sensor. Dikemas  dalam  satu  board.  Satu sensor sebagai pemancar dan satu sensor lagi sebagai penerima.


Sensor Ultrasonik SRF04.
Ada beberapa macam sensor ultrasonik.ping sensor,srf04 srf 08,srf 05 dan sebagainya  Tipe SRF04 salah satunya, yang akan kita pakai pada aplikasi ini. Kemampuan (range) ukur jarak antara 3 cm sd 400 cm. lebih dari cukup untuk mengukur tinggi orang tertinggi didunia sekalipun pada tahun tahun ini. mungkin berbeda jika sensor ini mau dipakai mengukur ketinggian kaum Ad.



Mari kita perhatikan. Ada 4 pin/kaki pada sensor SRF04.
Berikut keterangannya :
-  Pin  Trig (Triger) >>  sebagai  pin/kaki  untuk  memicu  (mentrigger)  pemancaran ngelombang  ultrasonik.  Cukup  dengan  membuat  logika  “HIGH  –  LOW”  maka  sensor akan memancarkan gelombang ultrasonik.
-  Pin   Echo >> sebagai  pin/kaki  untuk  mendeteksi  ultrasonik,  apakah  sudah  diterima atau  belum.  Selama  gelombang  ultrasonik  belum  diterima,  maka  logika  pin  ECHO
akan  “LOW”.  Setelah  gelombang  ultrasonik  diterima  maka  pin  ECHO  berlogika “HIGH”.
-  Pin  Vcc >> sebagai  pin  koneksi  ke  power  supply  +  5  Vdc.  Dapat juga  dihubungkan langsung ke pin Vcc mikrokontroler.
-  Pin  Gnd (Ground) >>  adalah  pin  koneksi  ke  power  supply  Ground.  Dapat  juga dihubungkan ke pin Gnd mikrokontroler.

Prinsip  dasar  dari  sensor  ultrasonik  SRF04  dapat  kita  jelaskan  dengan  mulai  memperhatikan gambar berikut :



Timing  diagram (diagram  waktu)  merupakan  gambaran  sinyal  (HIGH  &  LOW)  yang terjadi pada masing – masing pin (Trig & Echo) berdasarkan waktu.
Gambarnya kita potong satu persatu ya.. Kita mulai  dari bagian atas. Bagian sinyal pin Trig.

 
Pin Trig berfungsi sebagai pemicu (trigger). Pin ini harus diberi sinyal “HIGH” kemudian  “LOW”. Siapa yang memberinya ? Ya tentu saja mikrokontroler.  Berapa lama ? Seperti  pada gambar yaitu minimal 10 µs (micro seconds).
Begitu  mendapat  trigger,  sensor  ultrasonik  (bagian  pemancar)  akan  memancarkan  gelombang  ultrasonik  sebanyak  8  siklus  dengan  frekuensi  40  Khz.  Gelombang ultrasonik akan terus merambat, bergerak dengan kecepatan 344 m/s.

Nah,  selama  gelombang  ultrasonik  masih  merambat  (belum  mengenai penghalang/dinding), logika pin Echo adalah “HIGH”.


 Begitu ultrasonik mengenai penghalang/dinding, sebagian gelombang akan diteruskan ke media yang ditabrak, sebagian lagi memantul dan kembali menuju arah sensor. Pada saat  ultrasonik  diterima  kembali  oleh  sensor,  maka  otomatis  pin  ECHO  akan  berubah  logikanya menjadi “LOW”.


Gimana, sudah mulai ada gambaran ? OK,  next  ! Lebar  pulsa atau “lamanya” pin ECHO berlogika “HIGH” = waktu tempuh ultrasonik.


Paham ? Baik, kita perjelas :
-  Ketika gel.ultrasonik memancar (pergi) maka logika pin Echo = 1.
-  Selama gel.ultrasonik masih merambat (belum kembali) logika pin Echo = 1.
-  Setelah gel.ultrasonik memantul dan kembali trus terdeteksi oleh sensor penerima, maka pin ECHO = 0.
Jelas ?
Selesai...
Selanjutnya  tinggal  kita  panggil  guru  matematika  kita  dulu  waktu  SMP  untuk  ngajari cara  ngitungnya.  Yups  betul,  jarak  tempuhnya  yang  akan  dihitung  sehingga  kita  tahu berapa jarak antara sensor ultrasonik dengan dinding yang diukur.
Nih resepnya :
Kecepatan (cepat rambat) gelombang ultrasonik di udara = 344 m/s (meter per-detik).
Artinya untuk menempuh jarak 344 m dibutuhkan waktu1 detik.
Atau untuk menempuh jarak 1 m butuh waktu 1/344 s atau 0,0029 s.
Jika  menempuh  jarak  1  cm  (  1  cm  =  0,01  m)  maka  butuh  waktu  0,01  x  0,0029  s  = 0,000029 s (29 µs).

Nah  karena  gelombang  ultrasonik  melakukan  perjalanan  pergi  –  pulang  (pancar  – terima)  sehingga  waktu  yang  dibutuhkan  menjadi  2x.  Hal  ini  berpengaruh  pada perhitungan  jaraknya.  Waktu  tempuh  menjadi  2x,  sehingga  untuk  menempuh  jarak  1 cm diperlukan waktu 29 µs x 2 = 58 µs.

Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm  Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm  Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm  Ingat  ya,  ini  kesimpulannya  !  untuk  menempuh  jarak  1  cm dibutuhkan waktu 58 µs. Dengan kata lain, dibutuhkan waktu 58 µs. Dengan kata lain,    untuk menghitung jarak  tempuh = waktu tempuh/58 (cm). tempuh = waktu tempuh/58 (dalam satuan cm).


Rangkaian Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dengan Arduino
Rangkaian Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dengan Arduino
Rangkaian Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dengan Arduino

Sketch Membaca Jarak Sensor Ultrasonic ditampilkan ke Serial Monitor dengan Arduino
/*

    * VVC  +5V
    * GND  ground
    * TRIG digital pin 12
     * ECHO digital pin 11
*/

const int TRIG_PIN = 12;// pin triger sensor ultrasonic di koneksikan ke pin 12 pada arduino
const int ECHO_PIN = 11;// pin echo sensor ultrasonic di koneksikan ke pin 11 pada arduino

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

  pinMode(TRIG_PIN,OUTPUT);
  pinMode(ECHO_PIN,INPUT);
  //
}

void loop()
{
   long duration, distanceCm;

  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
 
  duration = pulseIn(ECHO_PIN,HIGH);

  // convert the time into a distance
  // 340 m/s--> dalam satu detik jarak tempuh adalah 340 meter,
  //1/10 detik untuk 34 meter,
  //1/100 detik (10 /1000 detik (baca 10 mili detik))untuk 3,4 meter
  // 1/1000 detik baca 1 mili detik untuk jarak 0,34 meter (34cm)
 
 // jadi untuk menempuh jarak 1 cm --> (1/100 meter) diperlukan waktu sebanyak :
  //29.1 ųs/cm
  distanceCm = duration / 29.41 / 2 ;

  if (distanceCm <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distanceCm);
    Serial.println("CM");
 
  }
  delay(1000);
}

Catatan upload sketch ke arduino  lalu buka serial monitor dengan baudrate 9600, maka data jarak hasil pembacaan sensor ultrasonic akan ditampilkan ke serial monitor dalam format jarak di ikuti karakter CM dan di akhiri karakter enter.










Wednesday, July 27, 2016

Menampilkan data Sensor Suhu LM 35 ke LCD 16x2 dengan Arduino UNO

Untuk membuat aplikasi akhir berupa penampil data 1 channel sensor suhu LCD diperlukan pemahaman terlebih dahulu mengenai cara kerja sensor suhu LM 35

Gambar sensor suhu LM 35  tampak samping adalah sebagai berikut


Gambar sensor suhu LM 35  tampak bawah adalah sebagai berikut

sebenarnya ada varian bentuk lain dari LM 35 ini, tapi tidak saya bahas karena yang saya punya adalah yang bentuk nya sebagaimana gambar sensor LM 35 tersebut di atas.

Berdasarkan datasheet sensor suhu LM 35 terdapat penjelasan sebagai berikut

•    Calibrated directly in Celsius (Centigrade)
•    Linear + 10.0 mV/ C scale factor
•    0.5 C accuracy guaranteeable (at +25 C)
•    Rated for full -55 to +150 C range
•    Suitable for remote applications
•    Low cost due to wafer-level trimming
•    Operates from 4 to 30 volts
•    Less than 60 A current drain
•    Low self-heating, 0.08 C in still air
•    Nonlinearity only 1/4 C typical
•    Low impedance output, 0.1 W for 1 mA load


Point  yang digunakan untuk memahamin karakteristik cara kerja sensor LM 35 nya ada di bagian
Linear + 10.0 mV/ C scale factor
Ini menunjukkan bahwa sensor suhu LM35 menghasilkan output berupa tegangan yang nilai nya linear terhadap suhu dengan penjelasan sebagai berikut :
Setiap kenaikan suhu sebesar 1 derajat celcius , akan menghasilkan keluaran sebesar 10mVolt
Jadi jika sensor suhu membaca suhu sebesar 10 derajat celcius, keluaran dari pin sensor tersebut adalah sebesar
10*10 mv >>> 100mV >>>0,1volt
Jika sensor suhu membaca suhu sebesar 100 derajat celcius, keluaran dari pin sensor tersebut adalah sebesar
100*10 mv >>>1000mV >>>1volt
Berdasar penjelasan tersebut kita dapat ambil kesimpulan
Jika tegangan keluaran sensor adalah 1 volt >>> suhu adalah sebesar 100 derajat celcius
Kesimpulan >>> suhu = tegangan output sensor * 100
Arduino uno memiliki pin pin sebagai masukkan untuk membaca tegangan keluaran dari sensor LM35 terserbut, pin nya adalah pin analog to digital converter
Silakan  perhatikan gambar di bawah ini


Pin yang di maksud adalah pin A0,A1,A2,A3,A4,A5
Dimana berdasarkan penjelasan dari web resmi arduino (www.arduino.co.cc )
Dijelaskan bahwa kemampuan baca dari pin analag ini adalah 0-5 volt dengan resolusi 10 bit
Ini penjelelasannya begini
Saat tegangan input ke pin adc misal Adc0 (pin A0) adalah sebesar 5 volt Dc, maka hasil pembacaan konversi nilai adc nya adalah sebagai berikut
tengangan 5 volt adalah tegangan maksimal yang dapat dibaca arduino sehinnga nilai tersebut akan di ubah menjadi nilai 10 adalah sebesar 1111 1111 11 (biner), jika di ubah menjadi decimal nilainya = 1023

tengangan 0 volt adalah tegangan minimal yang dapat dibaca arduino sehinnga nilai tersebut akan di ubah menjadi nilai 10 adalah sebesar 0000 0000 00 (biner), jika di ubah menjadi decimal nilainya = 0

5 volt >>> 1111 1111 11 >>> 1023
0 volt >>> 0000 0000 00 >>> 0
(pergunakan kalkulator anda,pada mode scientific, mudah bukan ? hahaha)

Keismpulannya eh kesimpulannya untuk  membaca tergangan masukkan ADC dapat dihitung dengan persamaan :
Tegangan = nilai adc/ nilai adc maksimal * 5 volt
Dengan penulisan lain menjadi
Tegangan = nilai adc/ 1023 * 5 volt
Dari penjelasan sebelum nya anda dapati bahwa untuk mengubah tegangan menjadi nilai celcius adalah dengan persamaan sebagai berikut :
suhu = tegangan output sensor * 100
sedangkan nilai tegangan diperoleh dengan persamaan
Tegangan = nilai adc/ 1023 * 5 volt
Jadi
Suhu = tegangan output sensor * 100
Suhu = (nilai adc/ 1023 * 5 volt)*100
Suhu = nilai adc*5/10.23

Untuk menuju ke implementasinya silakan rangkai sensor LM35 + kabel + arduino + LCD 16X2
Menjadi seperti gambar di bawah ini





Setelah selesai dirangkai
Upload kan sketch program arduino sebagai berikut :

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
const int PinSuhu = A0;  // pemasangan output pin sensor LM35 ke pin A0
int AdcSuhu = 0;// nilai adc awal sensor sebelum proses pembacaan suhu 1 di set 0
int Suhu=0;// nilai suhu  awal sebelum proses pembacaan sensor suhu 1 di set 0

void setup()
{
  lcd.begin(16,2);
  lcd.print("SUHU = ");

}

void loop()
{
 AdcSuhu = analogRead(PinSuhu);  // baca adc pin suhu  
 Suhu=(AdcSuhu*5)/10.23; // perhitungkan nilai suhu (cek lagi rumus hitung suhu )
 lcd.setCursor(0, 1);
 lcd.print(Suhu);
 delay(1000); // tunda 1 detik
}


Seharusnya pada LCD anda suhu nampil pada baris pertama berisi teks SUHU = dan pada baris kedua tertulis Suhu hasil pembacaan oleh sensor LM35

catatan : jangan lupa atur contrast LCD dengan memutar mutar trimport,sehingga tampilan LCD 16x 2 enak untuk dipandang.


Antarmuka /interface/akses LCD 16x2 / LCD 16*2 dengan Board Arduino INO

Sering kita melihat sebuah system yang dilengkapi dengan LCD, biasanya sih alat alat berbasis mikrokontroler banyak dilengkapi dengan display LCD 16x2 (2 baris 16 kolom) , walaupun ada LCD dengan ukuran 20*4 (4 baris 20 kolom) dan bahkan 8*2 ((2 baris 8  kolom)) LCD (Liquid Crystal Display) adalah suatu jenis media tampilan yang menggunakan kristal cair sebagai p enampil utama. LCD sudah digunakan di berbagai bidang, misalnya dalam alat-alat elektronik, seperti televisi, kalkulator ataupun layar monitor pada komputer.
LCD 16x2
LCD 16x2


Pada Percobaan kali ini adalah dengan menggunakan LCD 16x2 yang artinya LCD tersebut terdiri dari 16 kolom dan 2 baris karakter (tulisan). yang perlu di persiapkan adalah sebagai berikut
•    LCD 16x2
•    Arduino UNO
•    Kabel dan Konektor
•    Trimport alias variable resistor dengan ukuran 20 kilo ohm

Kaki kaki alias pin adalah LCD memiliki konfigurasi sebagai berikut:
Berikut adalah pin dari LCD 16 X 2
No Kaki/Pin    Nama    Keterangan
1    VCC    +5V
2    GND    0V
3    VEE    Tegangan Kontras LCD (dihubungkan dengan keluaran teganganVariable dari variable resistor)
4    RS    Register Select
5    R/W    1 = Read, 0 = Write
6    E    Enable Clock LCD
7    D0    Data Bus 0
8    D1    Data Bus 1
9    D2    Data Bus 2
10    D3    Data Bus 3
11    D4    Data Bus 4
12    D5    Data Bus 5
13    D6    Data Bus 6
14    D7    Data Bus 7
15    Anoda    Tegangan backlight positif
16    Katoda    tegangan backlight Negatif

Pin LCD nomor 4 (RS) merupakan Register Selector yang berfungsi untuk memilih Register Kontrol atau Register Data.
Register kontrol digunakan untuk mengkonfigurasi LCD.
Register Data digunakan untuk menulis data karakter ke memori display LCD.
Pin LCD nomor 5 (R/W) digunakan untuk memilih aliran data apakah READ ataukah WRITE. Karena kebanyakan fungsi hanya menulis data saja ke LCD, maka kaki ini dihubungkan ke GND (WRITE).
Pin LCD nomor 6 (ENABLE) digunakan untuk mengaktifkan LCD pada proses penulisan data ke Register Kontrol dan Register Data LCD.


Menyambungkan LCD dengan Board Arduino

Interface LCD 16x2 ke arduino UNO
Interface LCD 16x2 ke arduino UNO

•    Pin RS (kaki 4) disambungkan dengan pin arduino digital pin 2
•    Pin E (kaki 6) disambungkan dengan pin arduino digital pin 3
•    Pin D4 (kaki 11) disambungkan dengan pin arduino digital pin 4
•    Pin D5 (kaki 12) disambungkan dengan pin arduino digital pin 5
•    Pin D6 (kaki 13) disambungkan dengan pin arduino digital pin 6
•    Pin D7 (kaki 14) disambungkan dengan pin arduino digital pin 7
•    sambungkan potensio 10 KOhm ke  +5v dan GND , dan Pin LCD 3 ke potensio
•    Pin 5 (R/W) ke Ground
•    Pin Anoda disambungkan dengan VCC
•    Pin Katoda disambungkan dengan GND
•    Pin VCC disambungkan dengan VCC
•    Pin GND disambungkan dengan GND
Perhatikan gambar Menyambungkan LCD dengan Board Arduino yang di sampaikan di atas ya,
CATATAN : jangan sampai terbalik kaki VCC dan GND serta kaki pin Anoda dan Katoda, boleh terbalik tapi maksimal 0,5 detik saja,selebihnya jika ada kerusakan menjadi tanggung jawab anda. Kami berusaha memberikan tutorial yang valid. Ketelitian anda akan sangat berpengaruh pada hasil
Oh iya pin pin nya jangan ada yang salah pasang ya ,misal pinDB4 dipasang ke pin 4 arduino,jika pemasangan berubah maka source code alias sketch arduinonya juga harus meyesuaikan.

Setelah proses pemasangan rangkainan sudah selesai sekarang saatnya mencoba untuk  programing atau membuat program akses LCD di Arduino, pastikan driver device arduino sudah terinstal pada computer buka halaman editor untuk arduino silahkan coding seperti di bawah ini


#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4,5, 6, 7);
void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Belajar Arduino");
  lcd.setCursor(0, 1);
  lcd.print("lcd 16 x 2");
}

void loop() {
}

Untuk LCD dengan ukuran lain misal
20x4 ,
silakan ganti baris code  lcd.begin(16, 2); Dengan  lcd.begin(20, 4);
8x2 ,
silakan ganti baris code  lcd.begin(16, 2); Dengan  lcd.begin(8, 2);
oh iya
source code bagian ini :
LiquidCrystal lcd(2, 3, 4,5, 6, 7);
Menunjukkan bahwa pemasangan pin LCD ke arduin uno adalah sebagai berikut :
•    Pin RS (kaki 4) disambungkan dengan pin arduino digital pin 2
•    Pin E (kaki 6) disambungkan dengan pin arduino digital pin 3
•    Pin D4 (kaki 11) disambungkan dengan pin arduino digital pin 4
•    Pin D5 (kaki 12) disambungkan dengan pin arduino digital pin 5
•    Pin D6 (kaki 13) disambungkan dengan pin arduino digital pin 6
•    Pin D7 (kaki 14) disambungkan dengan pin arduino digital pin 7

Tugas anda sekarang adalah
1.    ubahlah program untuk mengganti tulisan yang ditampilkan pada LCD
2.    jadikan teks pada LCD menjadi berganti ganti
misal berganti dari tampil
Belajar Arduino
lcd 16 x 2

menjadi

Belajar Arduino
lcd 16 x 2
kemudian clear (hapus LCD) , lalu tampilkan
Oleh
(tulis nama anda)

Catatan :
Masukkan bagian void loop yah
Untuk menghapus teks pada LCD , perintahnya adalah
lcd.clear();



 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Hot Sonakshi Sinha, Car Price in India