s pengontrollan kecepatan tetes infus dengan ATMEGA8535 Bag II ~ MIKROKONTROLLER AVR

Selasa, 09 April 2013

pengontrollan kecepatan tetes infus dengan ATMEGA8535 Bag II

Assalamu'alaikum...
Hi teman2, hari ini saya akan memaparkan bagaimana kelanjutan cara membuat alat pengontrollan kecepatan tetes infus,.
Alat ini sudah saya buat pada tahun 2010. yah sudah lama sih...
Alat ini akan bekerja seperti berikut...
Ketika kita tekan angka 3 pada keypad, maka kecepatan tetes infus akan menjadi 3 tetes/detik. system yang di buat ini akan terus mempertahankan agar kecepatan tetes infus sesuai dengan angka yang kita tekan di keypad. Sebagai pengongtrol kecepatan tetes infusnya, saya gunakan motor stepper untuk menutup dan membuka selang infus, cara kerjanya adalah membengkokkan selang infus.
Ketika air infus habis, maka buzzer akan berbunyi...
heheh sederhana kan.... ops... hampir lupa,.. Untuk membaca tetes infus, saya gunakan transistor photo dan infrared super...
Yuk kita lihat rangkainnya di bawah ini:


Programnya adalah sebagai berikut:
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
#define ir PIND.7

unsigned char keypad();
void baca_keypad(void);
unsigned char data;
void baca_tetes(void);
void kiri (void);
void kanan (void);
void buzer (void);

int data1,ulang;
long int hitung;

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

PORTA=0xff;
DDRA=0x0F;
PORTB = 0X03;
DDRB = 0X8F; 
PORTD.7 = 1;
DDRD.7 = 0;

// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("test keypad");
ulang =0;
while (1)
      {
      // Place your code here
      baca_keypad(); 
      if ( data1 == 1 ) kiri();
      if ( data1 == 2 ) kanan();
      if (data1 == 3 ) baca_tetes();          
      };
}
flash unsigned char keypad()
{
    PORTA = 0b11111110;               //aktifkan baris1 (memberi logika 0 ke baris1)
    delay_ms(10);
    if(PINA.7==0) return (10);
    if(PINA.6==0) return (11);
    if(PINA.5==0) return (12);
    if(PINA.4==0) return (13);
    //========================
    PORTA = 0b11111101;               //aktifkan baris2
    delay_ms(10);    
    if(PINA.7==0) return (3);
    if(PINA.6==0) return (6);
    if(PINA.5==0) return (9);
    if(PINA.4==0) return (15);
    //========================
    PORTA = 0b11111011;               //aktifkan baris3
    delay_ms(10);    
    if(PINA.7==0) return (2);
    if(PINA.6==0) return (5);
    if(PINA.5==0) return (8);
    if(PINA.4==0) return (0);
    //========================
    PORTA = 0b11110111;               //aktifkan baris4
    delay_ms(10);    
    if(PINA.7==0) return (1);
    if(PINA.6==0) return (4);
    if(PINA.5==0) return (7);
    if(PINA.4==0) return (14);
}

void baca_keypad(void)
{
    unsigned char buf[16];   
      data = keypad();
      if ( data != 0)
      {
      buzer();
      data1 = data; 
      sprintf(buf,"%-i",data1);
      lcd_gotoxy(14,1);
      lcd_puts(buf);
      }       
}
      
void kiri (void)
{
    PORTB = 0X01; delay_ms(5);
    PORTB = 0X03; delay_ms(5);
    PORTB = 0X02; delay_ms(5);
    PORTB = 0X06; delay_ms(5);
    PORTB = 0X04; delay_ms(5);
    PORTB = 0X0C; delay_ms(5);
    PORTB = 0X08; delay_ms(5);
    PORTB = 0X09; delay_ms(5);
    PORTB = 0X01; delay_ms(5);
}

void kanan (void)
{
   PORTB = 0X01; delay_ms(5);
   PORTB = 0X09; delay_ms(5);
   PORTB = 0X08; delay_ms(5);
   PORTB = 0X0C; delay_ms(5);
   PORTB = 0X04; delay_ms(5);
   PORTB = 0X06; delay_ms(5);
   PORTB = 0X02; delay_ms(5);
   PORTB = 0X03; delay_ms(5);
   PORTB = 0X01; delay_ms(5);
}

void buzer (void)
{
 PORTB.7 = 1;
 delay_ms(100);
 PORTB.7 = 0;
 }

void baca_tetes(void)
{
int i;
unsigned char buf[16];

 for ( i = 0; i <= 200; i++)
      {
      
            if (ir == 1 && ulang ==0)
            {
             ulang = 1;
             hitung ++;
            }
            if ( ir == 0)ulang = 0;
            delay_ms(5);      
       } 
       sprintf(buf,"data: %-i Tts/S",hitung);
       lcd_gotoxy(0,1);
       lcd_puts(buf);
       hitung = 0;  


Silahkan kembangkan ya system ini;
Semoga Bermanfaat.....

                




3 komentar:

mas saya irfan mau tanya2 tntng avr di email mna y?mhon bntuanx,thx bgt

bisa langsung di fan facebook saya...
"mikrokontroller dan pemrograman"

MAS bisa bantuan membuat waterpass digital gak memakai accelerometer.

Posting Komentar

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites