Am schimbat programul ca la o apasare scurta a butonului de la encoder sa am afisarea temperaturii cu caractere mari, dupa ce initial era ora cu caractere mari. La o noua apasare se schimba modul de afisare cu caractere mari: ceas, termometru, ceas, etc.
La apasarea lunga a butonului de pe encoder (mai mult de 3 secunde), se pot regla:
Dupa ce am pus ceasul la teste, am constatat ca modul de afisare la temperaturii este deranjant datorita literei C foarte mici, am rescris partea de afisare a acesteai, in sensul ca pentru temperaturi pozitive, mai mari de 10 grade Celsius, am scos semnul de plus, iar la cele sub -10 grade Celsius, care sunt extrem de rare in casa 😇 am lasat C-ul ingust.
Acum modurile de afisare ale temperaturii sunt:
- temperaturi mai mari de 10 grade Celsius
- temperaturi pozitive mai mici de 10 grade Celsius
- temperaturi negativa mai mari de -10 grade Celsius
se vede modul de afisare (timpul de afisare normal al ceasului e mai scurt, iar pentru temperatura si umiditate mai lung, decat la functionarea normala), dar am refacut filmarile si am si timpii normali;
- ceas matriceal cu alarma, termometru si higrometru (3a)
Sistemul de identificare este folosit de mult timp, el fiind foarte intalnit la sistemele de acces in scara blocurilor.
Pentru a face si eu teste cu placa Arduino, am achizitionat de pe ebay un pachet de identificare radio compus dintr-un receptor RFID-RC522, o cartela dreptunghiulara (tip card bancar) si una tip breloc pentru chei, care lucreaza pe frecventa de 13,56Mhz.
Conectarea receptorului RFID-RC522 cu placa de dezvoltare Arduino se face in modul SPI, de forma:
// https://github.com/beatname/L26_Arduino// http://nicuflorica.blogspot.com/// http://arduinotehniq.blogspot.com//** Read a card using a mfrc522 reader on your SPI interface* Pin layout should be as follows (on Arduino Uno):* MOSI: Pin 11 / ICSP-4* MISO: Pin 12 / ICSP-1* SCK: Pin 13 / ISCP-3* SS: Pin 10* RST: Pin 9*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int ics = 0; // number of card putting ;Dvoidsetup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
}
voidloop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[4],DEC);
Serial.println("");
Serial.println("---------");
if ((rfid.serNum[0]==36) && (rfid.serNum[1]==192)
&& (rfid.serNum[2]==166) && (rfid.serNum[3]==171)
&& (rfid.serNum[4]==233))
{Serial.println("NICUUUUU");
Serial.println("---------");
}
}
}
rfid.halt();
delay(500);
}
Am realizat un film cu un sketch putin modificat pentru a identifica cele 2 cartele, ca fiind cartela principala sau secundara; filmuletul se numeste RFID-RC522 si Arduino:
Am conectat un afisaj alfanumeric cu 16 coloane si 2 randuri prin intermediul unui adaptor i2c, dupa schema clasica:
Sketch-ul scris de mine, combina sketch-ul anterior, cu partea de afisaj LCD1602 cu interfata i2c:
Bineinteles, ca se pot aduce imbunatatiri, cum ar fi: electromagnet sau servomotor pentru deblocare yala usa, deblocare alarma apartament, sistem de pontare la servici, etc. Pentru a lega afisajul in modul clasic, schema devine:
iar sketch-ul va fi:
#include <Wire.h>//#include <LiquidCrystal_I2C.h>
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// https://github.com/LeadergDotCom/L26_Arduino - broken now
// https://github.com/beatname/L26_Arduino// http://nicuflorica.blogspot.com/// http://arduinotehniq.blogspot.com//** Read a card using a mfrc522 reader on your SPI interface* Pin layout should be as follows (on Arduino Uno):* MOSI: Pin 11 / ICSP-4* MISO: Pin 12 / ICSP-1* SCK: Pin 13 / ISCP-3* SS: Pin 10* RST: Pin 9*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int ics = 0; // number of card putting ;Dvoidsetup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
lcd.begin(16,2);
lcd.setCursor(2, 0);
lcd.print("RFID control");
lcd.setCursor(3, 1);
lcd.print("by niq_ro");
delay(2000);
}
voidloop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[4],DEC);
Serial.println("");
Serial.println("---------");
if ((rfid.serNum[0]==36) && (rfid.serNum[1]==192)
&& (rfid.serNum[2]==166) && (rfid.serNum[3]==171)
&& (rfid.serNum[4]==233))
{Serial.println("Salut Nicu!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie principala");
}
if ((rfid.serNum[0]==50) && (rfid.serNum[1]==160)
&& (rfid.serNum[2]==75) && (rfid.serNum[3]==181)
&& (rfid.serNum[4]==108))
{Serial.println("Salut Nicu! Ai cartela de rezerva!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie secundara ");
}
}
}
rfid.halt();
delay(500);
lcd.setCursor(0, 1);
lcd.print(" ");
}
17.10.2014 Pentru a putea face un sistem de acces pentru mai multe persoane, am mai cumparat chei de rezerva de pe ebay.
25.11.2014 Deoarece am avut o solicitare de la Gzregorz din Polonia pentru a modifica sketch-ul pentru a actiona un releu timp de 10 secunde, mi-am facut timp si a rezultat urmatorul sketch pentru a conecta un modul cu releu pe pinul D8:
// control acces by niq_ro with 10 second time acses
#include <Wire.h>
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// https://github.com/LeadergDotCom/L26_Arduino - broken now
// https://github.com/beatname/L26_Arduino// http://nicuflorica.blogspot.com/// http://arduinotehniq.blogspot.com//** Read a card using a mfrc522 reader on your SPI interface* Pin layout should be as follows (on Arduino Uno):* MOSI: Pin 11 / ICSP-4* MISO: Pin 12 / ICSP-1* SCK: Pin 13 / ISCP-3* SS: Pin 10* RST: Pin 9*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN,RST_PIN);
int serNum[5];
int ics = 0; // number of card putting ;Dint releu = 8; // relay is at D8voidsetup(){
Serial.begin(9600);
SPI.begin();
rfid.init();
lcd.begin(16,2);
lcd.setCursor(2, 0);
lcd.print("RFID control");
lcd.setCursor(3, 1);
lcd.print("by niq_ro");
delay(2000);
pinMode(releu, OUTPUT);
digitalWrite(releu, LOW); // relay is OFF
}
voidloop(){
if(rfid.isCard()){
ics = ics + 1;
if(rfid.readCardSerial()){
Serial.print("secventa ");
Serial.print(ics);
Serial.print(" si cod card = ");
Serial.print(rfid.serNum[0],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[1],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[2],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[3],DEC);
Serial.print(" ");
Serial.print(rfid.serNum[4],DEC);
Serial.println("");
Serial.println("---------");
if ((rfid.serNum[0]==36) && (rfid.serNum[1]==192)
&& (rfid.serNum[2]==166) && (rfid.serNum[3]==171)
&& (rfid.serNum[4]==233))
{Serial.println("Salut Nicu!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie principala");
digitalWrite(releu, HIGH); // relay is ONdelay(10000); //
}
if ((rfid.serNum[0]==50) && (rfid.serNum[1]==160)
&& (rfid.serNum[2]==75) && (rfid.serNum[3]==181)
&& (rfid.serNum[4]==108))
{Serial.println("Salut Nicu! Ai cartela de rezerva!");
Serial.println("---------");
lcd.setCursor(0, 1);
lcd.print("cheie secundara ");
digitalWrite(releu, HIGH); // relay is ONdelay(10000); //
}
}
}
rfid.halt();
delay(500);
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(releu, LOW); // relay is OFF
}