Nota

Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme agli altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato ai nuovi annunci di prodotti e alle anteprime.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni festive e omaggi: Partecipa a omaggi e promozioni speciali durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

3.1.8 Serratura a Combinazione

Introduzione

In questo progetto, utilizzeremo un tastierino e un display LCD per realizzare una serratura a combinazione. Il display LCD visualizzerà un messaggio per guidarti nell’inserimento della password tramite il tastierino. Se la password viene inserita correttamente, verrà visualizzato «Corretto».

Sulla base di questo progetto, possiamo aggiungere ulteriori componenti elettronici, come un cicalino, LED e così via, per aggiungere diversi fenomeni sperimentali all’inserimento della password.

Componenti necessari

In questo progetto, avremo bisogno dei seguenti componenti.

../_images/list_Password_Lock.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistare i componenti separatamente dai link qui sotto.

INTRODUZIONE COMPONENTI

LINK DI ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

I2C LCD1602

ACQUISTA

Tastierino

-

Schema elettrico

T-Board Name

physical

wiringPi

BCM

GPIO18

Pin 12

1

18

GPIO23

Pin 16

4

23

GPIO24

Pin 18

5

24

GPIO25

Pin 22

6

25

GPIO17

Pin 11

0

17

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

SPIMOSI

Pin 19

12

10

SDA1

Pin 3

SCL1

Pin 5

../_images/Schematic_three_one9.png

Procedura sperimentale

Passo 1: Costruisci il circuito.

../_images/image262.png

Passo 2: Vai nella cartella del codice.

cd ~/raphael-kit/c/3.1.8/

Passo 3: Compila.

gcc 3.1.8_PasswordLock.cpp -lwiringPi

Passo 4: Esegui.

sudo ./a.out

Dopo l’esecuzione del codice, utilizza il tastierino per inserire la password corretta: 1984. Se sul display LCD1602 appare “CORRETTO”, la password è stata inserita correttamente; altrimenti, apparirà “CHIAVE ERRATA”.

Nota

  • Se appare un errore come wiringPi.h: Nessun file o directory, fai riferimento a Installa e Controlla wiringPi.

  • Se appare l’errore Impossibile aprire il dispositivo I2C: Nessun file o directory, devi fare riferimento a Configurazione I²C per abilitare I2C e controllare se il cablaggio è corretto.

  • Se il codice e il cablaggio sono corretti, ma l’LCD non mostra contenuti, puoi ruotare il potenziometro sul retro per aumentare il contrasto.

Spiegazione del codice

#define ROWS  4
#define COLS  4
#define BUTTON_NUM (ROWS * COLS)
#define LENS  4

unsigned char KEYS[BUTTON_NUM] {
'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'};

char password[LENS]={'1','9','8','4'};

Qui, definiamo la lunghezza della password LENS, la matrice che memorizza i valori dei tasti del tastierino KEYS e l’array che memorizza la password corretta.

void keyRead(unsigned char* result);
bool keyCompare(unsigned char* a, unsigned char* b);
void keyCopy(unsigned char* a, unsigned char* b);
void keyPrint(unsigned char* a);
void keyClear(unsigned char* a);
int keyIndexOf(const char value);

C’è una dichiarazione delle sottofunzioni del codice del tastierino a matrice, fai riferimento a 2.1.8 Tastiera di questo documento per maggiori dettagli.

void write_word(int data);
void send_command(int comm);
void send_data(int data);
void lcdInit();
void clear();
void write(int x, int y, char const data[]);

C’è una dichiarazione delle sottofunzioni del codice LCD1062, fai riferimento a 1.1.7 I2C LCD1602 di questo documento per maggiori dettagli.

while(1){
        keyRead(pressed_keys);
        bool comp = keyCompare(pressed_keys, last_key_pressed);
        ...
                testword[keyIndex]=pressed_keys[0];
                keyIndex++;
                if(keyIndex==LENS){
                    if(check()==0){
                        clear();
                        write(3, 0, "WRONG KEY!");
                        write(0, 1, "please try again");
                        }
                ...

Leggi il valore del tasto e memorizzalo nell’array di test testword. Se il numero di valori di tasti memorizzati supera 4, la correttezza della password viene verificata automaticamente, e i risultati della verifica vengono visualizzati sull’interfaccia LCD.

int check(){
    for(int i=0;i<LENS;i++){
        if(password[i]!=testword[i])
        {return 0;}
    }
    return 1;
}

Verifica la correttezza della password. Restituisce 1 se la password è stata inserita correttamente, e 0 se non lo è stata.

Foto del fenomeno

../_images/image263.jpeg