Se afișează postările cu eticheta afisaj alfanumeric. Afișați toate postările
Se afișează postările cu eticheta afisaj alfanumeric. Afișați toate postările

vineri, 10 octombrie 2025

Ceas RTC cu caractere mari si termometru pe afisaj LCD2004

     Dupa ce am testat suficient ceasul RTC cu caractere mari si date meteo pe afisaj LCD2004 am inlocuit cei 2 senzori DHT22 cu un senzor DS18B20 doarece este mai precis (si pot adapta usor montajul si programul sa fac un termostat).

    

Schema (pe care o s-o adaug mai tarziu) are conexiunile intre placa Arduino si componente astfel:

- cu afisajul prin interfata i2c: SDA la A4 si SCL la A5 (detalii despre asta in articolele Wire si Interface an I2C LCD with Arduino)

- encoder KY-040 cu CLK la D2, DT la D3, SW la D4 (detalii in articolul wokwi-ky-040 Rotary Encoder Reference).

- senzorul DS18B20 este conectat la pinul D6 (detalii in articolul Guide for DS18B20 Temperature Sensor with Arduino)

 Schema se poate creea si dupa declararilor pinilor din programul big_font_clock_thermometer_v3b.ino.

   Am facut 2 filmulete:

- ceas RTC cu caractere mari si termometru (1)

- RTC clock with big characters and thermometer (1)

   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:
- anul
- luna
- zi
- ora
- minutele
- secundele (pana acum erau implicit 0)
Acest program este big_font_clock_thermometer_v4.ino si am testat sa vad cum arata temperaturile negative si pozitive:
- sub -10∘C
- negative dar intre -10..0∘C
- pozitive intre 0..+10∘C
- pozitive, dar peste +10∘C
   Pentru a fi mai clar cum sunt prezentate informatiile, am facut niste filmulete



marți, 23 octombrie 2018

Ceas matriceal cu alarma, termometru si higrometru (3)

english version

articolul initial


    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
- temperaturi negative sub -10 grade Celsius
restul afisarilor sunt normale:
- ceas
- umiditate relativa
   In filmuletele
- ceas matriceal cu alarma, termometru si higrometru (3)
- matrix mini clock with alarm, thermometer and hygrometer (3)
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)
- matrix mini clock with alarm, thermometer and hygrometer (3a)
PS: sketch-ul este mini_clock_1_3_c.ino !

luni, 13 octombrie 2014

Identificare radio (RFID)

   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:
   Pentru experimente, am testat doua librarii: intai libraria MRFC522 si, apoi libraria L26_Arduino.
   Schema de conectare dintre placa Arduino si receptorul RFID este simpla, iar alimentarea de face de la 3,3V:
   Dupa incarcarea diverselor sketch-uri, am obtinut:
 
 
 

   Am facut mici modificari ale unuia din sketch-urile incluse in librarie, in sensul de a identifica una din cartele:
   Sketch-ul modificat de mine este:
// 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 ;D

void setup(){

    Serial.begin(9600);
    SPI.begin();
    rfid.init();
}

void loop(){
    
    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:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); // or 0x27

// 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 ;D

void setup(){

    Serial.begin(9600);
    SPI.begin();
    rfid.init();
    
    lcd.init(); 
    lcd.backlight(); //enciende la iluminacion
    lcd.setCursor(2, 0);
    lcd.print("RFID control");
    lcd.setCursor(3, 1);
    lcd.print("by niq_ro");
    delay(2000);
    

}

void loop(){
    
    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("                ");

}

   Am realizat si pentru aceasta varianta un filmulet numit RFID-RC522, Arduino si afisaj LCD1602 pe 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 pins
LiquidCrystal 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 ;D

void setup(){

    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);
}

void loop(){
    
    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 pins
LiquidCrystal 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 ;D

int releu = 8;  // relay is at D8


void setup(){

    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    
    
}

void loop(){
    
    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 ON
            delay(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 ON
            delay(10000); //
            }
        }
    }
    rfid.halt();

delay(500);
    lcd.setCursor(0, 1);
    lcd.print("                ");
  digitalWrite(releu, LOW);  // relay is OFF
}
   Filmuletul facut de Gzregorz este: