banner

blog

Sep 17, 2023

Como usar botões com pinos Raspberry Pi GPIO

Se você já usou um LED com um Raspberry Pi, provavelmente sabe como funcionam as saídas GPIO. O código faz a eletricidade fluir pelos pinos de entrada/saída de uso geral (GPIO), passa pelos LEDs e ilumina as coisas. Mas você já tentou fazer o contrário? Com botões, você pode fazer exatamente o oposto. Este tutorial mostra como transformar um pino GPIO em um pino de entrada, ouvindo cada botão pressionado!

Um botão de pressão é um tipo de interruptor. Possui dois pinos condutores separados que impedem um circuito completo por estarem separados um do outro. Quando você pressiona um botão, na verdade está empurrando os dois pinos juntos, completando o circuito. Mas se você soltar, há um mecanismo semelhante a uma mola que separa os pinos novamente.

O botão típico em kits de sensores tem quatro pinos, cada pino separado dos outros. Uma placa móvel de metal fica logo abaixo da área do botão, que desce e conecta todos os outros pinos quando o botão é pressionado para baixo.

Você encontrará duas placas dentro de um botão de 4 pinos. Cada um está conectado a dois pinos externos. Ambas as placas são mantidas separadas uma da outra e só podem ser conectadas pressionando uma terceira placa – a placa de metal embaixo do botão.

De certa forma, sempre há dois pinos conectados em um botão. Ao pressionar o botão de 4 pinos, você conecta todos os quatro pinos juntos.

Desta vez, estamos fazendo com que os pinos Raspberry Pi GPIO detectem o pressionamento de um botão. Quando a eletricidade passa por ele, o Raspberry Pi imprime uma mensagem informando que está funcionando.

Dica: para encontrar o número do pino correto, segure seu Raspberry Pi de forma que os pinos GPIO fiquem no canto superior direito. O pino superior esquerdo é o pino 1 e à direita dele está o pino 2. Abaixo do pino 1 está o pino 3, à direita está o pino 4 e assim por diante.

Se você trocar os pinos GND e 3,3V, com 3,3V no resistor e GND no outro lado do botão, você inverterá a lógica do botão. A saída do pino 7 é HIGH! o tempo todo e tornar-se o pino 7 em BAIXO quando você pressiona o botão.

Os botões de pressão usam dois tipos de resistores: pull-up e pull-down. Aquele com 3,3V conectado ao resistor é um resistor pull-up. Ele puxa a tensão para cima. Enquanto isso, os resistores pull-down reduzem a tensão por meio de um pino GND conectado a eles.

Você ainda pode usar um botão sem um resistor, mas isso deixa seu pino GPIO em flutuação. Um pino GPIO flutuante não recebe carga elétrica direta, então ele procura por cargas ao seu redor. Se houver um forte campo eletromagnético perto dele, por exemplo, ele apenas medirá isso.

É por isso que você precisa de um ponto de referência. Se você conectar o pino GPIO a 0V (GND) por padrão, ele medirá 0V enquanto o botão não estiver pressionado. Mas se você não fizer isso, o valor do pino GPIO pode estar em qualquer lugar – até mesmo em volts negativos!

Os pinos flutuantes podem fazer algumas coisas interessantes, no entanto. Se você deixar um pino flutuando, ele pode sentir a diferença de voltagem no ar, medindo até mesmo o efeito de ter seu dedo se movendo perto do próprio pino. É como um sensor de presença eletromagnético ou algo assim.

É uma pena que você não possa fazer isso no Raspberry Pi. Para que isso seja útil, você precisará de pinos analógicos, e o Raspberry Pi não os possui.

Sabendo disso, você deve entender que o pino 7 detecta se 3,3 V ou 0 V passa por ele. Se detectar 3,3 V, ele se reportará como ALTO. Mas se detectar 0V, então é BAIXO.

Vamos dividir o código em três partes: comandos de importação, comandos de configuração e comandos em loop.

Estamos usando dois comandos de importação:

importar RPi.GPIO como GPIO importa o módulo RPi.GPIO, que permite fazer coisas com os pinos GPIO do seu Raspberry Pi. Ao adicionar como GPIO no final, você está dizendo ao Python para dizer que digitar GPIO é equivalente a digitar RPi.GPIO. Você pode até substituí-lo por outras strings, e o código ainda deve funcionar, desde que você o formate corretamente.

Por outro lado, from time import sleep importa apenas uma parte do módulo time do Python. Ele permite que você use a função sleep().

COMPARTILHAR