Pages

Friday, February 3, 2012

Pengatur Kelembaban dan Penampil Suhu untuk Inkubator Miselum J. Tiram Berbasis FPGA Spartan-3

Sesungguhnya setelah kesulitan itu ada kemudahan...(QS. Al Insyirah: 5)

The Implementation of FPGA Spartan-3 for Humidity Controller and Temperature Display for Miselum J. Tiram Incubator



Panca Mudji Rahardjo dan Silvester Eka Jemali
*Jurusan Teknik Elektro, Fakultas Teknik, Universitas Brawijaya


Abstrak– Dalam penelitian ini telah dibuat system pengendali kelembaban dan penampil suhu untuk inkubator Miselum J. Tiram.Kontroler yang digunakan dalam alat ini yaitu FPGA dalam Spartan-3 development board yang berbasis pada program VHDL. Alat ini memiliki 1 masukan 8 bit, 2 keluaran untuk logika kelembaban dan 7 keluaran untuk display 7-Segment. Dari keluaran ini akan dihasilkan pengatur kelembaban seperti yang diinginkan  dengan penampil suhu lingkungan inkubator.
                Data suhu dan kelembaban diperoleh dari sensor HSM-20G, data ini berupa data analog yang dikonversi ke digital menggunakan ADC 8 bit 0809. Keluaran ADC merupakan masukan untuk FPGA. Keluaran FPGA akan menentukan aksi dari aktuator, sehingga dengan bantuan driver mengaktifkan sprayer untuk mencapai kelembaban yang disesuaikan dengan kebutuhan jamur tiram.  

Kata Kunci : FPGA, Spartan-3, Kelembaban Miselum J.Tiram, HSM-20G.

Perancangan Sistem

                Perancangan perangkat keras alat ukur suhu dan pengendali kelembaban pada inkubator Miselum J.Tiram mengacu pada spesifikasi berikut :
1.       Inkubator Jamur yang digunakan berupa pemodelan berukuran  90cm ´ 40cm ´ 40cm yang berbahan dari kayu dengan pelapis tahan air.
2.       Menjaga kelembaban di dalam inkubator pada set point 64%RH-89%RH yang disesuaikan dengan kelembaban lingkungan Miselum J.Tiram.
3.       Pembacaan suhu untuk range 20°C - 50°C.
4.       Sensor suhu dan kelembaban menggunakan sensor HSM-20G.
5.       Menggunakan ADC 0809 untuk pengubah sinyal analog menjadi digital untuk masukan FPGA.
6.       Pengendali utama menggunakan FPGA dalam Spartan-3 development board, yang dilengkapi dengan penampil seven segment.
7.       Aktuator berupa sebuah sprayer dan sepasang fan.

Diagram blok sistem ditunjukkan dalam Gambar 1. Dalam Gambar 1, bila kelembaban kurang dari 65%RH maka sprayer akan aktif (ON) dan fan pengering tidak aktif (OFF), kelembaban diantara 64%RH hingga 89%RH sprayer dan kipas pengering OFF, kelembaban diatas 90%RH maka sprayer OFF, dan fan ON. Keadaan suhu di dalam inkubator ditampilkan pada seven segment Xilinx Spartan-3

Gambar 1.  Diagram blok sistem


 Gambar 2.  Inkubator Jamur Tiram

Gambar 3. Rangkaian sensor HSM-20G


Gambar 4. Rangkaian ADC 0809

 Implementasi FPGA

Berdasarkan Tabel 1 dan 2 dapatlah dibuat kode VHDL seperti ditunjukkan dalam Gambar 5.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity batas_bawah is
    Port ( input : in std_logic_vector(7 downto 0); --in integer range 0 to 255;
           sel : in std_logic ;
           sysCLK : in std_logic;
           en0,en1,en2,en3 : out std_logic;
           output : out std_logic_vector(6 downto 0);
           bawahOK,atasOK : out std_logic);
end batas_bawah;

architecture Behavioral of batas_bawah is
signal output_led3,output_led2 : std_logic_vector(6 downto 0);
signal state,nextstate : integer range 0 to 1 := 1;
signal new_CLK : std_logic;
signal clkdiv : std_logic_vector(23 downto 0):="000000000000000000000000";
 
begin

process (input,state,sel) begin
if sel='0' then
  if input<="00001011" then
    bawahOK <= '1'; atasOK <= '0';
  else
    if input>="11110101" then
      bawahOK <= '0'; atasOK <= '1';
    else
      bawahOK <= '0'; atasOK <= '0';
      end if;
  end if;
en3<='0';en2<='0';en1<='1';en0<='1';
output<="1111110";

else          --sel='1'

case state is
  when 1 =>
      en3<='0';en2<='1';en1<='1';en0<='1';
      nextstate<=0; 
      output<=output_led3;
  when 0 =>
      en3<='1';en2<='0';en1<='1';en0<='1';
      nextstate<=1; 
      output<=output_led2;
end case;
 
end if;
end process;

output_led3 <= "1110001" when input < "00001010"                      --L
    else "0010010" when input >= "00001010" and input < "00111101"   --2
    else "0000110" when input >= "00111101" and input < "01110000"   --3
    else "1001100" when input >= "01110000" and input < "10100011"   --4
    else "0100100" when input = "10100011"                           --5
    else "1001000";                                                  --H

output_led2 <= "1110001" when input < "00001010"                      --L
    else "0000001" when (input >= "00001010" and input < "00001111")  --0
                    or (input >= "00111101" and input < "01000010")
                    or (input >= "01110000" and input < "01110101")
                    or (input = "10100011")
    else "1001111" when (input >= "00001111" and input < "00010100")    --1
                    or (input >= "01000010" and input < "01001111")
                    or (input >= "01110101" and input < "01111010")
    else "0010010" when (input >= "00010100" and input < "00011001")    --2
                    or (input >= "01001111" and input < "01001100")
                    or (input >= "01111010" and input < "10000000")
    else "0000110" when (input >= "00011001" and input < "00011110")    --3
                    or (input >= "01001100" and input < "01010001")
                    or (input >= "10000000" and input < "10000101")
    else "1001100" when (input >= "00011110" and input < "00100011")    --4
                    or (input >= "01010001" and input < "01010111")
                    or (input >= "10000101" and input < "10001010")
    else "0100100" when (input >= "00100011" and input < "00101000")    --5
                    or (input >= "01010111" and input < "01011100")
                    or (input >= "10001010" and input < "10001111")
    else "0100000" when (input >= "00101000" and input < "00101110")    --6
                    or (input >= "01011100" and input < "01100001")
                    or (input >= "10001111" and input < "10010100")
    else "0001111" when (input >= "00101110" and input < "00110011")    --7
                    or (input >= "01100001" and input < "01100110")
                    or (input >= "10010100" and input < "10011001")
    else "0000000" when (input >= "00110011" and input < "00111000")    --8
                    or (input >= "01100110" and input < "01101011")
                    or (input >= "10011001" and input < "10011110")
    else "0000100" when (input >= "00111000" and input < "00111101")    --9
                    or (input >= "01101011" and input < "01110000")
                    or (input >= "10011110" and input < "10100011")
    else "1001000";                                                         --H

process (new_CLK)
begin
    if new_CLK='1' and new_CLK'event then
      state<=nextstate;
    end if;
end process;
 
process (sysCLK)
begin
    if sysCLK='1' and sysCLK'event then
      clkdiv<=clkdiv+1;
    end if;
end process;

new_CLK<=clkdiv(13);

end Behavioral;

Gambar 5. VHDL code untuk penampil suhu dan pengatur kelembaban pada incubator Miselum J Tiram.


  Gambar 6. Device utilization summary


Gambar 7. Implementasi pada Spartan-3 Development Board. Sistem menunjukkan suhu 29oC. LED merah menunjukkan bahwa kelembaban rendah.

No comments:

Post a Comment