Curso Raspberry Pi – #13 – PWM, Entradas, Scripts com uma Câmara
Anteriormente falamos dos fundamentos do GPIO e dos primeiros scripts. Desta vez, vamos testar a geração de sinal PWM na prática. Também usaremos pinos como entradas do nosso sistema. No final, escreva um script que conecte o GPIO e uma câmara. Graças a isso, vamos substituir o Raspberry Pi por uma câmara.
Simulação de semáforos no Raspberry Pi
É hora de um breve replay da última parte do curso. Quem é que tentou escrever um script que simulará o funcionamento dos semáforos?
Aqui está a nossa versão desta tarefa. Os díodos foram conectados por resistências de 1,2k Ω aos seguintes pinos: 16 (vermelho), 20 (amarelo) e 21 (verde). O diagrama de fiação foi muito simples:
Na prática, o layout era o seguinte:
No início, configure 3 pinos como saídas e, em seguida, no loop, acendemos ou apagamos díodos individuais:
#!/bin/bash gpio -g mode 16 out gpio -g mode 20 out gpio -g mode 21 out while true do gpio -g write 16 1 gpio -g write 20 0 gpio -g write 21 0 sleep 1 gpio -g write 20 1 sleep 1 gpio -g write 16 0 gpio -g write 20 0 gpio -g write 21 1 sleep 1 gpio -g write 20 1 gpio -g write 21 0 sleep 1 gpio -g write 16 1 gpio -g write 20 0 sleep 1 done
Como resultado, recebemos um dispositivo de sinalização simples que exibe alternadamente as combinações individuais:
É hora de mudar para algo novo!
Geração de sinal PWM em Raspberry Pi
O Raspberry pode gerar o sinal PWM , que é usado com mais frequência para alterar o brilho dos LEDs (incluindo faixas de LED). Também é útil quando quer controlar a velocidade dos motores.
No nosso caso, será mais fácil começar com um díodo emissor de luz. Vamos conectá-lo através de uma resistência de 1,2kΩ para fixar o número 12, de acordo com o seguinte diagrama:
De seguida, emitimos o seguinte comando, que irá configurar o pino. O comando pode ser inserido diretamente no terminal ou num script (como fizemos na parte anterior do curso).
gpio -g mode 12 pwm
Anteriormente, usamos a palavra-chave write para alterar o estado do pin, desta vez seria pwm. Além do número de pinos, também devemos especificar um parâmetro que especificará o preenchimento do sinal PWM. Este parâmetro assume valores no intervalo 0-1024, em que 1024 significa 100% de preenchimento.
Por exemplo, para que o díodo brilhe com brilho total, emitiremos o comando:
gpio -g pwm 12 1024
Para desativá-lo, digite:
gpio -g pwm 12 0
Se o argumento for um número diferente (por exemplo, 800), o LED acenderá com menos brilho. É melhor experimentar aqui testando alguns valores diferentes, por exemplo, 300, 400, 800.
Infelizmente, o mecanismo descrito não funciona em todos os pinos. O Hardware PWM está disponível apenas no GPIO12 e no GPIO18. Os pinos restantes podem gerar o sinal PWM apenas programaticamente, mas não vamos lidar com isso agora.
Entradas universais em Raspberry Pi
Já podemos controlar as saídas do Raspberry, hora de ler o sinal do lado de fora. Para este propósito, conecte um pino debotão ao pino 26 e o outro ao ground (GND).
Nós não desconectamos o díodo usado anteriormente, porque ainda precisamos dele.
Como sabemos, por padrão, todos os pinos são entradas, mas podemos nos surpreender ao tentar ler o valor do pino 26 – ele ainda será zero. Nós não temos uma resistência de pull-up no PCB, mas com micro controladores, podemos ativá-lo no processador.
Para fazer isso, configure o modo (de pull-up ):
gpio -g mode 26 up
Agora podemos ler o status do pin escrevendo:
gpio -g read 26
Devemos obter o resultado “1” e depois de pressionar o botão “0”.
“Zero” só será obtido quando o botão for pressionado durante a emissão do comando.
A operação do botão na prática é visível na imagem abaixo:
Lendo o estado de entrada na interrupção
A leitura contínua de valores pode ser cansativa para nós e para o processador. Portanto, use o mecanismo de interrupção muito melhor. O comando a seguir fará com que o programa pare até que pressione o botão:
gpio -g wfi 26 falling
Depois de emitir o comando acima, o programa parará (o que pode ser visto na captura de tela à esquerda) e, depois de pressionar o botão, ele será executado até o final. Nesse caso, isso significa que o script foi concluído porque consistia em apenas uma linha:
Num momento nós usaremos o mecanismo de interrupção na prática – então tudo será explicado.
Raspberry Pi como uma câmera
Nós já sabemos como escrever scripts e controlar portas GPIO. É hora de usá-lo para construir algo prático. Vamos tornar um Raspberry numa câmara.
Ele será adicionalmente equipado com um botão, um díodo e uma campainha. A foto será tirada após pressionar o botão, e os elementos restantes sinalizarão (com luz e som) o estado da câmara. Graças a isso todos poderão tirar uma foto com um Raspberry.
Adicionamos um módulo de campainha ao sistema previamente montado e conectamos uma câmara ao Raspberry Pi. Os pinos atualmente usados são:
- pino número 21 – o módulo de campainha,
- pino número 12 – diodo conectado através de um resistor de 1,2kΩ,
- pino número 26 – botão.
Na prática, teremos que “domar” um pequeno emaranhado de cabos:
Vamos começar a escrever. No início, a configuração do GPIO é necessária. Conecte a campainha ao pino 21, o pino 12 controlará o díodo e, para fixar o número 26, conecte o botão:
# configuração de pinos gpio -g mode 21 out #Buzzer gpio -g mode 12 pwm #LED gpio -g mode 26 up #Przycisk
De seguida, informa-mos (incluindo o LED) que a câmara está pronta e a aguardar que o botão seja pressionado. A saída à qual conectamos o díodo foi configurada como PWM, para que possamos controlar o brilho de nossa sirene. Quando o usuário pressiona o botão, o programa executa:
gpio -g pwm 12 800 gpio -g wfi 26 falling
Agora desligamos o díodo e ligamos a campainha que sinalizará tirar uma foto:
gpio -g pwm 12 0 gpio -g write 21 0
O próximo passo, mais importante, é tirar a foto . Para este propósito, usamos o conhecido programa raspistill. Como lembrete, uma linha é suficiente:
raspistill -t 200 -n -o 'zdjecie-%d.jpg' -dt
No final, desligue a campainha:
gpio -g write 21 1
Por fim, o script aparat.sh tem o formato:
#!/bin/sh gpio -g mode 21 out #Buzzer gpio -g mode 12 pwm #LED gpio -g mode 26 up #Przycisk gpio -g pwm 12 800 gpio -g wfi 26 falling gpio -g pwm 12 0 gpio -g write 21 0 raspistill -t 200 -n -o 'zdjecie-%d.jpg' -dt gpio -g write 21 1
No final, damos as permissões certas (discutimos os detalhes anteriormente):
chmod +x aparat.sh
Agora nós executamos a “câmara”:
./aparat.sh
Depois de iniciar o programa, um díodo acenderá para informar o usuário quando a câmara estiver pronta. Pressionando o botão irá desligar o díodo e iniciar a campainha. O som irá parar quando a foto for tirada. A operação do programa é mostrada graficamente na seguinte animação:
Podemos ver as fotos tiradas, por exemplo, pelo WinSCP:
Sumário
Durante este artigo, nós completamos informações sobre o uso do GPIO. Também criamos um script que combinava portas de E/S universais com outros periféricos (câmara). Os princípios descritos aqui são suficientes para criar muitos scripts úteis. Na parte posterior do curso, escrevemos programas Python simples. Graças a isso, o uso do GPIO será ainda mais fácil, especialmente quando quiser conectar periféricos mais complexos.
___________
O que achou deste artigo? Deixe o seu comentário abaixo, e partilhe nas Redes Sociais que certamente será útil e interessante para os seus amigos!
Curso Raspberry Pi – #1 – Introdução, Índice
Curso Raspberry Pi – #2 – O que é o Raspberry Pi?
Curso Raspberry Pi – #3 – Caixa, Dissipadores de Calor
Curso Raspberry Pi – #4 – Instalação do Sistema, Raspberry Pi como PC
Curso Raspberry Pi – #5 – Instalação / Comunicação Via UART
Curso Raspberry Pi – #6 – Instalação / Comunicação Através da Rede
Curso Raspberry Pi – #7 – Acesso Remoto VNC, Chaves SCP, RSA
Curso Raspberry Pi – #8 – O Básico do Linux
Curso Raspberry Pi – #9 – Processadores de Texto
Curso Raspberry Pi – #10 – Câmara, Fotos, Transmissão de Imagem
Curso Raspberry Pi – #11 – Filmes, Slowmotion, Timelapse
Curso Raspberry Pi – #12 – Noções Básicas sobre GPIO, Scripts
Curso Raspberry Pi – #13 – PWM, Entradas, Scripts com uma Câmara