Nota

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

Perché unirti?

  • Supporto esperto: Risolvi i problemi post-vendita e le 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 agli annunci di nuovi prodotti e alle anteprime.

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

  • Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.

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

3.1.8 Serratura a combinazione

Introduzione

In questo progetto, utilizzeremo una tastiera e un LCD per creare una serratura a combinazione. L’LCD visualizzerà un messaggio che ti inviterà a digitare la tua password sulla tastiera. Se la password viene inserita correttamente, verrà visualizzato «CORRECT».

Sulla base di questo progetto, possiamo aggiungere ulteriori componenti elettronici, come cicalini, LED e così via, per creare diversi effetti sperimentali durante l’inserimento della password.

Componenti necessari

In questo progetto, abbiamo 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 acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK PER L’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

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/image262.png

Passo 2: Vai alla 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

Quando il codice viene eseguito, usa la tastiera per inserire la password corretta: 1984. Se su LCD1602 compare «CORRECT», la password è stata inserita correttamente; in caso contrario, comparirà «WRONG KEY».

Nota

  • Se compare il messaggio di errore wiringPi.h: No such file or directory, consulta Installazione e verifica di WiringPi.

  • Se compare l’errore Unable to open I2C device: No such file or directory, consulta Configurazione I²C per abilitare I2C e controllare se il cablaggio è corretto.

  • Se il codice e il cablaggio sono corretti ma l’LCD non visualizza alcun contenuto, puoi regolare 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, una matrice KEYS con i valori dei tasti della tastiera, e un 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);

Questa è la dichiarazione delle sottofunzioni del codice per la tastiera a matrice, fai riferimento a 2.1.8 Tastierino 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[]);

Questa è la 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");
                        }
                ...

Legge il valore dei tasti e lo memorizza nell’array di test testword. Se il numero di valori dei tasti memorizzati supera i 4, viene automaticamente verificata la correttezza della password 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 è corretta e 0 se non lo è.

Immagine del fenomeno

../_images/image263.jpeg