Showing posts sorted by relevance for query arduino-library. Sort by date Show all posts
Showing posts sorted by relevance for query arduino-library. Sort by date Show all posts

Monday 23 February 2015

Arduino: Membaca Data Jarak Menggunakan Modul Sensor Ultrasonik PING Parallax


Pada tutorial ini digunakan software Arduino 1.0.1 yang merupakan versi terbaru IDE Arduino. Namun tak hanya menggunakan versi terbaru, sebagai perbandingan, digunakan juga IDE Arduino-0022.
Pada kedua versi Arduino tersebut terdapat contoh program sensor PING yang dapat langsung diuji-coba tanpa modifikasi atau dengan sedikit modifikasi. Untuk praktisnya, kita akan merangkai Starduino Board dan PING Parallax sesuai dengan contoh program PING yang tersedia pada IDE Arduino.


starduino_ping_parallax400

Rangkaian Starduino + PING Parallax
Modul sensor ultrasonik PING buatan Parallax memiliki 3 kaki yakni: GND5V, dan SIG. Gambar di bawah ini menunjukkan koneksi modul PING dengan Starduino Board.

starduino_ping_diagramb
Kaki SIG dari modul PING dihubungkan dengan Pin-7 dari Starduino. Kaki GND dan 5Vdihubungkan ke GND dan +5V dari Starduino.
Setelah Starduino dan PING terangkai dengan benar, maka langkah selanjutnya adalah membuka sketch Ping yang telah tersedia pada contoh-contoh program bawaan IDE Arduino 1.0.1 maupun Arduino-0022 seperti ditunjukkan pada screenshot di bawah ini.
arduino_sensor_ping
Sebelum program ini kita upload ke Starduino, kita edit sedikit program Ping pada bagian tampilan data serial dan delay sebagai berikut:
   Serial.print("Jarak = ");
   Serial.print(inches);
   Serial.print("in, ");
   Serial.print(cm);
   Serial.print("cm");
   Serial.println();
   delay(500);
Baris perintah pertama yang bercetak tebal menambahkan tulisan ‘Jarak =’ sebelum menampilkan nilai jarak dalam inci dan centimeter. Perubahan program lainnya adalah parameter fungsi delay() yang awalnya bernilai 100 diganti menjadi 500.
Selanjutnya, kita lakukan upload program ke Starduino dan buka window Serial Monitor. Jika tidak ada kesalahan pada hardware dan komunikasi, maka Starduino akan melakukan pengukuran dan mengirimkan hasil pengukuran jarak ke PC melalui port serial.
LED pada modul PING akan berkedip setiap 1/2 detik sebagai tanda bahwa modul PING bekerja memancarkan suara ultrasonik. Teknik pengukuran jarak dilakukan dengan mengukur lebar-pulsa dalam satuan waktu yang menunjukkan lamanya waktu semenjak PING memancarkan suara ultrasonik hingga menerima pantulan suara ultrasonik, atau mengalami TIMEOUT. Selanjutnya, program menghitung jarak dalam inci dan centimeter menggunakan fungsi-fungsi berikut:
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;
}
Berikut adalah tampilan window Serial Monitor yang menampilkan data yang dikirimkan oleh Starduino Board melalui port serial RS232.
starduino_ping_com1
Nah, sangat mudah bukan? Dengan dukungan contoh-contoh program dan library-library siap pakai yang disediakan oleh Arduino, kita dapat membuat prototipe sistem dengan sangat cepat. Tak heran jika Arduino mengklaim dirinya sebagai Rapid Prototyping Platform.
Tak hanya mudah, Arduino juga murah. Dan tak hanya murah, Arduino juga menerapkan kebijakan open-source untuk software dan hardwarenya, sehingga siapapun boleh membuat sendiri versi Arduino-nya masing-masing. Termasuk juga saya dengan versi Starduino yang masih berbasis ATmega8.
Dengan Starduino dan PING Parallax, kita dapat membuat berbagai aplikasi berbasis pengukuran jarak seperti monitoring level air, pengukur tinggi badan, sistem pengaman mesin potong, dan lain-lain.
Berikut adalah screenshot aplikasi monitoring level ketinggian air dalam tandon dan aplikasi pengukur tinggi badan berbasis Starduino dan sensor jarak ultrasonik PING Parallax. Program dibuat menggunakan VB.NET 2005 Express Edition.
starduino_ping_levelair
starduino_ping_tinggibadan


Read more: http://belajar-dasar-pemrograman.blogspot.com/2013/04/arduino-membaca-data-jarak-menggunakan.html#ixzz3SdNdM700

Sunday 8 December 2013

EEPROM MEMORY

Udah seminggu kagak posting nih.. Rada kangen juga nih. Kali ini, saya akan mem-posting simulasi EEPROM MEMORY dengan cara menyimpan alamat dan data dari IDE ke dalam Arduino. Tujuan dari simulasi ini adalah untuk melakukan pembacaan data dari MEMORI EEPROM dan dapat melakukan penyimpanan DATA pada MEMORI EEPROM. Alat yang kita gunakan pada simulasi ini yaitu Laptop/PC, Arduino Uno, dan Kabel USB tipe B. Program ini menggunakan KOMUNIKASI SERIAL menggunakan SERIAL TERMINAL 1 atau aplikasi yang lainnya. Pada program ini USER dapat memerintah perintah BACA dan TULIS, DARI atau KE MEMORI EEPROM. Mari simak langkah-langkah di bawah ini :
  • Ayo ketik sintaks coding program ini di Arduino IDE anda yang telah terinstall di Laptop/PC sobat semua ...
#include <EEPROM.h> boolean exitProgram = 0;
void setup() {
Serial.begin(9600);
Serial.println("=========  EEPROM
Access Via
Serial
==== ====");
Serial.println("Type this command
to execute
EEPROM opera tion");
Serial.println("write : For write
data to EEPROM");
Serial.println("read
: For read
data
from
EEPROM");
Serial.println("clear
: For
clear all
data
in EEPROM");
Serial.println("exit
: For
exit
from
program");
}
void loop() { int command;
while(!exitProgram) { do {
Serial.print("Type Command >> "); while(Serial.available()==0);command = readCommandFromSerial();

switch(command) {
case 1 : Serial.println("Write EEPROM Selected"); writeEEPROM();
break;
case 2 : Serial.println("Read EEPROM Selected"); readEEPROM();
break;
case 3 : Serial.println("Clear EEPROM Selected"); clearEEPROM();
Serial.println("Clear EEPROM Finished"); break;
case 4 : Serial.println("Exit From Program"); exitProgram = 1;
break;
default : Serial.println("Wrong Command, Please Ty pe Again !"); break;
}
}
while(command == 0);
}
}
int readCommandFromSerial() { char stringFromSerial[10]; char data;
nt command;
int countData = 0; for(int i=0;i<10;i++) {
stringFromSerial[i]=0;
}
while(true) { if(Serial.available()) {
data = Serial.read(); Serial.write(data); if(data=='\n') {
break;
}
else { if(data!='\r') {
stringFromSerial[countData] = data; countData++;
}
}
}
}
if(strcmp(stringFromSerial,"write")==0){ command = 1;
}
else if(strcmp(stringFromSerial,"read")==0){ command = 2;
}
else if(strcmp(stringFromSerial,"clear")==0){ command = 3;
}
else if(strcmp(stringFromSerial,"exit")==0){ command = 4;
}
else{
command = 0;
}
return command;
}
int readValFromSerial() { char stringFromSerial[10]; char data;
int val;
int countData = 0; for(int i=0;i<10;i++) {
stringFromSerial[i]=0;
}
while(true) { if(Serial.available()) {
data = Serial.read(); Serial.write(data); if(data=='\n') {
break;
}
else { if(data!='\r') {
stringFromSerial[countData] = data; countData++;
}
}
}
}
sscanf(stringFromSerial,"%d",&val); return val;
}
void clearEEPROM() { for(int i=0;i<512;i++) {
EEPROM.write(i,0);
}
}
void writeEEPROM() { int address;
do {
Serial.print("Address : "); address = readValFromSerial(); if(address>512) {
Serial.println("Addres maximal is 512 !, Please type again !");
}
}
while(address>512); int data;
do {
Serial.print("Data : "); data = readValFromSerial(); if(data>512) {
Serial.println("Data maximal is 512 !, Please type ag ain !");
}
}
while(data>512); EEPROM.write(address,data); Serial.println("EEPROM Write Success !");
}
void readEEPROM() {

int address; do {
Serial.print("Address : "); address = readValFromSerial(); if(address>512) {
Serial.println("Addres maximal is 512 !, Please type again !");
}
}
while(address>512);
int data = EEPROM.read(address); Serial.print("Data in Address "); Serial.print(address,DEC); Serial.print(" : "); Serial.println(data,DEC);
}
  • Jangan Lupa melakukan COMPILE dan UPLOAD, untuk menjalankan program tersebut di Ardunino.
 
  • Bukalah Serial Monitor untuk mengketik (menulis) data dari IDE yang akan di tujukan pada Arduino Uno menggunakan MEMORY EEPROM.
 
  • Ketikkan Write untuk menulis alamat EEPROM, Setelah itu matikan atau lepas Power Supply Arduino Uno dan tutup Serial monitor.
 
  • Sambungkan lagi Power Supply Arduino dan bukalah Serial Monitor, dan ketikan Read (Baca) untuk melihat apakah data yang telah kita simpan tadi, masih tersimpan di EEPROM Arduino atau tidak. 
 
  • Jika TERSIMPAN maka tampilannya akan sepertin ini.
 
 
EEPROM pada Arduino Uno ini menggunakan AT-MEGA 328, dimana pada AT-MEGA 328 memiliki karakteristik kapasitas EEPROM-nya bisa mencapai 512 byte dan 8 bit, dan memiliki data SRAM sampai dengan 512 byte. Dia juga mampu bekerja pada tegangan 2,7 VDC - 5,5 VDC.
Penampakan AT-MEGA 328
Fungsi EEPROM pada Arduino adalah sebagai penyimpan data dari IDE ke atau menuju dari Arduino. Jadi, ketika Supply Arduino di matikan dan di hidupkan kembali maka data yang telah di simpan pada EEPROM masih TERSIMPAN, kecuali ada Perintah CLEAR sebelumnya. Jika, ada Perintah CLEAR maka data yang telah di tulis (disimpan) tadi akan terhapus.

Mengapa sih DATA yang di simpan pada EEPROM maksimal harus 512 byte? Karena, batas memory pada EEPROM pada Arduino adalah 512 Byte. Arduino uno menggunakan mikroprosesor dengan tipe ATMEGA328 dan memiliki kapasitas EEPROM sampai dengan 512 byte dan 8 bit dan memiliki data SRAM internal 512 byte.

Mengapa sih ALAMAT pada EEPROM hanya di batasi sampai dengan 512 byte? Karena, ATmega 328 juga mempunyai 2 KB SRAM dan 1 KB EEPROM (yang dapat dibaca dan ditulis (RW/read and written) dengan EEPROM library) dan batas alamat memory dari EEPROM hanya antara 0(nol)- sampai dengan 512 saja.