La practica consisteix en dissenyar un simulador per obrir una porta, posant una contrasenya en una teclat.
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.

https://www.prometec.net/control-acceso-clave/
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.
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.
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 } }


El mar.
Havaneres.
Lloret antic.
Lloret avui.
De cala Morisca a Sa Carabera.
De Sa Carabera a Treumal.
Lloret en kayak.
Vígilancia remota.
Caixa-tpv.
Cambrer-app.
Client webApp.
Relats del banc del si no fos
Històries d'ahir
Vídeos antics de Lloret
El caiac
Contes de l'avi.
Control d’accés amb contrasenya.
Orgue de llums.
Comparativa de editors Arduino.
Projecte bon Nadal.
Control de la qualitat del aire interior (CO2) amb semàfor LED.
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 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.
La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega.
ESP32-CAM
ESP32-CAM captura fotos per ser vistes en la WEB.
Pujar fotos a un servidor FTP amb ESP32-CAM.
MicroPython en ESP8266.
Visual Estudio Code per Arduino.
Classificador d’imatges.
Instal·lar i configurar Apache en Ubuntu.
Accés a un servidor Linux remotament.
Client i Servidor FTP.
Màquina virtual UBUNTU.
WindowsXP en Virtualbox.
Multisim, simulador de circuits electrònics.
Proteus, simulador de circuits electrònics.
MySQL. Instal·lació.
MySQL. Aplicacions.
Netbeans Maven MySQL.
Java+Netbeans+Maven+EclipseLink+Mysql
Aplicació d’escriptori JavaFX
App JavaFX amb SceneBuilder
App Java-Swing

Imatges gràcies a IngenieriaInfinita.




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