Lendo botões com a Raspberry Pi - MakerHero
Lendo botões com a Raspberry Pi

Lendo botões com a Raspberry Pi

Deixe um comentário

Nesta aula, exploraremos como interagir com botões usando uma Raspberry Pi. Abordaremos a leitura dos estados dos botões e a interpretação desses sinais em seu código Python. Além disso, discutiremos a importância de variáveis na programação e identificaremos possíveis erros comuns ao trabalhar com GPIO, garantindo que você possa configurar e depurar seu circuito com eficiência.

Piscando botões com a Raspberry Pi: Materiais Necessários

Para montar o circuito para ler botões com a Raspberry Pi, vamos precisar dos seguintes materiais:

Circuito para ler botões com a Raspberry Pi

O dispositivo de entrada que utilizaremos na placa Raspberry Pi é um botão do tipo push-button.

Circuito para ler botões com a Raspberry Pi

Um push-button (botão de pressão) funciona como um interruptor simples que abre e fecha um circuito elétrico. Ele possui dois estados: “0” ou “1”, “aberto” ou “fechado”. Ao conectar o push-button a um pino GPIO da RPi, podemos detectar esses estados — se o botão está pressionado ou não — e, a partir disso, realizar ações específicas, como acender ou apagar um LED, no caso do nosso exemplo.

Circuito para ler botões com a Raspberry Pi

Na imagem, podemos ver que quando o botão não está pressionado, o circuito está aberto e não há fluxo de corrente. Quando o botão é pressionado, o circuito se fecha, permitindo que a corrente flua. Essa mudança no fluxo de corrente — a presença ou ausência de tensão — é a informação que podemos utilizar na programação para executar diferentes funções e controlar dispositivos conectados à placa Raspberry Pi. Para aprender mais sobre este componente acesse a aula de botões do nosso Guia de Componentes Eletrônicos.  

Abaixo está representado o circuito de montagem para ler botões com a Raspberry Pi:

circuito montado

O circuito montado conforme o esquema ficará como mostrado na figura abaixo:

circuito montado

Código Python para ler botões com a Raspberry Pi

O código fornecido para ler botões em diferentes versões da Raspberry Pi (Raspberry Pi 5 e Raspberry Pi 4 ou anteriores) utiliza diferentes bibliotecas para controle do GPIO, conforme as capacidades de hardware e software de cada versão.

Código para ler botões na Raspberry Pi 5:

# Bibliotecas utilizadas
import gpiod
import time

# Define o pino GPIO 18 como o pino do botão 1
PINO_BOTAO1 = 18
# Define o pino GPIO 23 como o pino do botão 2
PINO_BOTAO2 = 23
# Define o pino GPIO 24 como o pino do botão 3
PINO_BOTAO3 = 24

# Cria um objeto 'chip' para representar o dispositivo GPIO
chip = gpiod.Chip('gpiochip0')

# Obtém uma linha de GPIO específica para cada pino
botao1 = chip.get_line(PINO_BOTAO1)
botao2 = chip.get_line(PINO_BOTAO2)
botao3 = chip.get_line(PINO_BOTAO3)

# Solicita a linha de GPIO para ser usada como entrada (BOTÃO)
botao1.request(consumer="BOTAO1", type=gpiod.LINE_REQ_DIR_IN)
botao2.request(consumer="BOTAO2", type=gpiod.LINE_REQ_DIR_IN)
botao3.request(consumer="BOTAO3", type=gpiod.LINE_REQ_DIR_IN)

# Loop infinito para ler os botões
while True:
    estado1 = botao1.get_value() # Lê o valor do pino
    if estado1 == 1:
        print("Botao 1 pressionado")
    else:
        print("Botao 1 nao pressionado")

    estado2 = botao2.get_value() # Lê o valor do pino
    if estado2 == 1:
        print("Botao 2 pressionado")
    else:
        print("Botao 2 nao pressionado")

    estado3 = botao3.get_value() # Lê o valor do pino
    if estado3 == 1:
        print("Botao 3 pressionado")
    else:
        print("Botao 3 nao pressionado")

    time.sleep(0.1) # Aguarda 100ms antes de ler novamente

Código para ler botões na Raspberry Pi 4 (ou modelos anteriores):

# Bibliotecas utilizadas
import RPi.GPIO as GPIO
import time

# Define o modo de numeração dos pinos como BCM
GPIO.setmode(GPIO.BOARD)

# Define os pinos GPIO como entrada para os botões
PINO_BOTAO1 = 12
PINO_BOTAO2 = 16
PINO_BOTAO3 = 18

# Configura os pinos dos botões como entrada
GPIO.setup(PINO_BOTAO1, GPIO.IN) 
GPIO.setup(PINO_BOTAO2, GPIO.IN) 
GPIO.setup(PINO_BOTAO3, GPIO.IN)

# Loop infinito para ler os botões
while True:
    estado1 = GPIO.input(PINO_BOTAO1)  # Lê o valor do pino
    if estado1 == 1:
        print("Botao 1 pressionado")
    else:
        print("Botao 1 nao pressionado")

    estado2 = GPIO.input(PINO_BOTAO2)  # Lê o valor do pino
    if estado2 == 1:
        print("Botao 2 pressionado")
    else:
        print("Botao 2 nao pressionado")

    estado3 = GPIO.input(PINO_BOTAO3)  # Lê o valor do pino
    if estado3 == 1:
        print("Botao 3 pressionado")
    else:
        print("Botao 3 nao pressionado")

    time.sleep(0.1)  # Aguarda 100ms antes de ler novamente

Ambos os códigos configuram os pinos GPIO como entradas, verificam continuamente o estado dos botões (se estão pressionados ou não), e exibem mensagens no console para indicar o estado atual de cada botão, realizando esta leitura de forma contínua em um loop infinito.

Introdução ao Conceito de Variáveis

Em programação, variáveis são usadas para armazenar dados que podem ser manipulados pelo código. Pense em uma variável como um “nome” ou “rótulo” que você dá a um determinado valor ou informação para que possa referenciá-lo mais tarde. Por exemplo, no código fornecido, usamos variáveis como PINO_BOTAO1, PINO_BOTAO2, e PINO_BOTAO3 para armazenar os números dos pinos GPIO que estão conectados aos botões.

Ao atribuir números específicos aos pinos de botões com variáveis, podemos facilmente modificar o código no futuro para usar pinos diferentes, sem a necessidade de alterar várias partes do código.

No exemplo abaixo, a variável estado1 é usada para armazenar o estado do botão 1 (se está pressionado ou não):

estado1 = GPIO.input(PINO_BOTAO1)

Isso torna o código mais legível e fácil de entender, pois você sabe que estado1 representa o estado do botão 1. Utilizar variáveis é uma prática fundamental para organizar e simplificar o código, além de evitar erros comuns de digitação ou alterações em várias partes do código.

Possíveis Erros

Ao trabalhar com botões na placa Raspberry Pi, alguns erros comuns podem ocorrer, como:

  • Conexões Incorretas no Circuito: Verifique sempre se os pinos do botão estão conectados corretamente ao pino GPIO correspondente e ao terra (GND) na protoboard. Uma conexão incorreta pode fazer com que a leitura do botão seja sempre “0” ou “1”, independentemente de o botão estar pressionado ou não.
  • Resistores de Pull-down Ausentes ou Configurados Incorretamente: Se o resistor de pull-down não estiver conectado corretamente ou estiver ausente, o valor lido do botão pode “flutuar” entre “0” e “1” devido a interferências. Certifique-se de que os resistores de 10kΩ estejam corretamente conectados conforme o esquema.
  • Configuração Errada dos Pinos GPIO: No código, assegure-se de que os pinos GPIO estão configurados corretamente como entradas. No caso de usar a biblioteca RPi.GPIO, o modo de numeração de pinos (BCM ou BOARD) deve corresponder ao layout de hardware do circuito.
  • Uso de Bibliotecas Incompatíveis: A Raspberry Pi 5 utiliza a biblioteca gpiod para controle de GPIO, enquanto as versões anteriores usam RPi.GPIO. Usar a biblioteca errada pode levar a erros de importação ou a falhas na execução do código.
  • Erros de Software e Lógica de Programação: Problemas como loops infinitos sem um mecanismo adequado de interrupção, erros de lógica (como condições incorretas), ou falhas em tratar exceções podem levar a um comportamento inesperado do programa. É sempre importante adicionar tratamento de exceções, como o uso de try/except, para evitar travamentos ou saídas inesperadas.

Faça seu comentário

Acesse sua conta e participe