Minggu, 24 April 2016

pengunci pintu otomatis menggunakan RFID





pada pertemuan kali ini kita membahas tentang RFID dan magnetic door lock





RFID (Radio Frequency Indentification)

RFID adalah proses identifikasi frekuensi gelombang radio. RFID menggunakan frekuensi radio  untuk  membaca  informasi  dari  sebuah  alat yang disebut RFID Tag Card.
RFID  merupakan  teknologi  identifikasi  yang fleksibel,   mudah   digunakan   dan   sangat   cocok untuk oprasi otomatis. RFID mengkombinasikan keunggulan yang tidak tersedia pada teknologi identifikasi   yang   lain.   RFID   dapat   disediakan dalam  alat  yang hanya  dapat  dibaca  saja ( Read Only ) atau dibaca dan ditulis ( Read/Write ), tidak memerlukan kontak langsung maupun jalur cahaya untuk   dapat   beroprasi,   dapat   berfungsi   pada berbagai variasi kondisi lingkungan, dan menyediakan tingkat integrasi data yang tinggi.
Secara umum RFID terdiri dari empat bagian, yaitu:
1.   RFID Reader
Alat yang kompatibel dengan Tag Card RFID yang berkomunikasi secara wireless dengan Tad Card.
2.   RFID Tag Card
Alat yang menyimpan informasi untuk identifikasi obyek.RFID Tag Card juga sering disebut transponder.
3.   Antena
Alat   untuk   mentransmisikan   sinyal   RF
antara RFID Reader dengan RFID Tag Card.
4.   Software aplikasi
Untuk memproses  dan menampilkan  data yang dimiliki suatu RFID Tag Card yang telah dibaca oleh RFID Reader pada sebuah alat seperti misalnya sebuah LCD.




Magnetic Switch


        Prinsip kunci magnetik digital adalah penggunaan elektromagnetis untuk mengunci pintu ketika ia memiliki energi. Kekuatan untuk memegang harus kolinear dengan beban, dan kunci dan pelat angker harus saling berhadapan untuk mencapai operasi yang optimal. Kunci magnetik bergantung pada beberapa konsep dasar elektromagnetisme. Pada dasarnya elektromagnet akan menarik konduktor dengan kekuatan cukup besar untuk mencegah pintu terbuka.


untuk source code nya menggunakan avr studio

********************************************************
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
#include "utils.h"
#include "spi.h"
#include "mfrc522.h"

#define BLUE     2
#define WHITE     3

void gate_action();



uint8_t SelfTestBuffer[64];

int main()
{
    uint8_t byte;
    uint8_t str[MAX_LEN];
    uint8_t person_recognised = 0;
    uint8_t Blue[5]  ={0xCD,0x4B,0x16,0xCB,0x58};
    uint8_t White[5] ={0xD0,0xD1,0x6F,0x85,0xEB};
//    _delay_ms(50);
    LCDInit(LS_BLINK);
    LCDWriteStringXY(2,0,"RFID Reader");
    LCDWriteStringXY(5,1,VERSION_STR);

    DDRD = 0x00;
   
   
    spi_init();
    _delay_ms(1000);
    LCDClear();
   
    //init reader
    mfrc522_init();
   
    //check version of the reader
    byte = mfrc522_read(VersionReg);
    if(byte == 0x92)
    {
        LCDWriteStringXY(2,0,"MIFARE RC522v2");
        LCDWriteStringXY(4,1,"Detected");
    }else if(byte == 0x91 || byte==0x90)
    {
        LCDWriteStringXY(2,0,"MIFARE RC522v1");
        LCDWriteStringXY(4,1,"Detected");
    }else
    {
        LCDWriteStringXY(0,0,"No reader found");
    }
   
    byte = mfrc522_read(ComIEnReg);
    mfrc522_write(ComIEnReg,byte|0x20);
    byte = mfrc522_read(DivIEnReg);
    mfrc522_write(DivIEnReg,byte|0x80);
   
    _delay_ms(1500);
    LCDClear();
   
    while(1){
    LCDClear();
        LCDWriteStringXY(1,0,"Show Your Card");
        byte = mfrc522_request(PICC_REQALL,str);
       
        if(byte == CARD_FOUND)
        {
            byte = mfrc522_get_card_serial(str);
            if(byte == CARD_FOUND)
            {
                person_recognised = 1;
                for(byte=0;byte<5;byte++)
                {
                    if(Blue[byte] != str[byte])
                        break;
                }
                if(byte == 5)
                    person_recognised = BLUE;
                else
                {
                    for(byte=0;byte<5;byte++)
                    {
                        if(White[byte] != str[byte])
                            break;
                    }
                    if(byte == 5)
                        person_recognised = WHITE;
                }
                switch(person_recognised)
                {
                    case BLUE :
                    {
                        LCDClear();
                        LCDWriteStringXY(3,0,"Hello Blue");                       
                    //    gate_action();
                        break;
                    }
                    case WHITE :
                    {
                        LCDClear();
                        LCDWriteStringXY(3,0," White");
                        LCDWriteStringXY(0,1,"Not Recognised !");
                        gate_action();
                        break;
                    }
                    default :
                    {
                        LCDClear();
                        LCDWriteStringXY(0,0,"Not Recognised !");
                        break;
                    }
                }
            }
            else
            {
                LCDClear();
                LCDWriteStringXY(5,0,"Error");
            }
        }
    }
}

void gate_action()
{
    LCDClear();
    LCDWriteStringXY(0,1,"Opening Gate ...");
    PORTD = 0x01;
    _delay_ms(15000);

//    LCDClear();
//    LCDWriteStringXY(0,1,"Closing Gate ...");
//    PORTD = 0x00;
   

}







cara menampilkan ADC pada line follower

Tutorial menampilkan ADC pada line follower menggunakan 14 sensor

berikut source codenya:
*****************************************************************************
#include <mega16.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7;                                                    
int sa1,sa2,sa3,sa4,sa5,sa6,sa7,sb1,sb2,sb3,sb4,sb5,sb6,sb7;

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



#define ADC_VREF_TYPE 0x20  

#define ADC_VREF_TYPE 0x20  

// 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 & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

karena di sini menggunakan 14 sensor dan micro controller yang kita gunakan hanya ada 8 pin ADC, maka kita buat swicth menggunakan PIN 6 dan 7 pada PORTC bergantian.


void baca_adc(){

//sensor a
   PORTC.6=0;
   PORTC.7=1;
 
   a1=read_adc(1);
   a2=read_adc(2);
   a3=read_adc(3);
   a4=read_adc(4);
   a5=read_adc(5);
   a6=read_adc(6);
   a7=read_adc(7);
   delay_ms(100);
 
// sensor b
   PORTC.7=0;
   PORTC.6=1;
   
   b1=read_adc(1);
   b2=read_adc(2);
   b3=read_adc(3);
   b4=read_adc(4);
   b5=read_adc(5);
   b6=read_adc(6);
   b7=read_adc(7);
   delay_ms(100);
}

void tampil_adc(){
    baca_adc();
 
    lcd_clear();    
    lcd_gotoxy(0,0);
    sprintf(dt,"%3d %3d %3d %3d",a1,a2,a3,a4);
    lcd_puts(dt);            
    lcd_gotoxy(0,1);
    sprintf(dt,"%3d %3d %3d",a5,a6,a7);
    lcd_puts(dt);            
 
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(dt,"%3d %3d %3d %3d",b1,b2,b3,b4);
    lcd_puts(dt);
    lcd_gotoxy(0,1);
    sprintf(dt,"%3d %3d %3d",b5,b6,b7);
    lcd_puts(dt);
}        

void main(void)
{

// 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=0x00;
DDRA=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

while (1)
      {
      // Place your code here
      tampil_adc();
      };
}


semoga bermanfaat !!