Arduino - LCD 20x4

Neste tutorial de Arduino LCD 20x4 I2C, vamos aprender como conectar um LCD 20x4 (Display de Cristal Líquido) à placa Arduino através da interface I2C.

Hardware Necessário

1×Arduino Uno R3
1×Cabo USB 2.0 tipo A/B (para PC com USB-A)
1×Cabo USB 2.0 tipo C/B (para PC com USB-C)
1×LCD 20x4
1×Fios Jumper
1×(Recomendado) Shield com Bornes de Parafuso para Arduino Uno
1×(Recomendado) Sensors/Servo Expansion Shield for Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Case para Arduino Uno
1×(Recomendado) Placa Base de Prototipagem e Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (18 sensors/displays)
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.

Sobre o LCD I2C 20x4

Pinagem

O LCD 20x4 I2C usa a interface I2C, por isso ele tem 4 pinos:

  • Pino GND: precisa ser conectado ao GND (0V).
  • Pino VCC: a alimentação do LCD, precisa ser conectado ao VCC (5V).
  • Pino SDA: sinal de dados I2C
  • Pino SCL: 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 são indexadas a partir de 0.

Coordenadas do LCD I2C no Arduino

Diagrama de Ligação

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

This image is created using Fritzing. Click to enlarge image

LCD I2C Arduino Uno, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

Como Programar o LCD I2C

Graças à biblioteca DIYables_LCD_I2C, usar o LCD é moleza.

  • Inclua a biblioteca:
#include <DIYables_LCD_I2C.h> // Library for LCD
  • Declare 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); // I2C address 0x27, 20 column and 4 rows
  • Inicialize o LCD.
lcd.init(); //initialize the lcd lcd.backlight(); //open the backlight
  • Mova o cursor para a posição desejada (column_index, row_index)
lcd.setCursor(column_index, row_index);
  • Imprima uma mensagem no LCD.
lcd.print("Hello World!");

※ Nota:

O endereço I2C do LCD pode variar de acordo com o fabricante. No código, usamos 0x27, que é o endereço especificado pelo fabricante DIYables

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-lcd-20x4 */ #include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 column and 4 rows void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.setCursor(0, 0); // move cursor the first row lcd.print("LCD 20x4"); // print message at the first row lcd.setCursor(0, 1); // move cursor to the second row lcd.print("I2C Address: 0x27"); // print message at the second row lcd.setCursor(0, 2); // move cursor to the third row lcd.print("DIYables"); // print message at the third row lcd.setCursor(0, 3); // move cursor to the fourth row lcd.print("www.diyables.io"); // print message the fourth row } void loop() { }

Passos Rápidos

  • Vá até o ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise "DIYables LCD I2C" e encontre a biblioteca DIYables_LCD_I2C da DIYables
  • Clique no botão Install para instalar a biblioteca DIYables_LCD_I2C.
Biblioteca DIYables LCD I2C para Arduino
  • Copie o código acima e abra-o no Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Veja o resultado no LCD
Arduino exibindo texto no LCD
  • Experimente modificar o texto e a posição

Vídeo

A demonstração em vídeo abaixo usa o código abaixo. Observe que o vídeo mostra o Arduino Uno R4, mas funciona de forma idêntica no Arduino Uno R3:

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-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!