maj 28, 2013 - Moduły    Komentowanie nie jest możliwe

Czytniki i pastylki DALLAS

Pastylki iButton firmy DALLAS to nic nowego na rynku, są to urządzenia pracujące na magistrali 1Wire.  Magistrala ta wykorzystywana jest dosyć często przez elektroników do transmisji z popularnym termometrem cyfrowym DS18B20, ale urządzeń na tej magistrali jest wiele. Firma DALLAS poza słynnymi termometrami DS18xxx produkuje pastylki iButton wśród których znajdziemy proste DS1990. Mogą one pracować jako klucz gdyż dysponują unikalnym kodem, ale też są pastylki zawierające termometr, pamięć i wiele innych. Zaletą pastylek jest łatwość użycia i fakt iż mogą być zasilane pasożytniczo dzięki czemu wystarczą 2 przewody  – MASA i DATA.

 W tym temacie skupimy się na najprostszych pastylkach DS1990R  w rozmiarze F5.

CZYLI:

DS1990R zawiera tylko unikalny kod – 64 bitowy ID , który możemy tylko odczytywać , ale świadomość  faktu iż kod ten jest unikalny (nigdy się nie powtarza) umożliwia nam stworzenie układu będącego np.  kodowym zamkiem lub alarmem uzbrajanym przy pomocy pastylki.

…:: DANE PASTYLKI DS1990R ::…

Wszystkie dane znajdziemy w nocie PDF pod adresem:

Tak więc do naszych niecnych celów użyjemy:  pastylki DALLAS DS1990R rozmiar F5

genericbutton_F51[1]

 Dedykowanego czytnika  DS9092L  zawierającego diodę sygnalizacyjną LED w kolorze zielonym

9092L1[1]

 Oraz dla wygody użycia oprawki na pastylkę tak zwany KEY FOB  DS9093A

9093abgry1[1]

 Potrzebna nam będzie też płytka Sunduino lub Arduino lub inny klon z mikrokontrolerem  AVR Przekaźnik na 12V  i tranzystor NPN np. 2N2222 lub BC547C  i parę rezystorów  1K i 4.7K. Z racji iż nasz czytnik posiada diodę LED użyjemy jej do sygnalizacji poprawności KLUCZA.

..::  PROGRAM ZAŁOŻENIA ::..

Założenie programu jest bardzo proste. Czytnik oczekuje na przyłożenie Pastylki po czym program sprawdza odczytany klucz z bazą danych. Po weryfikacji  oznajmia nam miganiem diody co 0,5s, że klucz jest prawidłowy i tym samym zezwala na dostęp uruchamiając przekaźnik lub miganiem szybkim co 150ms  informuje nas iż kod jest nieprawidłowy / nierozpoznany i tym samym nie zezwala na dostęp. W przykładzie użyjemy zakodowanych 8 pastylek zezwalających na dostęp dla 8 użytkowników.

…:: KOD PROGRAMU ::…

W programie użyta została biblioteka dla Arduino IDE  OneWire.h ułatwiająca korzystanie z magistrali 1Wire w środowisku ARDUINO IDE, która jest do pobrania w REPO-Duino wraz z plikiem PDE programu prezentowanego poniżej. Program dodatkowo wysyła na terminal komunikaty , które można wyświetlić na  Serial LCD  lub przerobić na wyświetlanie przez LCD zgodny z HD77480 :

#define BD_size 8  // liczba mozliwych do wkodowania pastylek ibutton

OneWire  ds(4);  // 1Wire na pinieD4

int permited =0;

byte id[8] = { 0, 0, 0, 0, 0, 0, 0, 0};

//TAblice gdzie zapisane sa ID pastylek Ibutton

byte allow[BD_size][8] = {{ 26, 0, 11, 2, 3, 4, 5, 0},      //klucz 1

{ 116, 166, 15, 7, 20, 3, 4, 10},  // 2

{ 1, 11, 5, 18, 17, 0, 0, 17},   // 3

{ 2, 59, 27, 12, 17, 0, 0, 23 }, // 4

{ 1, 19, 231, 13, 17, 0, 0, 21},  // 5

{ 1, 27, 29, 17, 17, 0, 0, 34 },  // 6

{ 1, 0, 80, 0, 12, 110, 60, 10},   // 7

{ 13, 60, 0, 0, 12, 2, 0, 0}};    // 8

void setup(void) {

Serial.begin(9600);

pinMode(2, OUTPUT);   //Przekaznik

pinMode(13, OUTPUT);   //Dioda czytnika

Serial.println(„Start systemu”);

}

void loop(void) {

if ( !ds.search(id)) {

ds.reset_search();

delay(500);

return;

}

//Pokazywanie odczytanego ID pastylki

Serial.print(„ID – „);

for( int i = 0; i < 8; i++) {

Serial.print(id[i], DEC);

Serial.print(” „);

}

Serial.println(” „);

//procedura odczytania pastylki i porównania z bazą zakodowanych kluczy

for(int k = 0; k < BD_size; k++) {

permited=0;

//DB – Porównanie czy pastylka jest własciwa

for( int i = 0; i < 8; i++) {

Serial.print(allow[k][i], DEC);

Serial.print(” „);

}

Serial.println(” „);

//Weryfikacja i porównanie

for(int b = 0; b < 8; b++) {

if(allow[k][b]==id[b]){

permited++;

}

}

if(permited==8){

open(k); //załaczenie przekaznika sterującego

permited=0;

for(int b = 0; b < 8; b++) {

id[b]=B0000000;}

break;

}

else if(k==BD_size-1) //nieznaleziono ID

closed();

}

}

//*************************   funkcje    ************************************

void open(int k){

digitalWrite(2, HIGH);

delay(300);              // a czekamy  na oklaski

digitalWrite(2, LOW);

Serial.print(„Dostep dozwolony, klucz: „);

Serial.println(k+1, DEC);

Serial.println(„”);

for(int i = 0; i < 3; i++) {   //wolne miganie diody w czytniku

digitalWrite(7, HIGH);   // dioda zaświecona

delay(500);              // czekamy 0,5min

digitalWrite(7, LOW);    // dioda zgaszona

delay(500);

}

}

void closed(){

Serial.println(„BRAK DOSTEPU!”);

Serial.println(„”);

for(int i = 0; i < 10; i++) { //szybkie miganie diody

digitalWrite(7, HIGH);   // dioda zaswiecona

delay(150);              // czekamy 150ms

digitalWrite(7, LOW);    // dioda zgaszona

delay(150);

}

}

Jak widać kod jest wyjątkowo prosty i dobrze skomentowany wiec nie potrzeba tu wielu wyjaśnień.

W razie pytań zapraszam do komentowania gdyż wyjaśnienia wymagać będą tablice gdzie są przypisane nasze klucze/pastylki DALLAS, bo jak napisałem kody ID pastylek się nie powtarzają więc należy tu przypisać własne pastylki inaczej program nie będzie działał prawidłowo. Oczywiście zdefiniować możemy dowolną ilość pastylek.

…::  Sprzętowo i schematycznie ::…

W zasadzie wszystkie połączenia jawnie wynikają z kodu programu gdzie :

  • Dioda LED jest podłączona przez rezystor 1K do pinu D7
  • Sygnał DATA czytnika jest podłączony przez rezystor 4,7K do VCC (+5V) oraz pinu D4  –  zasilanie pastylki poprzez linie danych
  • Tranzystor sterujący przekaźnikiem przez rezystor 1K do Pinu D2

Omówienia wymagają  piny we wtyczce  czytnika DS9092A  oraz początkującym mogące sprawić wiele problemów podłączenie przekaźnika do płytek XXXDuino dlatego schemat prezentuje się następująco:

zamekibutton1[1]

 LINKI:   01

Comments are closed.