×

ARDUINO

Control d’accés amb contrasenya. Orgue de llums. Comparativa de editors Arduino. Projecte bon Nadal. Sensor de gas i de fums. Control de la qualitat del aire interior (CO2) amb semàfor LED.

NodeMCU

NodeMCU-ThingSpeak. ThingSpeak. NodeMCU com AccessPoint. Control de la llum de casa per web. Control de un led per el mòbil. Sistema de fitxers en ESP8266. Altura del nivell d'aigua. Avis d’alarma a Telegram. Control de la llum de casa des de Telegram. Control de la intensitat de llum de un LED per Internet. Magatzematge de temperatura i humitat en Thinger. Publicar temperatura i humitat en Google Sheets. ESP8266 i Firebase. ESP8266-BME280 Firebase. La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega..

ESP32

ESP32-CAM, exemple de prova. Esp32-Cam captura fotos per ser vistes en la WEB. Pujar fotos a un servidor FTP amb ESP32-CAM. Foto amb ESP32-CAM i Telegram. Alarma amb avis a Telegram, utilitzant la placa ESP32-CAM.

PROGRAMACIÓ

Matemàtiques. App Inventor tutorial. MicroPython en ESP8266. Visual Estudio Code per Arduino

Intel·ligència artificial

Classificador d’imatges.

SERVIDORS

Instal·lar i configurar Apache en Ubuntu. Accés a un servidor Linux remotament. Client i Servidor FTP.

MÀQUINES VIRTUALS

Màquina virtual UBUNTU. WindowsXP en Virtualbox.

ELECTRÒNICA

Simulador Multisim. Simulador Proteus.

BASE DE DADES

MySQL. Instal·lació. MySQL. Aplicacions.

JAVA

Netbeans Maven MySQL. Java+Netbeans+Maven+EclipseLink+MySQL Aplicació d’escriptori JavaFX App JavaFX amb SceneBuilder App Java-Swing
favicon
logo

Tresavis

Benvinguts al blog de tresavis de noves tecnologies i més.

Correu : tresavis3@gmail.com

facebook   Instagram   youtube   x   tiktok

☰ Pràctiques   ☰ Articles

Descripció:

La practica consisteix en dissenyar un simulador per obrir una porta, posant una contrasenya en una teclat.

Componets:

Arduino UNO.

Teclat matricial 4x4.

Display LCD 16x2.

LCM 1602, per simplificar la connexió del Display LCD.

1 resistència de 100 Ohms per el Buzzer.

2 resistències de 330 Ohms per els Leds.

Un Led vermell i un altre verd.

Protoboard.

Buzzer passiu.

Font de alimentació externa de 5 V.

IDE de Arduino.

Esquema elèctric:

esquema

Bibliografia:

https://www.prometec.net/control-acceso-clave/

Possibles aplicacions.

La practica actual pot servir en un futur per un projecte mes complexa, activar – desactivar un alarma. En el muntatge es tindria que treballar amb sensors PIR, sensors magnètics, sirenes, etc. Complicant molt mes la practica que desenvolupem seguidament.

Hardware.

Controlem el Display LCD amb el convertidor I2C, per nomes utilitzar 2 pins del Arduino per el seu control. Tenim que alimentar el display amb una font externa de 5 V, per no sobrecarregar el Arduino.

Per introduir la contrasenya fem servir un teclat matricial de 4x4.

Fem servir la tecla # per encendre i apagar el display LCD.

La tecla * la utilitzem per esborrar la pantalla.

Un Led vermell per indicar que el sistema esta tancat i un Led verd per quan el sistema esta obert.

Buzzer per fer sons al polsar les tecles i també per indicar si la contrasenya es correcta o no.

Font d’alimentació: En el esquema elèctric hi ha 2 cables d’alimentació, el port USB que alimenta el Arduino i les bateries de 6 V que alimenten el Display. Nosaltres fem servir una pila de 9 V per alimentar tot el conjunt.

Pins de connexió amb Arduino.

esquema

Codi.

Control-acces.ino

#include <Keypad.h>
#include <LiquidCrystal_I2C.h> //llibreira de Fran Brabender
#include <Wire.h>

//display LCD
//mirar la adressa de memoria previament amb el programa i2c_scanner  
LiquidCrystal_I2C lcd(0x3f,16,2); 

//teclat
const byte Files = 4;     //Cuatre files
const byte Cols = 4;    //Cuatro columnes

byte Pins_Files[] = {9,8,7,6};   //Pins Arduino per les files.
byte Pins_Cols[] = {5,4,3,2};   // Pins Arduino per les columnes.
//no utilitzar els pins 1 y 0 pwe no interferir en Rx y Tx

//matriu que representa el teclat
char Tecles [ Files ][ Cols ] = 
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
char codiSecret[4] = {'2','2','5','5'}; // Aqui va el codi secret
// Per canviar el tamany de la contrasenya, es te que canviar el tamany del array

int posicio=0; // necesaria para la contrasenya
int cursor=5; // posicio inicial de la contrasenya en el LCD
int clau=0; // per el LCD
int llum=0;  // per el LCD
int temps=0;  // per el LCD
int ledVerd=11; // pin per el LED verd
int ledVermell=12;  // pin para el LED vermell
int buzzer=10;  // pin altaveu

Keypad teclat = Keypad(makeKeymap(Tecles), Pins_Files, Pins_Cols, Files, Cols);

void setup(){
Serial.begin(9600) ;
// inicialitzem el LCD.
lcd.init();
lcd.backlight(); //encenem el LCD
pinMode (ledVerd,OUTPUT);
pinMode (ledVermell, OUTPUT);
pinMode (buzzer, OUTPUT);
digitalWrite(ledVermell,HIGH);  // encenem el LED vermell
digitalWrite(ledVerd, LOW);  // apagem el verd

lcd.setCursor(0,0); //posem el cursor el la posició 0 de la linia 0.
lcd.print("Introduzca clave"); // escribim en LCD, ho posem en castellà
lcd.setCursor(cursor,1); // cursor en la posicio 5, linea 1
}

  
void loop(){
  
char pulsacio = teclat.getKey() ;  // llegim la pulsació
if (pulsacio != 0){  // Si el valor es 0 es que no se ha premut cap tecla

  if (pulsacio != '#' && pulsacio != '*' && clau==0){  // descartem almohadilla y asterisc  
      lcd.print(pulsacio);  // imprimim la tecla premuda
      cursor++;  // incrementam el cursor
      tone(buzzer,350);  // to de pulsació
      delay(200);
      noTone(buzzer);
      
    //--- Condicionals para comprovar la clau introduida -----------
    if (pulsacio == codiSecret[posicio]){ // comparem la entrada amb cada un del digits, un a un
        posicio ++;  // aumentem en un el contador de la posicio, si es correcta  
    }
        
    if (posicio == 4){ // comprovem que se han introduit els 4 correctament, tot OK     
        digitalWrite (13,HIGH);  // encenem el LED verd
        lcd.setCursor(0,0); // situem el cursor en la posición 0 de la linia 0.
        lcd.print("Clave correcta  "); // escribim en LCD, en castellà    
        delay(200); 
        // to de clau correcta, 3 tons diferents
        tone(buzzer,500);
        delay(100);
        noTone(buzzer);
        tone(buzzer,600);
        delay(100);
        noTone(buzzer);
        tone(buzzer,800);
        delay(100);
        noTone(buzzer);
        // cursor en la posicio 5, linia 1   
        lcd.setCursor(5,1); 
        clau=1;  // indiquem que se ha introduit la clau correcta
        digitalWrite(ledVermell,LOW);  // apagem el LED vermell
        digitalWrite(ledVerd, HIGH);  // encenem el verd 
          
      }
      //--- En el cas de clau incompleta o no correcta ----------   
      if(cursor>8){  // comprovem que no pasi de la cuarta posicio
        cursor=5;  // tornem a colocar el cursor al inici
         // borrem la clau introduida
        posicio=0;
        lcd.setCursor(5,1);
        lcd.print("       ");  // borrem la clau de la pantalla
        lcd.setCursor(5,1);
        if(clau==0){           // comprovam que no hem acertat
          tone(buzzer,70,500);  // per generar
          delay(250);           // to de error
          noTone(buzzer);
        }
      }
    
    }
  }
  //--- Condicionals per encendre o apagar el LCD --------------  
  if (pulsacio == '#' && llum==0){ // si tecla # i esta el display apagat
      lcd.backlight();  // encenem
      llum=1;  // indiquem que esta el display ences
      pulsacio =0; // borrem el valor per poder llegir el seguent condicional
  }
  if (pulsacio == '#' && llum==1){  //  comprovem tecla i estat
      lcd.noBacklight();  // apagem
      llum=0;  // indiquem que esta apagada
  }
  //---------------------------------------------------------------
  
  //--- Condicionals per resetejar clau introduida -------------  
  
  if (pulsacio == '*'){ // asterisc per resetejar el contador
        posicio = 0;
        cursor = 5;
        clau=0;
        lcd.setCursor(0,0); // cursor en la posició 0 de la linia 0.
        lcd.print("Introduzca clave"); // escribim en LCD      
        lcd.setCursor(5,1);
        lcd.print("      "); // borrem la pantalla
        lcd.setCursor(5,1);
        digitalWrite(ledVermell,HIGH);  // encenem el LED vermell
        digitalWrite(ledVerd, LOW);  // apagem el verd 
   }
}

Resultat final.

tancat
obert

Contingut.


Nosaltres

arcSanMarti

Els nostres jocs.

Imatges gràcies a IngenieriaInfinita.

jocs
jocs
jocs
jocs

"if at first you don't succeed try, try again"


Tags

Noves tecnologies WEB Arduino Domótica MycroPython NodeMCU IoT Java ESP8266 Lora C++ Programació Server-Client