Arduino UNO R4 - LCD 20x4
Neste tutorial, vamos mostrar como usar um display LCD 20x4 com a placa Arduino UNO R4 por meio de uma interface I2C. Em detalhes, vamos aprender:
Or you can buy the following kits:
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Buy Note: Alternatively, you can assemble the LCD I2C display using LCD 2004 Display and PCF8574 I2C Adapter Module.
O LCD 20x4 I2C usa a interface I2C e tem 4 pinos:
Pino GND: conecte ao GND (0V).
Pino VCC: conecte ao VCC (5V) para alimentar o LCD.
Pino SDA: este é o sinal de dados I2C.
Pino SCL: este é o sinal de clock I2C.
O LCD I2C 20x4 tem 20 colunas e 4 linhas. As colunas e as linhas começam em 0.

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.
| LCD I2C | Arduino UNO R4, Nano | Arduino Mega |
| Vin | 5V | 5V |
| GND | GND | GND |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Usar o LCD é muito fácil com a biblioteca DIYables_LCD_I2C.
#include <DIYables_LCD_I2C.h>
DIYables_LCD_I2C lcd(0x27, 20, 4);
lcd.init();
lcd.backlight();
lcd.setCursor(column_index, row_index);
lcd.print("Hello World!");
※ Nota:
Fabricantes diferentes podem usar endereços I2C diferentes para o LCD. No nosso exemplo, usamos o endereço 0x27, conforme informado pelo fabricante DIYables.
#include <DIYables_LCD_I2C.h>
DIYables_LCD_I2C lcd(0x27, 20, 4);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("LCD 20x4");
lcd.setCursor(0, 1);
lcd.print("I2C Address: 0x27");
lcd.setCursor(0, 2);
lcd.print("DIYables");
lcd.setCursor(0, 3);
lcd.print("www.diyables.io");
}
void loop() {
}
Siga estas instruções passo a passo:
Conecte o LCD I2C 20x4 ao Arduino UNO R4 conforme o diagrama fornecido.
Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
Abra a Arduino IDE no seu computador.
Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
Vá até o ícone Libraries no lado esquerdo da Arduino IDE.
Digite "DIYables LCD I2C" e procure a biblioteca DIYables_LCD_I2C da DIYables.
Pressione o botão Install para adicionar a biblioteca DIYables_LCD_I2C.
Copie o código acima e abra-o na Arduino IDE.
Pressione o botão Upload na Arduino IDE para enviar o código ao Arduino UNO R4.
Confira o resultado no LCD.
A sua placa Arduino Uno R4 pode não fornecer energia suficiente para o LCD. Se o LCD não estiver brilhante ou não exibir caracteres, use uma fonte de alimentação externa para o LCD. Você pode usar este kit divisor de energia, como mostrado abaixo:
O vídeo de demonstração abaixo usa o código abaixo:
#include <Wire.h>
#include <DIYables_LCD_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
DIYables_LCD_I2C lcd(0x27, 20, 4);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
Servo doorServo;
#define SERVO_PIN 6
#define BUZZER 8
byte adminUID[4] = {0x3C, 0x7F, 0xB3, 0x02};
enum State { IDLE, SCANNING, GRANTED, DENIED, LOCKED };
State systemState = IDLE;
int failCount = 0;
unsigned long stateTime = 0;
unsigned long lockTime = 0;
void beepOK() {
for (int i = 0; i < 2; i++) {
digitalWrite(BUZZER,HIGH);
delay(100);
digitalWrite(BUZZER,LOW);
delay(50);
}
}
void beepFail() {
for (int i = 0; i < 3; i++) {
digitalWrite(BUZZER,HIGH);
delay(150);
digitalWrite(BUZZER,LOW);
delay(80);
}
}
void beepLock() {
digitalWrite(BUZZER,HIGH);
delay(300);
digitalWrite(BUZZER,LOW);
}
void showIdle() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SYSTEM READY");
lcd.setCursor(0,1); lcd.print("PLEASE SCAN CARD");
lcd.setCursor(0,2); lcd.print("DOOR: LOCKED");
lcd.setCursor(0,3); lcd.print("SECURITY: ACTIVE");
Serial.println("[STATE] IDLE");
systemState = IDLE;
}
void showScanning() {
lcd.clear();
lcd.setCursor(0,1);
lcd.print("SCANNING CARD...");
Serial.println("[STATE] SCANNING");
systemState = SCANNING;
}
void showGranted() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SYSTEM: GRANTED");
lcd.setCursor(0,1); lcd.print("USER: ADMIN");
lcd.setCursor(0,2); lcd.print("OPENING DOOR...");
lcd.setCursor(0,3); lcd.print("AUTO LOCK 3s");
doorServo.write(90);
beepOK();
stateTime = millis();
systemState = GRANTED;
Serial.println("[STATE] GRANTED");
}
void showDenied(byte *uid) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SYSTEM: DENIED");
lcd.setCursor(0,1); lcd.print("UID: ");
for (byte i=0;i<4;i++) {
lcd.print(uid[i], HEX);
lcd.print(" ");
}
lcd.setCursor(0,2); lcd.print("ACCESS BLOCKED");
failCount++;
lcd.setCursor(0,3);
lcd.print("FAIL: ");
lcd.print(failCount);
lcd.print("/3");
beepFail();
stateTime = millis();
systemState = DENIED;
Serial.println("[STATE] DENIED");
}
bool isAdmin(byte *uid) {
for (byte i=0;i<4;i++) {
if (uid[i] != adminUID[i]) return false;
}
return true;
}
void lockSystem() {
systemState = LOCKED;
lcd.clear();
lcd.setCursor(0,1);
lcd.print("SYSTEM LOCKED!");
lcd.setCursor(0,2);
lcd.print("TOO MANY FAILS");
doorServo.write(0);
beepLock();
Serial.println("[STATE] LOCKED");
delay(3000);
failCount = 0;
showIdle();
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
SPI.begin();
rfid.PCD_Init();
doorServo.attach(SERVO_PIN);
doorServo.write(0);
pinMode(BUZZER, OUTPUT);
showIdle();
}
void loop() {
if (failCount >= 3 && systemState != LOCKED) {
lockSystem();
return;
}
if (systemState == DENIED && millis() - stateTime > 2000) {
showIdle();
}
if (systemState == GRANTED && millis() - stateTime > 3000) {
doorServo.write(0);
beepLock();
showIdle();
}
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
showScanning();
byte *uid = rfid.uid.uidByte;
Serial.print("UID: ");
for (byte i=0;i<rfid.uid.size;i++) {
Serial.print(uid[i], HEX);
Serial.print(" ");
}
Serial.println();
delay(300);
if (isAdmin(uid)) {
showGranted();
} else {
showDenied(uid);
}
rfid.PICC_HaltA();
}
※ NOSSAS MENSAGENS
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!