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:

Arduino UNO R4 e LCD I2C 20x4

Sobre o LCD I2C 20x4

Pinagem

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.
Pinagem do LCD 20x4 I2C

Coordenadas do LCD

O LCD I2C 20x4 tem 20 colunas e 4 linhas. As colunas e as linhas começam em 0.

Coordenadas do LCD I2C com Arduino UNO R4

Diagrama de Ligação

Diagrama de ligação do LCD 20x4 I2C com Arduino UNO R4

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

Como Programar para o LCD I2C

Usar o LCD é muito fácil com a biblioteca DIYables_LCD_I2C.

  • Adicione a biblioteca:
#include <DIYables_LCD_I2C.h>
  • Crie um objeto DIYables_LCD_I2C com o endereço I2C, o número de colunas e o número de linhas:
DIYables_LCD_I2C lcd(0x27, 20, 4); // Initialize LCD with I2C address 0x27, 20 columns, and 4 rows
  • Configure a tela do LCD.
lcd.init(); // Initialize the LCD display lcd.backlight(); // Turn on the backlight of the LCD
  • Posicione o cursor na posição específica indicada por column_index e row_index.
lcd.setCursor(column_index, row_index);
  • Exiba uma mensagem na tela do LCD.
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.

Código Arduino UNO R4

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-lcd-20x4 */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // Initial setup for a 20 columns x 4 rows LCD with I2C address 0x27 void setup() { lcd.init(); // Initialize the LCD lcd.backlight(); // Turn on the backlight lcd.setCursor(0, 0); // Position cursor at the first row, first column lcd.print("LCD 20x4"); // Display text at the first row lcd.setCursor(0, 1); // Position cursor at the second row, first column lcd.print("I2C Address: 0x27"); // Display text at the second row lcd.setCursor(0, 2); // Position cursor at the third row, first column lcd.print("DIYables"); // Display text at the third row lcd.setCursor(0, 3); // Position cursor at the fourth row, first column lcd.print("www.diyables.io"); // Display text at the fourth row } void loop() { // TODO }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente do Arduino Uno R4 WiFi/Minima na Arduino IDE.
  • 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.
Biblioteca DIYables LCD I2C para Arduino UNO R4
  • 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.
Display LCD 20x4 com Arduino UNO R4
  • Experimente mudar o texto e a posição dele.

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:

como alimentar o Arduino Uno R4 e componentes externos

Vídeo

O vídeo de demonstração abaixo usa o código abaixo:

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-lcd-20x4 */ #include <Wire.h> #include <DIYables_LCD_I2C.h> #include <SPI.h> #include <MFRC522.h> #include <Servo.h> // ================= LCD ================= DIYables_LCD_I2C lcd(0x27, 20, 4); // ================= RFID ================= #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // ================= SERVO ================= Servo doorServo; #define SERVO_PIN 6 // ================= BUZZER ================= #define BUZZER 8 // ================= ADMIN UID ================= byte adminUID[4] = {0x3C, 0x7F, 0xB3, 0x02}; // ================= STATE ================= enum State { IDLE, SCANNING, GRANTED, DENIED, LOCKED }; State systemState = IDLE; int failCount = 0; unsigned long stateTime = 0; unsigned long lockTime = 0; // ================= SOUND ================= 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); } // ================= DISPLAY IDLE ================= 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; } // ================= DISPLAY SCANNING ================= void showScanning() { lcd.clear(); lcd.setCursor(0,1); lcd.print("SCANNING CARD..."); Serial.println("[STATE] SCANNING"); systemState = SCANNING; } // ================= GRANTED ================= 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"); } // ================= DENIED ================= 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"); } // ================= CHECK UID ================= bool isAdmin(byte *uid) { for (byte i=0;i<4;i++) { if (uid[i] != adminUID[i]) return false; } return true; } // ================= LOCK SYSTEM ================= 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(); } // ================= SETUP ================= 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(); } // ================= LOOP ================= void loop() { // LOCK CONDITION if (failCount >= 3 && systemState != LOCKED) { lockSystem(); return; } // AUTO BACK TO IDLE FROM DENIED if (systemState == DENIED && millis() - stateTime > 2000) { showIdle(); } // AUTO CLOSE DOOR if (systemState == GRANTED && millis() - stateTime > 3000) { doorServo.write(0); beepLock(); showIdle(); } // RFID READ 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!