MEKATRONIKA

Foto kawan-kawan seperjuangan dalam menempuh pendidikan Di Politeknik Negeri Batam

FERI FEBRIANSYAH

Itu adalah saya , Keren kan !!!

Kembar

Editan Sedikit hehehe

Keren Ui

Line Follower

Karya Anak Bangsa

Tampilkan postingan dengan label Arduino. Tampilkan semua postingan
Tampilkan postingan dengan label Arduino. Tampilkan semua postingan

Selasa, 11 Februari 2014

EEPROM MEMORY PADA ARDUINO

Hallo , apa kabar untuk para Visitor !!!
Kembali lagi kepada saya , semoga kawan-kawan disana dan dimanapun ada berada dalam keadaan sehat selalu

Disini saya akan menyampaikan sedikit tentang penyimpanan data pada EEPROM .

Semoga Ini bermanfaat bagi kawan-kawan !!!

Tujuan 
  1. Mampu membuat program untuk melakukan penyimpanan data pada EEPROM
  2. Mampu membuat program untuk melakukan pembacaan data dari memori EEPROM
Peralatan yang dibutuhkan :
  1. Komputer            : 1 set
  2. Arduino  Uno       : 1 pcs
  3. Kabel USB tipe B  : 1pcs
 Percobaan
  1. Baca dan Tulis Memory EEPROM
    Pada percobaan kali ini akan dibuat program yang berfungsi sebagai antar muka penanganan memory EEPROM . Antarmuka program menggunakan komunikasi serial. Melalui Serial terminal 1 atau apliksasi lainya. User dapat melakukan perintah baca dan tulis dari atau ke memory EEPROM.
  • Prosedur :
  1.  Tuliskan sintak program ini pada Arduino IDE , kemudian lakukan kompilasi dan uploud program ke Mikrokontroller.
#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 operation");
  Serial.println("write  : For write data to EEPROM");
  Serial.println("read   : for read data from EEPROM");
  Serial.println("clear  : for clean 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();
                break;
       case 4 : Serial.println("Exit From Program");
                exitProgram=1;
                break;
       default : Serial.println("Wrong Command, Please Type Again");
                 break;
     }
   }
   while(command==0);
   }
 }
 
 int readCommandFromSerial()
 {
   char stringFromSerial[10];
   char data;
   int 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("Address 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 again !");
    }
  }
  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("Address 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);
}
   
  •   Setelah itu , uploud program ke arduino
Tugas dan Pertanyaan :

 1. Jalankan aplikasi Serial Monitor pada Arduino, pastikan konfigurasi Serial Monitor menggunakan baudrate 9600 dan pada akhir pengiriman data disertakan karakter CR + LF. Lakukan penulisan data pada memori alamat 100, dengan data bernilai 10. Kemudian keluar dari program dan matikan power Arduino dan nyalakan kembali. Lakukan pembacaan data pada alamat 100, berapakah nilai data pada alamat 100 ? Apakah data yang dituliskan sebelumnya hilang ?
==> Pada percobaan ketika dimasukkan perintah WRITE kemudia dimasukan nilai 100 kemudian DATA 10, ketika dimatikan dan dinyalakan kembali nilai yang terbaca tetap sama, dan data tidak hilang.



2. Kenapa pada program penulisan data hanya dibatasi sampai 512 ? Jelaskan !
==> Karena, kapasitas memory pada EEPROM di Arduino hanya 512 Byte.
3.Kenapa pada program alamat memori yang dapat ditulisi data hanya sampai 512 ? Jelaskan ! 
==>Karena batas alamat yang mampu diterima oleh EEPROM hanya mulai dari 0 sampai 512 saja.


4.   Buatlah kesimpulan dari praktikum ini !
==> Kesimpulan dari praktikum ini adalah dengan menggunakan EEPROM kita dapat menyimpan data yang tidak akan hilang meski power Arduino telah dimatikan.

Senin, 23 Desember 2013

Penggunaan Fungsi Matematika Di Arduino

     Apa Kabar semua ??
Semoga dimana pun kalian dan kapanpun kalian selalu baik-baik aja ... -_-

     Pada kesempatan kali ini saya akan memberikan penjelasan tentang fungsi matematika pada Arduino ,Tak taunya Di Arduino terdapat Fungsi Matematika !!!

    Jadi kita dapat mempergunakan fungsi Matematika pada  pemograman mikrokontroller dan kita dapat juga melakukan perhitungan matematika sederhana .


Langsung aja kawan , tak usah berlama-lama langsung kita coba !!!




Tapi kawan-kawan harus menyiapkan peralatan yang di butuhkan :

1. Laptop/PC , itu jelas karena tempat untuk membuat program
2. Arduino , semua tipe
3. Kabel USB tipe B sebagai penyambung .

Kawan-kawan kan punya Program Arduino ya kan , langsung aja Tulis Sintaks dibawah ini !!!

Testing Bro !!!

Tapi sebelum testing  fungsi-fungsi yang digunakan telah tersedia pada file Library math.h.
void setup() { Serial.begin(9600);
Serial.println ("========== Fungsi Matematika ========== =");
Serial.print(" cos(90) = ");    Serial.println(cos(0.5*PI));

Serial.print(" sin(45) = ");    Serial.println(sin(0.25*PI));
Serial.print(" tan(90) = ");    Serial.println(tan(0.5*PI));

Serial.print(" atan(90) = ");    Serial.println(atan (0.5*PI));

Serial.print(" atan2(90,10) = ");Serial.println(atan2(0.5*PI,0.055*PI));

Serial.print(" sqrt(9) = ");    Serial.println(sqrt (9));
Serial.print(" exp(9) = ");    Serial.println(exp(9));

Serial.print(" log(100) = ");    Serial.println(log(100));

Serial.print(" log10(100) = ");    Serial.println(log10(100));
Serial.print(" pow(9,2) = ");    Serial.println(pow( 9,2));

Serial.print(" square(9) = ");    Serial.println(sqrt (9));

Serial.print(" fabs(-1.5) = ");    Serial.println(fabs (-1.5));
Serial.print(" fmod(1.2334,2) = ");  Serial.println(fmod (1.2334,2));



}

void loop() {
}

Sudahkan  kawan-kawan buat programnya di Software Arduino IDE  , langsung Uploud ke Ardunio !!!
Dan Lihat Pada Serial monitor !

Sekarang lihat apa yang terjadi  ?

PERTANYAAN ????????
  1. Buka Aplikasi serial monitor , kemudian amati data yang ditampilkan pada Serial Monitor . Periksalah hasil perhitungan pada program secara manual. Apakah ada yang salah dari perhitungan program ? Jika ada sebutkan pada fungsi apa ??
  • Ada , Pada fungsi Trigonometri 


 2. Pada fungsi trigonometri parameter input fungsi dalam bentuk apa ? Radian atau degree ?
  • Parameternya dalam bentuk deggre 

Senin, 16 Desember 2013

SLEEP MODE DAN WATCHDOG TIMER PADA ARDUINO

Ok Para penggemar Arduino , Pada kesempatan ini saya akan menyampaikan sedikit tentang Sleep mode dan Watchdog timer pada Arduino tapi lebih tepatnya pada setiap mikrokontroller.

Langsung aja Gun !!!
Check this Out !!!

Semoga Bermanfaatnya kawan-kawan !!!

Disini saya akan mencoba melalui Simulasi , Jadi yang kita gunakan adalah Proteus 7.1.0 .

PERCOBAAN PERTAMA 
1. Sleep Mode Selama 4 detik dan Wake UP saat terjadi Timer OverFlow.
      Pada percobaan kali ini akan dibuat program untuk mengakses mode sleep pada mikrokontroller . Mode Sleep akan terjadi selama 4 detik , kemudian mikrokontroller akan aktif kembali (wake up). Pada saat Wake up , mikrokontroller akan melakukan perubahan terhadap kondisi led yang terhubung pada pin 12. sehingga jika program dijalankan , seakan-akan Led akan berkedip-kedip selang waktu 4 detik . Namun sebenarnya selama 4 detik tersebut mikrokontroller sedang dalam sleep mode ( tidak melakukan  apa-apa).

Langsung ke Prosedur :
a. Rangkailah rangkaian dibawah ini menggunakan software Proteus 7.1.0



Gambar Rangkaian percobaan 1  
 

b.  Setelah rangkaian diatas sudah dibuat di Proteus , kita lanjutakan membuat programnya pada Arduino IDE , kemudian lakukan kompilasi dan uploud.
#include <avr/sleep.h>
#include <avr/power.h>
#define LED_PIN (12)
volatile int f_timer=0;

ISR(TIMER1_OVF_vect){
  if(f_timer == 0) {
    f_timer =1 ;
  }
}
void enterSleep(void)
{
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_enable();
  power_adc_disable();
  power_spi_disable();
  power_timer0_disable();
  power_timer2_disable();
  power_twi_disable();
  sleep_mode();
  power_all_enable();
}
void setup()
{
 pinMode(LED_PIN, OUTPUT);
TCCR1A = 0x00 ;
TCNT1 = 0x0000;
TCCR1B = 0x05;
TIMSK1= 0x01; 
}
void loop ()
{
 if (f_timer==1)
{
 f_timer = 0;
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
enterSleep();
}
 
}

Lihat apa yang terjadi dan coba Simpulkan !!!

Kesimpulan dari pratikum ini adalah para mikrokontroller kita dapat mengistirahatkan dalam beberapa detik dan manfaat dari Mode Sleep mode ini adalah kita dapat menghemat daya pada mikrokontroller saat tidah digunakan.





PERCOBAAN KEDUA
2. Sleep Mode Selama 8 Detik dan Wake Up Saat Watchdog Timer Aktif

     Pada percobaan kali ini akan dibuat program untuk mengakses watchdog timer pada mikrokontroller. Watchdog timer akan digunakan untuk mengaktifkan kembali mikrokontroller dari mode sleep . Watchdog timer akan terjadi tiap 8 detik.

Langsung ke Prosedur kawan !!!
Rangkaian sama seperti diatas tinggal ganti program !!!

 

A. Tulis sintaks program di bawah ini , kemudian kompilasi dan uploud ke simulasi proteus




#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#define LED_PIN (12)
volatile int f_wdt=1;
ISR(WDT_vect)
{
  if (f_wdt == 0 )
  {
    f_wdt=1;}
   else
  {
   Serial.println("WDT Overrun !!!");
  }
}
void enterSleep(void)
{
  set_sleep_mode(SLEEP_MODE_PWR_SAVE);
  sleep_enable(); sleep_mode();
  sleep_disable (); power_all_enable();
}
void setup ()
{
  Serial.begin(9600);
  Serial.println ("Initialising...");
  delay(100);
  pinMode(LED_PIN,OUTPUT);
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = 1<<WDP0 | 1<<WDP3;
  WDTCSR |= _BV(WDIE);
  Serial.println("Initialisation complete.");
  delay(100);
}
void loop ()
{
  if (f_wdt == 1)
  {
    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
    f_wdt=0; enterSleep();
  }
}

     Kesimpulan ya adalah bahwa fungsi dari WatchDog Timer adalah untuk mengaktifkan atau membangun lagi mikrokontroller yang di Sleep atau di istirahatkan .
      Manfaat penggunaan watchdog timer pada mikrokontroller untuk mereset kembali program ketika terjadi masalah atau program tersebut macet. Jadi ketika program yang sedang berjalan macet maka kita gunakan watchdog timer untuk mereset kembali program.