Alat Pengukur Kelembaban Tanah Dengan AVR ATMEGA 8535

Tampilan LCD

Tampilan LCD

Alat ini saya modifikasi dari rangkaian pada soil moisture Tester :D :D . Pada rangkaian tersebut yang menjadi pengolah pembacaan sensor hingga menjadi output dengan menggunakan IC LM3914. Output yang dihasilkan berupa indikator led, berjumlah 10. Pada alat yang saya buat, menggantikan IC LM3914 dan indikator led dengan sebuah mikrokontroler dan LCD 2×16. Secara dasar input sebuah sensor berupa sinyal analog yang nantinya diubah menjadi sinyal digital. Klo sewaktu kuliah dulu, namanya ADC (analog digital converter) :D :D . Karena kebetulan ada temen yang meminta tolong untuk membuatkan alat ini sebagai Penulisan Ilmiahnya “Kok gw yang ngerjain alatnya yach” :D :D . Lumayan buat nambahin beli gitar fender uangnya :D :D. Karena di ATMEGA8535 terdapat ADC internal didalamnya, maka saya memanfaat ADC tersebut sebagai pengolah sensornya nanti “biar sedikit pengurangi pengeluaran belanja komponen”. Ok, kita mulai dengan bahan-bahannya yang dibutuhkan.


1. Modul DT-AVR (Low Cost Micro System) + isp programmer dari Innovative Electronics

DT-AVR LC MS_REDDT-HiQ AVR ISP

2. LCD 2×16

lcd_1602Schematic LCD

3. CodevisionAVR

4. Sensor

sensor kelembaban

Berikut listing programnya

#include <mega8535.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0×18 ;PORTB
#endasm
#include <lcd.h>

#define ADC_VREF_TYPE 0×60

char buf[33];
unsigned char dtadc;

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0×40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0×10)==0);
ADCSRA|=0×10;
return ADCH;
}

void tampil(unsigned char dat)
{
unsigned char data;
data = dat / 100;
data+=0×30;
lcd_putchar(data);

dat%=100;
data = dat / 10;
data+=0×30;
lcd_putchar(data);

dat%=10;
data = dat + 0×30;
lcd_putchar(data);

}

void display()
{
if (dtadc==0){
lcd_gotoxy(0,0);
lcd_putsf(”           “);
}
if ((dtadc>1) && (dtadc<=10)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);
lcd_putsf(”          “);
}
if ((dtadc>10) && (dtadc<=20)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”         “);
}
if ((dtadc>20) && (dtadc<=30)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”        “);
}
if ((dtadc>30) && (dtadc<=40)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”       “);
}
if ((dtadc>40) && (dtadc<=50)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”      “);
}
if ((dtadc>50) && (dtadc<=60)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”     “);
}
if ((dtadc>60) && (dtadc<=70)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”    “);
}
if ((dtadc>70) && (dtadc<=80)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”   “);
}
if ((dtadc>80) && (dtadc<=90)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(”  “);
}
if ((dtadc>90) && (dtadc<=100)){
lcd_gotoxy(0,0);
sprintf(buf,”\xff”);
lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);lcd_puts(buf);
lcd_putsf(” “);
}

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0×00;
DDRA=0×00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0×00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0×00;
DDRC=0×00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0×00;
DDRD=0×00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0×00;
TCNT0=0×00;
OCR0=0×00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×00;
TCNT1H=0×00;
TCNT1L=0×00;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0×00;
MCUCSR=0×00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;

// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: On
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0×82;
SFIOR&=0xEF;
SFIOR|=0×10;

// LCD module initialization
lcd_init(16);

// Global enable interrupts
lcd_gotoxy(2,0);
lcd_putsf(“Alat Pengukur”);
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf(“Kelembaban Tanah”);
delay_ms(1000);
lcd_clear();
lcd_gotoxy(4,1);
lcd_putsf(“%”);
lcd_gotoxy(11,0);
lcd_putsf(“<-Led”);
while (1)
{
dtadc=read_adc(0);                // baca data ADC dari ch.0;
lcd_gotoxy(0,1);
tampil(dtadc);
display();

// Keterangan
if (dtadc<=50){
lcd_gotoxy(6,1);
lcd_putsf(“Kering    “);
}
if ((dtadc>50) && (dtadc<=90)){
lcd_gotoxy(6,1);
lcd_putsf(“Lembab    “);
}
if (dtadc>90){
lcd_gotoxy(6,1);
lcd_putsf(“Basah     “);
}

delay_ms(100);
};
}

Selamat mencoba !!!!

About these ads

71 thoughts on “Alat Pengukur Kelembaban Tanah Dengan AVR ATMEGA 8535

  1. Anonymous

    Hahahayyy.. Masih teknis abis si saad nih ;) Ga berubah.

    8535! Pernahh.. tapi ga pake ADC nya ding. Waktu itu (untungnya) datanya sederhana, bisa dikonvert jadi digital pake schmitt trigger. Wah berarti kapan2 klo butuh bisa tanya kamu ya.. *kekeke, tapi kapan ya aku nyentuh mikro lagi.. kayanya ga dalam waktu dekat deh*
    Btw aku baru tau klo sensor kelembaban pake LM3914.. (yang ini belum pernah).. soalnya jarang aplikasi yang butuh besaran kelembaban..

    Reply
    1. Aat Post author

      iya, mbk boleh tuch. slama saya bsa menjawabnya *alah “saya”. Kali aja kita bsa saling sharing. :D
      klo ini mah, abis ngerjain Alat orang buat penulisan ilmiahnya. maknya dari pada sayang di simpen di kompi. mendingan di posting di blog. :D

      Reply
  2. Maz_Dav_

    ASS….Kum….
    Lam knl smuay… langsung aj ne mas..
    aq ne br2 bljr mikro gt crtny..
    aq pengen tau jenis2 sensor untuk mendeteksi kelembaban tanah,
    trus bt mendeteksi kelembaban tanah tu sensore ditaro mnny (maksute kedalemanye)?
    trus misale kena air ap g rusak maz, kan outputnya tegangan gt…

    mohon infonya
    n
    terima kasih sebelumny
    wasss…kum

    Reply
  3. Maz_Dav_

    ASS….Kum….
    Lam knl smuay… langsung aj ne mas..
    aq ne br2 bljr mikro gt crtny..
    aq pengen tau jenis2 sensor untuk mendeteksi kelembaban tanah,
    trus bt mendeteksi kelembaban tanah tu sensore ditaro mnny (maksute kedalemanye)?
    trus misale kena air ap g rusak maz, kan outputnya tegangan gt…

    mohon infonya
    n
    terima kasih sebelumny
    wasss…kum..

    Reply
    1. Aat Post author

      sensor kelembaban tanah banyak jenisnya. namun pada postingan saya, sensor yang digunakan sangat sederhana. hanya menggunakan 2 buah batang kabel tunggal. yang mana proses pembacaan sensornya menggunakan adc (analog digital converter) jadi perubahan tegangan dari sensor yang di baca uC(mikrokontroler). pada keadaan lembab nilainya berbeda dengan keadaaan kering. jadi sensornya itu harus terkena object yang akan dideteksi kelembabannya. klo masalah peletakkannya tergantung dari kita sendiri. bisa di tempelkan ke permukaan tanah ataupun di pendam di dalam tanah. klodi dalam air biasanya harus ada pengaman agar air tidak masuk ke permukaan komponen elektronikanya. agar terhindar dari konduktor antara air dengan rangkaian elektronikanya. :D :D :D

      Reply
      1. Maz_Dav_

        terma kasih infonya pak..
        akan saya cb dulu….
        tapi nanti dalam pengerjaannya…
        k-lo ad kendala mohon bimbinganya ya pak…
        terima kasih sebelumnya..

  4. agung

    pak mau tanya sensor buat alatnya yang bagus apa y ? cz saya juga lagi buat alat persis kayak gini tapi saya lebih mendalam ke sensornya………. klu elektrode karbon dan tembaga, Voutnya g stabil di beberapa titik kelembapan, sya belum coba sich tapi katanya udah ada yang lakukan percobaan dengan karbon, dan titik yang g stabil ada pada kelmbapan 20 % dan 90 %…itu tegangan outputnya sama…..tolong bantuannya………… klu bisa di email aja…….. agungkarurukan@yahoo.co.id……thanks be 4

    Reply
  5. eka

    pak tolong bantuannya… saya sudah buat alat nya… tapi saat dicoba kok hasil yang tampil pada LCD ga tetap (selalu berubah) itu kenapa ya??? tolong bantunya,, klo bisa di email ya..

    thanks..

    Reply
  6. agung

    pak bisa tanya : sensor (elektrode yg dipakai) bagusnya apa ya ? tembaga atau karbon atau ada yang lebih baik…….terimakasih…..

    Reply
  7. joppy

    wah nice info nie mas,,..mw nanya dulu nie,,mohon bantuannya ya..
    Mas..untuk dpt buat sensor itu dpt sumber drmana mas??ada bukunya??
    saya tertarik dengan alat ini,,tapi saya ad masalah dengan sensornya..sensor biasa katanya gak tahan aer n gak bisa dipendam ditanah,,mw nyoba buat sensor ky mas,,tp ktny perlu bukti jelas dr mana cr ini didapat..hix6..gmn mas??ad pencerahan??
    blh minta gambar2 rangkaiannya gak mas??ap aj yg harus dihubungin tp secara keseluruhan..

    reply ke email jg blh mas..thanxx..

    Reply
  8. agung

    pak mau tanya lagi nich………….. ………. setelah saya coba Vo diawal cukup bagus yaitu linier(Vo menurun secara linier)………………tapi pada kelembaban yang sampai 70 % mulai meningkat terus menerus sampai batas maksimal (3 volt) menjadi tidak stabil (tidak linier)………… bisa minta tolong g pak ?

    Reply
  9. eka

    pak mau tanya kalo ATMega nya selain ATmega 8535 bisa digunakan pada alat ini ga???

    misalnya pake atmega 8 bagaimana??? tolong balasannya..

    Reply
  10. eka

    pak mau tanya fungsi potensiometer pada sensor tu apa??

    n bagaimana kerjanya?? tolong dibalas…terima kasih sebelumnya

    Reply
  11. ekaa

    pak mau tanya fungsi potensiometer pada sensor tu apa??

    n bagaimana kerjanya?? tolong dibalas…terima kasih sebelumnya

    Reply
  12. Aat Post author

    potensio itu fungsinya sebagai besaran tegangan yang masuk ke dalam adc. jadi klo potensio diputar penuh maka range perubahan tegangan sensor yang masuk adc, datanya akan lebar. itu aja sich….

    Reply
  13. rifky

    asskum…
    saya skrg dalam proses pembuatan tugas akhir seperti ini.
    tp saya menggunakan sensor SHT75.
    yg saya mau tanyakan apakah sensor SHT 75 bisa dipakai seperti alat diatas??
    terima kasih…
    wasalam…

    Reply
    1. Aat Post author

      pake 8 bit. memangnya 1 port di micon ada 10 bit??? jelas klo yang pake 10bit. bisa lebih bnyak pemakaian ADCnya…

      Reply
      1. Anonymous

        ok mas…masih dicoba!! belum tau ja maz..ktnya 10 bit lebih precisi…bner ga tu mas ? mnta pencerahan..nya!!

  14. eka

    mas mau tanya gman cara kalibarasi alat ini ??

    n program “data+=0×30″ mksdnya gmana tu mas??

    mhon bantuannya maz..!! trim sebelumya…

    Reply
  15. Aat Post author

    void tampil(unsigned char dat)
    {
    unsigned char data;
    data = dat / 100;
    data+=0×30;
    lcd_putchar(data);

    dat%=100;
    data = dat / 10;
    data+=0×30;
    lcd_putchar(data);

    dat%=10;
    data = dat + 0×30;
    lcd_putchar(data);

    }

    void diatas itu berfungsi untuk mengubah bilangan heksa menjadi desimal…

    Reply
  16. eka

    mas mau tanya nich….saya sudah coba buat alat nya ini…

    tpi kok hasil pembacaan nya langsung ke 255 ya hasilnya..!!!!
    jadinya hasilnya “basah” terus…pdhal sensor sudah saya lepas..!!!.

    kesalahanya dimana tu ya mas…!!!.tolong dibantu ya mas…
    mklum lagi mw bljar..uM…

    Reply
  17. mulyadi

    Mas Saad, apakah saya bisa pesan dibuatkan beberapa buah alat seperti ini?
    Mohon bantuannya ya. Terima kasih Salam

    Reply
  18. edi sofyan

    pak gimana caranya saya bisa dapat kan alat ini y..dan berapa harga pak.. kok ada yg khusus untuk melihat unsur kandungan NPK pada tanah…dan alamat saya berada di Kota Berastagi Sumatera Utara..makasih atas di bls email ini..

    Reply
  19. sigit51617

    om… aku coba hasil outputnya kalo di tes pake multimeter kecil banget…
    itu sensor nya bahan nya pake apa yang bagus..??

    saya pake jari-jari bekas motor bisa ga itu kira-kira…?? saya coba outputnya 0,xx Volt

    Reply
  20. Hendrik

    kesulitan di sensor nya nih pak.. kalo sensornya pesan bisa nda.. sayang alat yg sudah saya buat..
    kalo pesen sendornya birapa harga nya..??

    Reply
    1. Mr. S Post author

      masih sulit mendapatkan sensor yang baik??? coba pake kabel tunggal yang biasa di pake untuk jaringan LAN. kabel UTP..

      Reply
  21. Sonny6056

    wow…thats agreat project…, ternyata simple y sensor nya cm pke btang elektroda gtu…, sy mw coba nih gan.., nanti klo ad mslh…tlg bantuannya ga…, mksh…

    Reply
  22. Anonymous

    om saya minat mencoba , tp tolong di kasih list komponennya yang bagian rangkaiaan sensornya donk !
    Trus kalo modul DT-AVR itu sudah tersedia jadi ? trus tinggal di program Gtu ? atau tinggal di sambung ke komponen sensornya ?
    om trus kalo bisa kirimin gambar alat jadinya ya !!!
    email:mygammingace@gmail.com

    Reply
    1. Mr. S Post author

      gambar gak ada. coz ini alat pesenan temen. diikutin aja langkah2nya. nanti klo ada kesulitan. monggo di tanyakan disini.

      Reply
  23. Anonymous

    mas maap yah menggangu..
    saya butuh pencerahan dari mas…
    kalo saya mau membuat rangkaian apa saja hardware yg di butuhkan untuk membuat rangkaiannya..?
    terimakasih….

    Reply
  24. regierrangga

    Selamat sore gan .
    saya ingin bertanya, tugas akhir saya pengaplikasian sensor kelembaban tanah sebagai penyiram tanaman otomatis, menurut agan program diatas bisa terealisasikan apa enggak ke tugas akhir saya ?
    mohon bantuannya ya gan.

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s