Guia 3 - Controlando um LED com um botão

De Caninos Loucos
Ir para navegação Ir para pesquisar

Guia 3 - Controlando um LED com um botão

Para que você possa contribuir com a Labrador, ou conduzir projetos em sala de aula, preparamos uma série de materiais que facilitarão o desenvolvimento de soluções que envolvem a programação de sistemas embarcados.

Neste terceiro guia, você aprenderá a controlar um LED com um botão, para isso, utilize o Guia 3 disponibilizado abaixo:

Guia 3


Introdução

Neste documento você encontra o passo a passo para aprimorarmos o projeto que iniciamos no Guia 2 - Programando um LED com a Labrador. Para isso, utilizaremos a Linguagem de Programação Python, com os recursos disponibilizados na Caninos SDK. No Guia 2, verificamos como podemos controlar as GPIOs para garantir que seja possível enviar sinais digitais para o mundo real, por meio do uso de um LED.

Neste Guia adaptaremos nossa solução anterior para que seja possível incluir um botão no processo de controle de um LED, fazendo com que ao invés de controlarmos diretamente o LED, sejamos capazes de garantir que o LED acenda sempre que um botão for pressionado, ou apague sempre que este botão não esteja pressionado.


Ao final deste experimento você será capaz de:

1. Ligar e Desligar um LED utilizando um botão

2. Realizar a leitura de um botão utilizando a Linguagem de Programação Python

3. Programar uma GPIO, lendo um sinal digital em uma porta de sua escolha


Descrição do Experimento

Quando programamos nosso LED, utilizamos o pin15 para controlar os estados de "ligado" ou "desligado" de acordo com uma rotina lógica que pré-estabelecemos. Neste experimento vamos adaptar a solução anterior, para que seja possível ligar um LED sempre que um Botão for pressionado, ou apagar o mesmo LED sempre que o Botão não estiver pressionado.

Observação I: Para programar as GPIOs, enquanto a Caninos SDK estiver em modo de desenvolvimento, será necessário executar o Código 1 toda vez que você reiniciar a sua placa.


       sudo chown caninos /dev/gpiochip*
       sudo chmod g+rw /dev/gpiochip*

(Código 1. Definição de permissões para o uso das GPIOs)


Observação II: Sempre mantenha a biblioteca atualizada, para isso, execute o Código 2 no terminal antes de começar a desenvolver novas soluções com sua labrador.


       pip install -U caninos-sdk

(Código 2. Definição de permissões para o uso das GPIOs)


Desta forma, você deverá:

1. Incluir no circuito do Guia 2 um botão, garantindo que (i) o circuito necessário para conecta-lo junto a labrador seja adequdamente montado e (ii) que o pin18 seja a gpio utilizada para a leitura deste botão.

2. Em seguida, você deve escrever um código em Python, utilizando a Caninos SDK, para que o LED acenda sempre que o botão seja presisonado, ou para que o LED apague enquanto o botão não estiver pressionado.


Discutindo a montagem do circuito

Figura 1


Para lhe auxiliar no processo de montagem, utilize as portas destacadas na Figura 1. Esta figura consiste em um mapeamento de cada uma das GPIOs disponíveis na sua placa Labrador. Na hora de montar o seu circuito revise pelo menos duas vezes!


Discutindo a montagem do programa


Para programarmos a Labrador em Python precisaremos importar a Caninos SDK. Esta biblioteca foi desenvolvida para que possamos programar de forma mais simples nossa labrador, e desenvolver projetos compartilháveis.

Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, habilitar a GPIO (pin18) que deverá ser definido como uma porta de entrada. Veja o Código 3.

       labrador = k9.Labrador()
       labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias="button1")

(Código 3. Criando uma variável do tipo Labrador para controlar o pin18.)


Note que de acordo com o Código 3 realizamos duas operações distintas. A primeira, conforme explicado no Guia 2, permite acessar as operações básicas da labrador. Já a segunda, nos permite definir que o pin18, associado a esta variável labrador, foi ativado como uma gpio para uso no programa (por meio da função enable_io). Além disso, definimos que a GPIO será uma porta de entrada, por meio da constante k9.Pin.Direction.INPUT. Por fim, definimos que ela receberá o apelido de button1. Este apelido permite que você utilize o button1 deste ponto em diante do código, o que torna um pouco mais fácil controlar seu código, certo?

Para que seja possível realizar a leitura do sinal enviado para placa, quando clicamos no botão, podemos utilizar o apelido que atribuímos anteriormente a nossa GPIO. Para realizar a leitura do estado do botão, podemos utilizar a operação apresentada no Código 4

       labrador.button1.read()

(Código 4. O button1 (pin18) receberá um sinal HIGH (5V) se for pressionado, ou de LOW (0V) enquanto não for pressionado.)


Com estas novas instruções já somos capazes de adaptar completamente nosso código!

        Caso tenha alguma dúvida, consulte a seção Código do Experimento.

Montagem do circuito

Quando elaboramos um projeto que envolve o uso de microcontroladores é importante identificarmos que dois projetos distintos devem ser realizados (i) para a montagem dos recursos físicos do projeto (hardware) e (ii) a montagem do código de programação que permitirá o controle e acesso aos recursos disponibilizados pelo projeto físico.

O projeto físico neste experimento consiste em acender um LED utilizando a labrador como controlador, e permitindo que toda vez que um botão for pressionado um LED acenda. Nesta montagem especificamos uma GPIO para sinal de referência GND, uma GPIO (pin15) para conexão com o LED e uma GPIO (pin18) para conexão do botão.

Veja a Figura 2 para observar a montagem do circuito que incluí o botão que será acessado durante nosso experimento.

Figura 2

Na Figura 2 adicionamos ao nosso circuito um botão. Em um dos terminais de entrada do botão conectamos o sinal de 5V da Labrador, e no outro, adicionamos um resistor, que estará em série com o sinal GND (para garantir estabilidade do botão). Na extremidade de saída, conectamos o terminal com a GPIO da labrador (pin18). Para que este circuito seja otimizado, também alteramos a montagem do LED, garantindo que o sinal de 5V seja transmitido a uma trilha de acesso comum da protoboard, para que assim, possa ser distribuído por todos os componentes tanto quanto necessário. Fazemos o mesmo com o GND.

   #importamos as bibliotecas necessárias para utilizarmos a labrador
   import caninos_sdk as k9


   #criamos nossa variável labrador, para uso dos recursos da placa
   labrador = k9.Labrador()


   #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele
   labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias="led_status")


   #ativamos o pino 18 (da labrador), como entrada e definimos um apelido para ele
   labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias="button1")


   #um laço de repetição para 6 iterações
   while True:
      #verificamos o estado do botão, caso seja ALTO, ligamos o LED
      # se não, delsigamos o LED
      if labrador.button1.read() == 1:
           labrador.led_status.high()
      else:
           labrador.led_status.low()