Perancangan sistem ini mempunyai beberapa tujuan, antara
lain :
Mencoba alternatif
selain sensor LM35 yang sering digunakan dan menggantinya dengan sensor DS1621 sebagai pengukuran suhu. Dan mengkombinasikan
hasil pengukuran suhu dengan menampilkan hasilnya pada
monitor komputer memanfaatkan komunikasi serial
(interface).
Manfaatnya untuk mengukur suhu dan menampilkannya pada layar monitor dengan
komunikasi
serial (interface). Sehingga kita bisa mengetahui data dari
tampilan pada monitor
tanpa harus membaca hasil pengukuran pada alat secara
langsung atau manual.
Hasil Simulasi dengan Proteus
Pada Delphi
Short Code
Program pada CodeVisionAVR
#include <mega8.h>
// I2C Bus functions
#asm
.equ
__i2c_port=0x15 ;PORTC
.equ __sda_bit=4
.equ __scl_bit=5
#endasm
#include <i2c.h>
// DS1621 Thermometer/Thermostat functions
#include <ds1621.h>
// Alphanumeric LCD Module functions
#include <alcd.h>
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
unsigned char lcd[16];
unsigned char data[16];
float suhu[2];
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out
Func2=Out
Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1
State1=1
State0=1
PORTB=0xFF;
DDRB=0xFF;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// 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=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock // Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// I2C Bus initialization
i2c_init();
// DS1621 Thermometer/Thermostat initialization
// tlow: 50°C
// thigh: 55°C
// Tout polarity: 0
ds1621_init(0,50,55,0);
ds1621_init(1,50,55,0);
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD
menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 3
// D5 - PORTB Bit 4
// D6 - PORTB Bit 5
// D7 - PORTB Bit 6
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your
code here
suhu[0] =
ds1621_temperature_10(0);
suhu[1] =
ds1621_temperature_10(1);
sprintf(lcd,"Suhu 1 = %0.0f%cC",suhu[0]/10,0XDF);
lcd_gotoxy(0,0);
lcd_puts(lcd);
sprintf(lcd,"Suhu 2 = %0.0f%cC",suhu[1]/10,0XDF);
lcd_gotoxy(0,1);
lcd_puts(lcd);
sprintf(data,"#%0.0f#%0.0f#",suhu[0]/10,suhu[1]/10);
puts(data);
putchar(13);
putchar(10);
delay_ms(500);
}
}
Program pada Delphi
unit Utermometer;
interface
uses
Windows, Messages,
SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, Menus,
CPort, StdCtrls, CPortCtl, XPMan, TeEngine, Series,
ExtCtrls, TeeProcs,
Chart, ComCtrls, LPControl,
SLControlCollection,
LPControlDrawLayers,
LPTransparentControl, ULBasicControl,StrUtils,
ILAnalogInstrument,
ILAngularGauge,
ILThermometer,
ILProgressBar, ILSegmentIndicator, ILSegmentGauge,
ILGlassPanel,
ILMatrixDisplay, ILSegmentClock, ILLed;
type
TForm1 =
class(TForm)
main1: TMainMenu;
S1: TMenuItem;
SetingSerial1:
TMenuItem;
Connect1:
TMenuItem;
Disconnect1:
TMenuItem;
ComPort1:
TComPort;
APLIKASI1:
TMenuItem;
Close1: TMenuItem;
mmo1: TMemo;
ClearScreen1:
TMenuItem;
tmr1: TTimer;
xpmnfst1:
TXPManifest;
Clear: TButton;
ilglspnl1:
TILGlassPanel;
ilnglrg1:
TILAngularGauge;
ilnglrg2:
TILAngularGauge;
ilsgmntg1:
TILSegmentGauge;
ilsgmntg2:
TILSegmentGauge;
pnl1: TPanel;
btn1: TButton;
btn2: TButton;
grp2: TGroupBox;
lblSerial: TLabel;
comled1: TComLed;
mmo2: TMemo;
lbl3: TLabel;
lbl4: TLabel;
lbl1: TLabel;
procedure
SetingSerial1Click(Sender: TObject);
procedure
Close1Click(Sender: TObject);
procedure
Connect1Click(Sender: TObject);
procedure
Disconnect1Click(Sender: TObject);
procedure
FormCreate(Sender: TObject);
procedure
ComPort1RxChar(Sender: TObject; Count: Integer);
procedure
ClearScreen1Click(Sender: TObject);
procedure
ClearClick(Sender: TObject);
procedure
btn1Click(Sender: TObject);
procedure
btn2Click(Sender: TObject);
procedure
btn5Click(Sender: TObject);
procedure
mmo1Change(Sender: TObject);
private
{ Private
declarations } public
{ Public
declarations }
end;
var
Form1: TForm1;
buffer: String ;
time:string ;
sudut : Integer;
speed : Integer;
datasend : string ;
suhu1 : Integer ;
suhu2 : Integer;
//indek:Integer;
//rxdata: Integer;
implementation
{$R *.dfm}
procedure TForm1.SetingSerial1Click(Sender: TObject);
begin
ComPort1.ShowSetupDialog ;
end;
procedure TForm1.Close1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Connect1Click(Sender: TObject);
begin
ComPort1.Open ;
btn1.Enabled:=False;
btn2.Enabled:=True;
Connect1.Enabled:=False;
Disconnect1.Enabled:=True ;
SetingSerial1.Enabled:=False;
Close1.Enabled:=False;
end;
procedure TForm1.Disconnect1Click(Sender: TObject);
begin
ComPort1.Close ;
btn1.Enabled:=True;
btn2.Enabled:=False;
Connect1.Enabled:=True ;
Disconnect1.Enabled:=False ;
SetingSerial1.Enabled:=True;
Close1.Enabled:=True;
mmo1.Clear;
ilnglrg1.Value:=0;
ilnglrg2.Value:=0;
ilsgmntg1.Value:=0;
ilsgmntg2.Value:=0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
mmo1.Clear;
mmo2.Clear;
Disconnect1.Enabled:=False ;
btn2.Enabled:=False;
ilnglrg1.Value:=0;
ilnglrg2.Value:=0;
ilsgmntg1.Value:=0;
ilsgmntg2.Value:=0;
end;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count:
Integer);
begin
ComPort1.ReadStr(buffer,Count);
mmo1.Text:=mmo1.Text
+ buffer;
end;
procedure TForm1.ClearScreen1Click(Sender: TObject);
begin
mmo1.Clear;
end;
procedure TForm1.ClearClick(Sender: TObject);
begin
mmo1.Clear;
mmo2.Clear;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
ComPort1.Open ;
btn1.Enabled:=False;
btn2.Enabled:=True;
Connect1.Enabled:=False;
Disconnect1.Enabled:=True;
SetingSerial1.Enabled:=False;
Close1.Enabled:=False;
lblSerial.Caption:=
'Connected';
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
ComPort1.Close ;
btn1.Enabled:=True;
btn2.Enabled:=False;
Connect1.Enabled:=True;
Disconnect1.Enabled:=False;
SetingSerial1.Enabled:=True;
Close1.Enabled:=True;
lblSerial.Caption:='Disconnected'
;
mmo1.Clear;
mmo2.Clear;
ilnglrg1.Value:=0;
ilnglrg2.Value:=0;
ilsgmntg1.Value:=0;
ilsgmntg2.Value:=0;
end;
procedure TForm1.btn5Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.mmo1Change(Sender: TObject);
var
indek1,indek2,indek3 : Integer ;
data1,data2 :string
;
begin
indek1:=
Pos('#',mmo1.Text);
indek2:=
PosEx('#',mmo1.Text,indek1+1);
indek3:=
PosEx('#',mmo1.Text,indek2+1);
if (indek1 > 0)
and (indek2 > 0) then
begin
data1:=
MidStr(mmo1.Text,indek1+1,indek2-2);
suhu2:=
StrToInt(data1);
ilnglrg1.Value:=suhu2;
ilsgmntg1.Value:=suhu2;
end;
if (indek2 >
0)and (indek3 > 0) then
begin
data2:=
MidStr(mmo1.Text,indek1+indek2,indek3-indek1-indek2);
suhu2:=
StrToInt(data2);
ilnglrg2.Value:=suhu2;
ilsgmntg2.Value:=suhu2;
end;
mmo2.Text:=mmo2.Text
+ data1;
mmo2.Text:=mmo2.Text
+ data2;
end;
end.
Cara kerja
Alat ini akan membaca suhu yang ada di sensor DS 1621 dan
akan menampilkan
di monitor komputer dengan hasil yang dibaca oleh
sensor.Dengan menggunakan
komunikasi serial antara alat dengan sistem dapat
dihubungkan dengan memakai port
com yang ada.Untuk tombol CONNECT untuk menghidupkan sistem
dan akan
menampilkannya ke layar monitor dengan ada 2 pembacaan data
yaitu data serial dan
data parsing.untuk data serial sendiri adalah data yang belum diolah dan masih dalam
bentuk string sedangkan data parsing adalah data yang sudah
diolah atau dikonversi
dalam bentuk desimal.untuk tombol DISCONNECT berfungsi untuk
mematikan sistem.
Perancangan sistem ini bisa berfungsi untuk monitoring suatu
suhu tanpa harus
terkendala oleh jarak karena alat ini dapat mengirimkan data
suhu melalui interface dari
sistem ke monitor.