<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.canisinc.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ivan</id>
	<title>Caninos Loucos - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.canisinc.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ivan"/>
	<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Ivan"/>
	<updated>2026-09-02T23:03:35Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=744</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=744"/>
		<updated>2024-06-21T21:52:50Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Preparando o ambiente de desenvolvimento&#039;&#039;&#039;==&lt;br /&gt;
Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sistema:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian 10&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- Para facilitar, as bibliotecas deverão ser instaladas via requirements.txt, o tutorial ensinando a instalar estará logo após o código.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor CC 9v:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Driver de motor L298N:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Montagem:&#039;&#039;&#039;== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Código&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Se você está aqui, acredito que já saiba como funciona a configuração dos pinos, caso não saiba, sugiro que siga os guias disponibilizados.&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino GPIO:&lt;br /&gt;
 &lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_2_-_Programando_um_LED_com_a_Labrador Guia - 2]&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino PWM:&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM Guia - 4]&lt;br /&gt;
&lt;br /&gt;
Nestes guias são comentados como utilizar os dois tipos de pino da labrador, boa sorte!&lt;br /&gt;
&lt;br /&gt;
É recomendado criar a base do código que está a seguir em um arquivo separado com a extensão .py, assim você poderá chamar o arquivo &lt;br /&gt;
&lt;br /&gt;
sempre que quiser, sem precisar ficar reescrevendo o código e poderá usar em outras aplicações que desejar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:30em; overflow:auto; border: 2px solid #088&amp;quot;&amp;gt;&lt;br /&gt;
 import caninos_sdk as k9    #biblioteca caninos para configuração dos pinos&lt;br /&gt;
&lt;br /&gt;
 class Garra:                # Criando a classe Garra&lt;br /&gt;
    __is_moving = False     # Variável responsável por verificar se há movimento na garra&lt;br /&gt;
&lt;br /&gt;
    def __load_pwm_engine(self):    # Configurando os pinos PWM dos motores&lt;br /&gt;
        &#039;&#039;&#039; Habilita PWM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        time_count = 1&lt;br /&gt;
        while time_count &amp;lt;= 4:&lt;br /&gt;
            self.labrador.pin32.enable_pwm(                                     # Motor de avanço&lt;br /&gt;
                alias=&amp;quot;engine_foward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
&lt;br /&gt;
            self.labrador.pin36.enable_pwm(                                     # Motor de recuo&lt;br /&gt;
                alias=&amp;quot;engine_backward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin28.enable_pwm(                                     # Motor de esticar a garra&lt;br /&gt;
                alias=&amp;quot;engine_stretch&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin24.enable_pwm(                                     # Motor de retrair a garra&lt;br /&gt;
                alias=&amp;quot;engine_retract&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            &#039;&#039;&#039;self.labrador.pin31.enable_pwm(                                     # Motor de subir&lt;br /&gt;
                alias=&amp;quot;engine_uplift&amp;quot;, freq=25, duty_cycle=0.1*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin29.enable_pwm(                                     # Motor de descer&lt;br /&gt;
                alias=&amp;quot;engine_lower&amp;quot;, freq=25, duty_cycle=0.1*time_count)&#039;&#039;&#039;&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin11.enable_pwm(                                     # Motor de girar para a esquerda&lt;br /&gt;
                alias=&amp;quot;engine_turn_left&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin7.enable_pwm(                                     # Motor de girar para a direita&lt;br /&gt;
                alias=&amp;quot;engine_turn_right&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            time_count = time_count+1&lt;br /&gt;
&lt;br /&gt;
    def __load_gpio_engine(self): # configurando os switchs do projeto&lt;br /&gt;
        self.labrador.pin26.enable_gpio(                                       # Define o limite de recuo&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_x&amp;quot;)                     # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin18.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_x&amp;quot;)                    # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin21.enable_gpio(                                       # Define o limite de abertura da garra&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_claw&amp;quot;)                   &lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin37.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_claw&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin33.enable_gpio(                                       # define o limite de altura&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_y&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin35.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_y&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
        self.labrador.pin13.enable_gpio(                                       # define o limite da volta&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_turn&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin3.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_turn&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def __init__(self) -&amp;gt; None: #ao definir um __init__, toda vez que instanciarmos a classe:&lt;br /&gt;
        self.labrador = k9.Labrador()   # ela instanciará a biblioteca caninos_sdk&lt;br /&gt;
        self.__load_pwm_engine()    # ativará os pinos PWM dos motores&lt;br /&gt;
        self.__load_gpio_engine()   # ativará os pinos GPIO dos switchs&lt;br /&gt;
&lt;br /&gt;
    def stretch_claw(self):         # Classe definida para esticar a garra&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.start()    # ativando o pino pwm&lt;br /&gt;
            self.labrador.engine_retract.pwm.stop()     # desativando o pino pwm&lt;br /&gt;
            limit = self.labrador.stop_button_claw.read() # se o botão mandar um sinal, a garra para&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
                print(&#039;Limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Abrindo a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def retract_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
            self.labrador.engine_retract.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Fechando a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def foward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.start()&lt;br /&gt;
            self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Avançando...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def backward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.stop()&lt;br /&gt;
            self.labrador.engine_backward.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            limit = self.labrador.stop_button_x.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Recuando...&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    def uplift(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.start()&lt;br /&gt;
            self.labrador.engine_lower.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_y.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Subindo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def lower(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
            self.labrador.engine_lower.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Descendo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_right(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.start()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_turn.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Girando sentido horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_left(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Girando sentido anti-horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def stop_claw(self):&lt;br /&gt;
        self.__is_moving = False&lt;br /&gt;
        for pin in self.labrador.enabled_features:&lt;br /&gt;
            if pin.pwm is not None:&lt;br /&gt;
                pin.pwm.stop()&lt;br /&gt;
        print(&#039;Parando a garra...&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vocẽ também pode clonar o projeto já pronto no github: [https://github.com/ZoahZoah/garra_labrador Garra_fischertecnik]. Lembre-se&lt;br /&gt;
&lt;br /&gt;
de rodar os comando:&lt;br /&gt;
&lt;br /&gt;
Para instalar o virtualenv:&lt;br /&gt;
&lt;br /&gt;
 pip3 install virtualenv&lt;br /&gt;
&lt;br /&gt;
Para criar uma virtualenv você precisa estar dentro da pasta que deseja criar e digitar:&lt;br /&gt;
&lt;br /&gt;
 python3 -m venv venv&lt;br /&gt;
&lt;br /&gt;
Depois que seu venv estive ativo, instale as bibliotecas digitando:&lt;br /&gt;
&lt;br /&gt;
 pip3 install -r requirements.txt&lt;br /&gt;
&lt;br /&gt;
Pronto, você instalou todas as dependências. E agora rode o comando:&lt;br /&gt;
&lt;br /&gt;
 uvicorn --reload async_app:app&lt;br /&gt;
&lt;br /&gt;
A partir disso, você deve entrar no link &#039;http://localhost:8000&#039; e abrirá uma tela para controlar a garra, ela é responsiva ao seu teclado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Referências&#039;&#039;&#039;==&lt;br /&gt;
Este projeto é uma adaptação do projeto não publicado do Vitor Luiz Bortoloti Pereira.&lt;br /&gt;
&lt;br /&gt;
Para utilização do funcionamento do driver L298N, utilizei o seguinte canal: [https://www.youtube.com/@cfbcursos cfbcursos]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Agradecimentos&#039;&#039;&#039;==&lt;br /&gt;
Gostaria de agradecer a:&lt;br /&gt;
&lt;br /&gt;
Hadassa Onisaki, por ter me apresentado ao projeto e auxiliado durante o processo;&lt;br /&gt;
&lt;br /&gt;
Lucas Mata, por auxilio no funcionamento das peças;&lt;br /&gt;
&lt;br /&gt;
Christian de Oliveira Bueno, por me ajudar no desenvolvimento do código;&lt;br /&gt;
&lt;br /&gt;
Irene Ficheman, por ajudar na motivação da finalização do trabalho.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=743</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=743"/>
		<updated>2024-06-21T21:30:32Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Preparando o ambiente de desenvolvimento&#039;&#039;&#039;==&lt;br /&gt;
Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sistema:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor CC 9v:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Driver de motor L298N:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Montagem:&#039;&#039;&#039;== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Código&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Se você está aqui, acredito que já saiba como funciona a configuração dos pinos, caso não saiba, sugiro que siga os guias disponibilizados.&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino GPIO:&lt;br /&gt;
 &lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_2_-_Programando_um_LED_com_a_Labrador Guia - 2]&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino PWM:&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM Guia - 4]&lt;br /&gt;
&lt;br /&gt;
Nestes guias são comentados como utilizar os dois tipos de pino da labrador, boa sorte!&lt;br /&gt;
&lt;br /&gt;
É recomendado criar o código a seguir em um arquivo separado com a extensão .py, assim você poderá chamar o arquivo sempre que quiser, sem&lt;br /&gt;
&lt;br /&gt;
precisar ficar reescrevendo o código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:40em; overflow:auto; border: 2px solid #088&amp;quot;&amp;gt;&lt;br /&gt;
 import caninos_sdk as k9    #biblioteca caninos para configuração dos pinos&lt;br /&gt;
&lt;br /&gt;
 class Garra:                # Criando a classe Garra&lt;br /&gt;
    __is_moving = False     # Variável responsável por verificar se há movimento na garra&lt;br /&gt;
&lt;br /&gt;
    def __load_pwm_engine(self):    # Configurando os pinos PWM dos motores&lt;br /&gt;
        &#039;&#039;&#039; Habilita PWM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        time_count = 1&lt;br /&gt;
        while time_count &amp;lt;= 4:&lt;br /&gt;
            self.labrador.pin32.enable_pwm(                                     # Motor de avanço&lt;br /&gt;
                alias=&amp;quot;engine_foward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
&lt;br /&gt;
            self.labrador.pin36.enable_pwm(                                     # Motor de recuo&lt;br /&gt;
                alias=&amp;quot;engine_backward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin28.enable_pwm(                                     # Motor de esticar a garra&lt;br /&gt;
                alias=&amp;quot;engine_stretch&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin24.enable_pwm(                                     # Motor de retrair a garra&lt;br /&gt;
                alias=&amp;quot;engine_retract&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            &#039;&#039;&#039;self.labrador.pin31.enable_pwm(                                     # Motor de subir&lt;br /&gt;
                alias=&amp;quot;engine_uplift&amp;quot;, freq=25, duty_cycle=0.1*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin29.enable_pwm(                                     # Motor de descer&lt;br /&gt;
                alias=&amp;quot;engine_lower&amp;quot;, freq=25, duty_cycle=0.1*time_count)&#039;&#039;&#039;&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin11.enable_pwm(                                     # Motor de girar para a esquerda&lt;br /&gt;
                alias=&amp;quot;engine_turn_left&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin7.enable_pwm(                                     # Motor de girar para a direita&lt;br /&gt;
                alias=&amp;quot;engine_turn_right&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            time_count = time_count+1&lt;br /&gt;
&lt;br /&gt;
    def __load_gpio_engine(self): # configurando os switchs do projeto&lt;br /&gt;
        self.labrador.pin26.enable_gpio(                                       # Define o limite de recuo&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_x&amp;quot;)                     # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin18.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_x&amp;quot;)                    # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin21.enable_gpio(                                       # Define o limite de abertura da garra&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_claw&amp;quot;)                   &lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin37.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_claw&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin33.enable_gpio(                                       # define o limite de altura&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_y&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin35.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_y&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
        self.labrador.pin13.enable_gpio(                                       # define o limite da volta&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_turn&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin3.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_turn&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def __init__(self) -&amp;gt; None: #ao definir um __init__, toda vez que instanciarmos a classe:&lt;br /&gt;
        self.labrador = k9.Labrador()   # ela instanciará a biblioteca caninos_sdk&lt;br /&gt;
        self.__load_pwm_engine()    # ativará os pinos PWM dos motores&lt;br /&gt;
        self.__load_gpio_engine()   # ativará os pinos GPIO dos switchs&lt;br /&gt;
&lt;br /&gt;
    def stretch_claw(self):         # Classe definida para esticar a garra&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.start()    # ativando o pino pwm&lt;br /&gt;
            self.labrador.engine_retract.pwm.stop()     # desativando o pino pwm&lt;br /&gt;
            limit = self.labrador.stop_button_claw.read() # se o botão mandar um sinal, a garra para&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
                print(&#039;Limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Abrindo a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def retract_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
            self.labrador.engine_retract.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Fechando a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def foward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.start()&lt;br /&gt;
            self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Avançando...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def backward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.stop()&lt;br /&gt;
            self.labrador.engine_backward.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            limit = self.labrador.stop_button_x.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Recuando...&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    def uplift(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.start()&lt;br /&gt;
            self.labrador.engine_lower.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_y.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Subindo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def lower(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
            self.labrador.engine_lower.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Descendo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_right(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.start()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_turn.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Girando sentido horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_left(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Girando sentido anti-horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def stop_claw(self):&lt;br /&gt;
        self.__is_moving = False&lt;br /&gt;
        for pin in self.labrador.enabled_features:&lt;br /&gt;
            if pin.pwm is not None:&lt;br /&gt;
                pin.pwm.stop()&lt;br /&gt;
        print(&#039;Parando a garra...&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Referências&#039;&#039;&#039;==&lt;br /&gt;
Este projeto é uma adaptação do projeto não publicado do Vitor Luiz Bortoloti Pereira.&lt;br /&gt;
&lt;br /&gt;
Para utilização do funcionamento do driver L298N, utilizei o seguinte canal: [https://www.youtube.com/@cfbcursos cfbcursos]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Recomendações&#039;&#039;&#039;==&lt;br /&gt;
Caso deseje ver algo mais aprofundado, fiz com que a garra funcionasse de maneira remota a partir de uma conexão local.&lt;br /&gt;
&lt;br /&gt;
Se estiver interessado, acesse o projeto em meu github [https://github.com/ZoahZoah/garra_labrador Garra_fischertecnik} e clone o projeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Agradecimentos&#039;&#039;&#039;==&lt;br /&gt;
Gostaria de agradecer a:&lt;br /&gt;
&lt;br /&gt;
Hadassa Onisaki, por ter me apresentado ao projeto e auxiliado durante o processo;&lt;br /&gt;
&lt;br /&gt;
Lucas Mata, por auxilio no funcionamento das peças;&lt;br /&gt;
&lt;br /&gt;
Christian de Oliveira Bueno, por me ajudar no desenvolvimento do código;&lt;br /&gt;
&lt;br /&gt;
Irene Ficheman, por ajudar na motivação da finalização do trabalho.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=742</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=742"/>
		<updated>2024-06-21T21:29:52Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Preparando o ambiente de desenvolvimento&#039;&#039;&#039;==&lt;br /&gt;
Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sistema:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor CC 9v:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Driver de motor L298N:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Montagem:&#039;&#039;&#039;== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Código&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Se você está aqui, acredito que já saiba como funciona a configuração dos pinos, caso não saiba, sugiro que siga os guias disponibilizados.&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino GPIO:&lt;br /&gt;
 &lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_2_-_Programando_um_LED_com_a_Labrador Guia - 2]&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino PWM:&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM Guia - 4]&lt;br /&gt;
&lt;br /&gt;
Nestes guias são comentados como utilizar os dois tipos de pino da labrador, boa sorte!&lt;br /&gt;
&lt;br /&gt;
É recomendado criar o código a seguir em um arquivo separado com a extensão .py, assim você poderá chamar o arquivo sempre que quiser, sem&lt;br /&gt;
&lt;br /&gt;
precisar ficar reescrevendo o código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:10em; overflow:auto; border: 2px solid #088&amp;quot;&amp;gt;&lt;br /&gt;
 import caninos_sdk as k9    #biblioteca caninos para configuração dos pinos&lt;br /&gt;
&lt;br /&gt;
 class Garra:                # Criando a classe Garra&lt;br /&gt;
    __is_moving = False     # Variável responsável por verificar se há movimento na garra&lt;br /&gt;
&lt;br /&gt;
    def __load_pwm_engine(self):    # Configurando os pinos PWM dos motores&lt;br /&gt;
        &#039;&#039;&#039; Habilita PWM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        time_count = 1&lt;br /&gt;
        while time_count &amp;lt;= 4:&lt;br /&gt;
            self.labrador.pin32.enable_pwm(                                     # Motor de avanço&lt;br /&gt;
                alias=&amp;quot;engine_foward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
&lt;br /&gt;
            self.labrador.pin36.enable_pwm(                                     # Motor de recuo&lt;br /&gt;
                alias=&amp;quot;engine_backward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin28.enable_pwm(                                     # Motor de esticar a garra&lt;br /&gt;
                alias=&amp;quot;engine_stretch&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin24.enable_pwm(                                     # Motor de retrair a garra&lt;br /&gt;
                alias=&amp;quot;engine_retract&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            &#039;&#039;&#039;self.labrador.pin31.enable_pwm(                                     # Motor de subir&lt;br /&gt;
                alias=&amp;quot;engine_uplift&amp;quot;, freq=25, duty_cycle=0.1*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin29.enable_pwm(                                     # Motor de descer&lt;br /&gt;
                alias=&amp;quot;engine_lower&amp;quot;, freq=25, duty_cycle=0.1*time_count)&#039;&#039;&#039;&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin11.enable_pwm(                                     # Motor de girar para a esquerda&lt;br /&gt;
                alias=&amp;quot;engine_turn_left&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin7.enable_pwm(                                     # Motor de girar para a direita&lt;br /&gt;
                alias=&amp;quot;engine_turn_right&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            time_count = time_count+1&lt;br /&gt;
&lt;br /&gt;
    def __load_gpio_engine(self): # configurando os switchs do projeto&lt;br /&gt;
        self.labrador.pin26.enable_gpio(                                       # Define o limite de recuo&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_x&amp;quot;)                     # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin18.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_x&amp;quot;)                    # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin21.enable_gpio(                                       # Define o limite de abertura da garra&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_claw&amp;quot;)                   &lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin37.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_claw&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin33.enable_gpio(                                       # define o limite de altura&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_y&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin35.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_y&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
        self.labrador.pin13.enable_gpio(                                       # define o limite da volta&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_turn&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin3.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_turn&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def __init__(self) -&amp;gt; None: #ao definir um __init__, toda vez que instanciarmos a classe:&lt;br /&gt;
        self.labrador = k9.Labrador()   # ela instanciará a biblioteca caninos_sdk&lt;br /&gt;
        self.__load_pwm_engine()    # ativará os pinos PWM dos motores&lt;br /&gt;
        self.__load_gpio_engine()   # ativará os pinos GPIO dos switchs&lt;br /&gt;
&lt;br /&gt;
    def stretch_claw(self):         # Classe definida para esticar a garra&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.start()    # ativando o pino pwm&lt;br /&gt;
            self.labrador.engine_retract.pwm.stop()     # desativando o pino pwm&lt;br /&gt;
            limit = self.labrador.stop_button_claw.read() # se o botão mandar um sinal, a garra para&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
                print(&#039;Limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Abrindo a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def retract_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
            self.labrador.engine_retract.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Fechando a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def foward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.start()&lt;br /&gt;
            self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Avançando...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def backward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.stop()&lt;br /&gt;
            self.labrador.engine_backward.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            limit = self.labrador.stop_button_x.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Recuando...&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    def uplift(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.start()&lt;br /&gt;
            self.labrador.engine_lower.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_y.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Subindo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def lower(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
            self.labrador.engine_lower.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Descendo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_right(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.start()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_turn.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Girando sentido horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_left(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Girando sentido anti-horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def stop_claw(self):&lt;br /&gt;
        self.__is_moving = False&lt;br /&gt;
        for pin in self.labrador.enabled_features:&lt;br /&gt;
            if pin.pwm is not None:&lt;br /&gt;
                pin.pwm.stop()&lt;br /&gt;
        print(&#039;Parando a garra...&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Referências&#039;&#039;&#039;==&lt;br /&gt;
Este projeto é uma adaptação do projeto não publicado do Vitor Luiz Bortoloti Pereira.&lt;br /&gt;
&lt;br /&gt;
Para utilização do funcionamento do driver L298N, utilizei o seguinte canal: [https://www.youtube.com/@cfbcursos cfbcursos]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Recomendações&#039;&#039;&#039;==&lt;br /&gt;
Caso deseje ver algo mais aprofundado, fiz com que a garra funcionasse de maneira remota a partir de uma conexão local.&lt;br /&gt;
&lt;br /&gt;
Se estiver interessado, acesse o projeto em meu github [https://github.com/ZoahZoah/garra_labrador Garra_fischertecnik} e clone o projeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Agradecimentos&#039;&#039;&#039;==&lt;br /&gt;
Gostaria de agradecer a:&lt;br /&gt;
&lt;br /&gt;
Hadassa Onisaki, por ter me apresentado ao projeto e auxiliado durante o processo;&lt;br /&gt;
&lt;br /&gt;
Lucas Mata, por auxilio no funcionamento das peças;&lt;br /&gt;
&lt;br /&gt;
Christian de Oliveira Bueno, por me ajudar no desenvolvimento do código;&lt;br /&gt;
&lt;br /&gt;
Irene Ficheman, por ajudar na motivação da finalização do trabalho.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=731</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=731"/>
		<updated>2024-06-21T19:29:47Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Preparando o ambiente de desenvolvimento&#039;&#039;&#039;==&lt;br /&gt;
Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sistema:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor CC 9v:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Driver de motor L298N:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Montagem:&#039;&#039;&#039;== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Código&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Se você está aqui, acredito que já saiba como funciona a configuração dos pinos, caso não saiba, sugiro que siga os guias disponibilizados.&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino GPIO:&lt;br /&gt;
 &lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_2_-_Programando_um_LED_com_a_Labrador Guia - 2]&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino PWM:&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM Guia - 4]&lt;br /&gt;
&lt;br /&gt;
Nestes guias são comentados como utilizar os dois tipos de pino da labrador, boa sorte!&lt;br /&gt;
&lt;br /&gt;
É recomendado criar o código a seguir em um arquivo separado com a extensão .py, assim você poderá chamar o arquivo sempre que quiser, sem&lt;br /&gt;
&lt;br /&gt;
precisar ficar reescrevendo o código.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import caninos_sdk as k9    #biblioteca caninos para configuração dos pinos&lt;br /&gt;
&lt;br /&gt;
 class Garra:                # Criando a classe Garra&lt;br /&gt;
    __is_moving = False     # Variável responsável por verificar se há movimento na garra&lt;br /&gt;
&lt;br /&gt;
    def __load_pwm_engine(self):    # Configurando os pinos PWM dos motores&lt;br /&gt;
        &#039;&#039;&#039; Habilita PWM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        time_count = 1&lt;br /&gt;
        while time_count &amp;lt;= 4:&lt;br /&gt;
            self.labrador.pin32.enable_pwm(                                     # Motor de avanço&lt;br /&gt;
                alias=&amp;quot;engine_foward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
&lt;br /&gt;
            self.labrador.pin36.enable_pwm(                                     # Motor de recuo&lt;br /&gt;
                alias=&amp;quot;engine_backward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin28.enable_pwm(                                     # Motor de esticar a garra&lt;br /&gt;
                alias=&amp;quot;engine_stretch&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin24.enable_pwm(                                     # Motor de retrair a garra&lt;br /&gt;
                alias=&amp;quot;engine_retract&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            &#039;&#039;&#039;self.labrador.pin31.enable_pwm(                                     # Motor de subir&lt;br /&gt;
                alias=&amp;quot;engine_uplift&amp;quot;, freq=25, duty_cycle=0.1*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin29.enable_pwm(                                     # Motor de descer&lt;br /&gt;
                alias=&amp;quot;engine_lower&amp;quot;, freq=25, duty_cycle=0.1*time_count)&#039;&#039;&#039;&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin11.enable_pwm(                                     # Motor de girar para a esquerda&lt;br /&gt;
                alias=&amp;quot;engine_turn_left&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin7.enable_pwm(                                     # Motor de girar para a direita&lt;br /&gt;
                alias=&amp;quot;engine_turn_right&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            time_count = time_count+1&lt;br /&gt;
&lt;br /&gt;
    def __load_gpio_engine(self): # configurando os switchs do projeto&lt;br /&gt;
        self.labrador.pin26.enable_gpio(                                       # Define o limite de recuo&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_x&amp;quot;)                     # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin18.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_x&amp;quot;)                    # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin21.enable_gpio(                                       # Define o limite de abertura da garra&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_claw&amp;quot;)                   &lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin37.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_claw&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin33.enable_gpio(                                       # define o limite de altura&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_y&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin35.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_y&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
        self.labrador.pin13.enable_gpio(                                       # define o limite da volta&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_turn&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin3.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_turn&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def __init__(self) -&amp;gt; None: #ao definir um __init__, toda vez que instanciarmos a classe:&lt;br /&gt;
        self.labrador = k9.Labrador()   # ela instanciará a biblioteca caninos_sdk&lt;br /&gt;
        self.__load_pwm_engine()    # ativará os pinos PWM dos motores&lt;br /&gt;
        self.__load_gpio_engine()   # ativará os pinos GPIO dos switchs&lt;br /&gt;
&lt;br /&gt;
    def stretch_claw(self):         # Classe definida para esticar a garra&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.start()    # ativando o pino pwm&lt;br /&gt;
            self.labrador.engine_retract.pwm.stop()     # desativando o pino pwm&lt;br /&gt;
            limit = self.labrador.stop_button_claw.read() # se o botão mandar um sinal, a garra para&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
                print(&#039;Limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Abrindo a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def retract_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
            self.labrador.engine_retract.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Fechando a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def foward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.start()&lt;br /&gt;
            self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Avançando...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def backward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.stop()&lt;br /&gt;
            self.labrador.engine_backward.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            limit = self.labrador.stop_button_x.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Recuando...&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    def uplift(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.start()&lt;br /&gt;
            self.labrador.engine_lower.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_y.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Subindo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def lower(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
            self.labrador.engine_lower.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Descendo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_right(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.start()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_turn.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Girando sentido horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_left(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Girando sentido anti-horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def stop_claw(self):&lt;br /&gt;
        self.__is_moving = False&lt;br /&gt;
        for pin in self.labrador.enabled_features:&lt;br /&gt;
            if pin.pwm is not None:&lt;br /&gt;
                pin.pwm.stop()&lt;br /&gt;
        print(&#039;Parando a garra...&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Referências&#039;&#039;&#039;==&lt;br /&gt;
Este projeto é uma adaptação do projeto não publicado do Vitor Luiz Bortoloti Pereira.&lt;br /&gt;
&lt;br /&gt;
Para utilização do funcionamento do driver L298N, utilizei o seguinte canal: [https://www.youtube.com/@cfbcursos cfbcursos]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Recomendações&#039;&#039;&#039;==&lt;br /&gt;
Caso deseje ver algo mais aprofundado, fiz com que a garra funcionasse de maneira remota a partir de uma conexão local.&lt;br /&gt;
&lt;br /&gt;
Se estiver interessado, acesse o projeto em meu github [https://github.com/ZoahZoah/garra_labrador Garra_fischertecnik} e clone o projeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Agradecimentos&#039;&#039;&#039;==&lt;br /&gt;
Gostaria de agradecer a:&lt;br /&gt;
&lt;br /&gt;
Hadassa Onisaki, por ter me apresentado ao projeto e auxiliado durante o processo;&lt;br /&gt;
&lt;br /&gt;
Lucas Mata, por auxilio no funcionamento das peças;&lt;br /&gt;
&lt;br /&gt;
Christian de Oliveira Bueno, por me ajudar no desenvolvimento do código;&lt;br /&gt;
&lt;br /&gt;
Irene Ficheman, por ajudar na motivação da finalização do trabalho.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=730</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=730"/>
		<updated>2024-06-21T19:26:57Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Preparando o ambiente de desenvolvimento&#039;&#039;&#039;==&lt;br /&gt;
Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sistema:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor CC 9v:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Driver de motor L298N:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Montagem:&#039;&#039;&#039;== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Switch:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor Enconder 9v da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Motor 9v CC da Fischertecnik:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Código&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Se você está aqui, acredito que já saiba como funciona a configuração dos pinos, caso não saiba, sugiro que siga os guias disponibilizados.&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino GPIO:&lt;br /&gt;
 &lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_2_-_Programando_um_LED_com_a_Labrador Guia - 2]&lt;br /&gt;
&lt;br /&gt;
Configuração de um pino PWM:&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM Guia - 4]&lt;br /&gt;
&lt;br /&gt;
Nestes guias são comentados como utilizar os dois tipos de pino da labrador, boa sorte!&lt;br /&gt;
&lt;br /&gt;
É recomendado criar o código a seguir em um arquivo separado com a extensão .py, assim você poderá chamar o arquivo sempre que quiser, sem&lt;br /&gt;
&lt;br /&gt;
precisar ficar reescrevendo o código.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import caninos_sdk as k9    #biblioteca caninos para configuração dos pinos&lt;br /&gt;
&lt;br /&gt;
 class Garra:                # Criando a classe Garra&lt;br /&gt;
    __is_moving = False     # Variável responsável por verificar se há movimento na garra&lt;br /&gt;
&lt;br /&gt;
    def __load_pwm_engine(self):    # Configurando os pinos PWM dos motores&lt;br /&gt;
        &#039;&#039;&#039; Habilita PWM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        time_count = 1&lt;br /&gt;
        while time_count &amp;lt;= 4:&lt;br /&gt;
            self.labrador.pin32.enable_pwm(                                     # Motor de avanço&lt;br /&gt;
                alias=&amp;quot;engine_foward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
&lt;br /&gt;
            self.labrador.pin36.enable_pwm(                                     # Motor de recuo&lt;br /&gt;
                alias=&amp;quot;engine_backward&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin28.enable_pwm(                                     # Motor de esticar a garra&lt;br /&gt;
                alias=&amp;quot;engine_stretch&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin24.enable_pwm(                                     # Motor de retrair a garra&lt;br /&gt;
                alias=&amp;quot;engine_retract&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            &#039;&#039;&#039;self.labrador.pin31.enable_pwm(                                     # Motor de subir&lt;br /&gt;
                alias=&amp;quot;engine_uplift&amp;quot;, freq=25, duty_cycle=0.1*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin29.enable_pwm(                                     # Motor de descer&lt;br /&gt;
                alias=&amp;quot;engine_lower&amp;quot;, freq=25, duty_cycle=0.1*time_count)&#039;&#039;&#039;&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin11.enable_pwm(                                     # Motor de girar para a esquerda&lt;br /&gt;
                alias=&amp;quot;engine_turn_left&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            self.labrador.pin7.enable_pwm(                                     # Motor de girar para a direita&lt;br /&gt;
                alias=&amp;quot;engine_turn_right&amp;quot;, freq=25, duty_cycle=0.25*time_count)&lt;br /&gt;
            &lt;br /&gt;
            time_count = time_count+1&lt;br /&gt;
&lt;br /&gt;
    def __load_gpio_engine(self): # configurando os switchs do projeto&lt;br /&gt;
        self.labrador.pin26.enable_gpio(                                       # Define o limite de recuo&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_x&amp;quot;)                     # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin18.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_x&amp;quot;)                    # o &amp;quot;x&amp;quot; corresponde ao eixo de movimentação&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin21.enable_gpio(                                       # Define o limite de abertura da garra&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_claw&amp;quot;)                   &lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin37.enable_gpio(                                       # Conta as voltas dadas pelo motor&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;count_button_claw&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin33.enable_gpio(                                       # define o limite de altura&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_y&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin35.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_y&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
        self.labrador.pin13.enable_gpio(                                       # define o limite da volta&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;stop_button_turn&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        self.labrador.pin3.enable_gpio(                                       # Botão de contagem ebutido dentro do motor 9v CC encoder&lt;br /&gt;
            k9.Pin.Direction.INPUT, alias=&amp;quot;encoder_button_turn&amp;quot;)   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def __init__(self) -&amp;gt; None: #ao definir um __init__, toda vez que instanciarmos a classe:&lt;br /&gt;
        self.labrador = k9.Labrador()   # ela instanciará a biblioteca caninos_sdk&lt;br /&gt;
        self.__load_pwm_engine()    # ativará os pinos PWM dos motores&lt;br /&gt;
        self.__load_gpio_engine()   # ativará os pinos GPIO dos switchs&lt;br /&gt;
&lt;br /&gt;
    def stretch_claw(self):         # Classe definida para esticar a garra&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.start()    # ativando o pino pwm&lt;br /&gt;
            self.labrador.engine_retract.pwm.stop()     # desativando o pino pwm&lt;br /&gt;
            limit = self.labrador.stop_button_claw.read() # se o botão mandar um sinal, a garra para&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
                print(&#039;Limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Abrindo a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def retract_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_stretch.pwm.stop()&lt;br /&gt;
            self.labrador.engine_retract.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Fechando a garra...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def foward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.start()&lt;br /&gt;
            self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Avançando...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def backward_claw(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_foward.pwm.stop()&lt;br /&gt;
            self.labrador.engine_backward.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            limit = self.labrador.stop_button_x.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_backward.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Recuando...&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    def uplift(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.start()&lt;br /&gt;
            self.labrador.engine_lower.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_y.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Subindo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def lower(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_uplift.pwm.stop()&lt;br /&gt;
            self.labrador.engine_lower.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Descendo...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_right(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.start()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.stop()&lt;br /&gt;
            limit = self.labrador.stop_button_turn.read()&lt;br /&gt;
            print(limit)&lt;br /&gt;
&lt;br /&gt;
            if limit == True:&lt;br /&gt;
                self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
                self.__is_moving = False&lt;br /&gt;
                print(&#039;limite atingido&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                self.__is_moving = True&lt;br /&gt;
                print(&amp;quot;Girando sentido horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def turn_left(self):&lt;br /&gt;
        if not self.__is_moving:&lt;br /&gt;
            self.labrador.engine_turn_right.pwm.stop()&lt;br /&gt;
            self.labrador.engine_turn_left.pwm.start()&lt;br /&gt;
&lt;br /&gt;
            self.__is_moving = True&lt;br /&gt;
            print(&amp;quot;Girando sentido anti-horário...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def stop_claw(self):&lt;br /&gt;
        self.__is_moving = False&lt;br /&gt;
        for pin in self.labrador.enabled_features:&lt;br /&gt;
            if pin.pwm is not None:&lt;br /&gt;
                pin.pwm.stop()&lt;br /&gt;
        print(&#039;Parando a garra...&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Referências&#039;&#039;&#039;==&lt;br /&gt;
Este projeto é uma adaptação do projeto não publicado do Vitor Luiz Bortoloti Pereira.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para utilização do funcionamento do driver L298N, utilizei o seguinte canal: [https://www.youtube.com/@cfbcursos cfbcursos]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Recomendações&#039;&#039;&#039;==&lt;br /&gt;
Caso deseje ver algo mais aprofundado, fiz com que a garra funcionasse de maneira remota a partir de uma conexão local.&lt;br /&gt;
&lt;br /&gt;
Se estiver interessado, acesse o projeto em meu github [https://github.com/ZoahZoah/garra_labrador Garra_fischertecnik} e clone o projeto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Agradecimentos&#039;&#039;&#039;==&lt;br /&gt;
Gostaria de agradecer a:&lt;br /&gt;
&lt;br /&gt;
Hadassa Onisaki, por ter me apresentado ao projeto e auxiliado durante o processo;&lt;br /&gt;
&lt;br /&gt;
Lucas Mata, por auxilio no funcionamento das peças;&lt;br /&gt;
&lt;br /&gt;
Christian de Oliveira Bueno, por me ajudar no desenvolvimento do código;&lt;br /&gt;
&lt;br /&gt;
Irene Ficheman, por ajudar na motivação da finalização do trabalho.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=729</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=729"/>
		<updated>2024-06-21T18:56:23Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
==&#039;&#039;&#039;PREPARANDO O AMBIENTE DE DESENVOLVIMENTO&#039;&#039;&#039;==&lt;br /&gt;
Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
Sistema:&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Componentes:&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch: &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor CC 9v: &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor Enconder 9v CC da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Driver de motor L298N: &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Montagem:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Switch: &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor Enconder 9v da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor 9v CC da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;CÓDIGO FONTE&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve ESCREVER o seu código fonte com comentários.&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&lt;br /&gt;
    import caninos_sdk as k9 #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
    labrador = k9.Labrador()    #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
    labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)    #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
    labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)    #ativamos o pino 18 (da labrador), como entrada e definimos um apelido para ele&lt;br /&gt;
    #um laço de repetição para 6 iterações&lt;br /&gt;
    while True:&lt;br /&gt;
        if labrador.button1.read() == 1: # verificamos o estado do botão, caso seja ALTO, ligamos o LED&lt;br /&gt;
            labrador.led_status.high()&lt;br /&gt;
        else:                            # se não, delsigamos o LED&lt;br /&gt;
            labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;REFERÊNCIAS&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve listar qualquer página que você tenha usado como base para criar o seu projeto.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;RECOMENDAÇÕES&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve escrever qualquer coisa que não cabe em outros lugares e que você ache pertinente ao seu projeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Você pode também pode copiar e preencher este documento[https://docs.google.com/document/d/13DGOq3WX72bodbcvn35K9yOBWndCjzIFwk92ORpHpOs/edit?usp=sharing] e nos enviar.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=728</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=728"/>
		<updated>2024-06-21T13:31:34Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;PREPARANDO O AMBIENTE DE DESENVOLVIMENTO&#039;&#039;&#039;==&lt;br /&gt;
    Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
Sistema:&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Componentes:&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicação rápida sobre os componentes &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch: &lt;br /&gt;
&lt;br /&gt;
O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor CC 9v: &lt;br /&gt;
&lt;br /&gt;
Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor Enconder 9v CC da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Driver de motor L298N: &lt;br /&gt;
&lt;br /&gt;
O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Montagem:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Switch: &lt;br /&gt;
&lt;br /&gt;
O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor Enconder 9v da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor 9v CC da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;CÓDIGO FONTE&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve ESCREVER o seu código fonte com comentários.&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&lt;br /&gt;
    import caninos_sdk as k9 #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
    labrador = k9.Labrador()    #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
    labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)    #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
    labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)    #ativamos o pino 18 (da labrador), como entrada e definimos um apelido para ele&lt;br /&gt;
    #um laço de repetição para 6 iterações&lt;br /&gt;
    while True:&lt;br /&gt;
        if labrador.button1.read() == 1: # verificamos o estado do botão, caso seja ALTO, ligamos o LED&lt;br /&gt;
            labrador.led_status.high()&lt;br /&gt;
        else:                            # se não, delsigamos o LED&lt;br /&gt;
            labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;REFERÊNCIAS&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve listar qualquer página que você tenha usado como base para criar o seu projeto.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;RECOMENDAÇÕES&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve escrever qualquer coisa que não cabe em outros lugares e que você ache pertinente ao seu projeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Você pode também pode copiar e preencher este documento[https://docs.google.com/document/d/13DGOq3WX72bodbcvn35K9yOBWndCjzIFwk92ORpHpOs/edit?usp=sharing] e nos enviar.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=727</id>
		<title>Garra Fischertecnik</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Garra_Fischertecnik&amp;diff=727"/>
		<updated>2024-06-21T13:30:09Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Adicionando o processo de montagem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Garra Fischertecnik&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Introdução&#039;&#039;&#039;==&lt;br /&gt;
 Este projeto foi desenvolvido por Vitor Luiz Bortoloti Pereira e adaptado por Ivan Aguiar Mendonça. A adaptação desse projeto &lt;br /&gt;
&lt;br /&gt;
consiste em rodar a garra com um código Python através de uma página HTML, utilizando como biblioteca principal a caninos_sdk &lt;br /&gt;
&lt;br /&gt;
e a socketIO, e o mini-computador Labrador-32bits como host do servidor. &lt;br /&gt;
&lt;br /&gt;
 Vale ressaltar também que essas peças utilizadas nesse projeto são exclusivas da Fischertecnik, então para obtê-las será mais&lt;br /&gt;
dificultoso. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;PREPARANDO O AMBIENTE DE DESENVOLVIMENTO&#039;&#039;&#039;==&lt;br /&gt;
    Para o projeto utilizaremos os seguintes itens:&lt;br /&gt;
&lt;br /&gt;
Sistema:&lt;br /&gt;
&lt;br /&gt;
- Labrador 32 bits&lt;br /&gt;
&lt;br /&gt;
- Debian&lt;br /&gt;
&lt;br /&gt;
- Python == 3.7 (latest version)&lt;br /&gt;
&lt;br /&gt;
- caninos_sdk == 0.5 (latest version)&lt;br /&gt;
&lt;br /&gt;
- gpiod == 1.5.4 (latest version)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 6 botões fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 8 resistores&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC Enconder da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Motores 9v CC da Fischertecnik&lt;br /&gt;
&lt;br /&gt;
- 2 Driver de motor L298N&lt;br /&gt;
&lt;br /&gt;
- 1 Protoboard&lt;br /&gt;
&lt;br /&gt;
- 1 Fonte externa de 9v&lt;br /&gt;
&lt;br /&gt;
Explicação rápida sobre os componentes &lt;br /&gt;
&lt;br /&gt;
Switch: &lt;br /&gt;
&lt;br /&gt;
 O switch nada mais é que um botão disponibilizado para mandar um sinal INPUT para a labrador, através desse sinal podemos realizar&lt;br /&gt;
&lt;br /&gt;
algumas ações, como definir o limite de movimentação da garra e a contagem de rotações realizadas pelos motores da garra (projeto). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor CC 9v: &lt;br /&gt;
&lt;br /&gt;
 Este motor é usado para movimentar a garra para frente e para trás, e para esticar e retrair a garra, permitindo assim pegar objetos. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor Enconder 9v CC da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
 Este motor é responsável por rotacionar, subir e descer a garra. Ele também possui um codificador que ajuda a realizar a contagem &lt;br /&gt;
&lt;br /&gt;
das rotações do motor, e por conta disso, possui 3 terminais a mais que o motor anterior. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Driver de motor L298N: &lt;br /&gt;
&lt;br /&gt;
 O driver de motor L298N é uma peça que possibilitar receber uma quantidade maior de energia proveniente de uma fonte externa, além &lt;br /&gt;
&lt;br /&gt;
disso ela permite acoplar dois componentes. Neste projeto trabalharemos com duas, um a cada dois motores. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Montagem:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Switch: &lt;br /&gt;
&lt;br /&gt;
 O positivo do switch pode receber diretamente a voltagem de 3.3v liberada pelo pino 1 da Labrador, porém o retorno dele deve ser &lt;br /&gt;
&lt;br /&gt;
ligado a um resistor que será conectado ao ground e outro fio a um pino de INPUT que será responsável por receber um sinal caso &lt;br /&gt;
&lt;br /&gt;
o botão seja pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor Enconder 9v da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
 A montagem deste motor é um pouco mais complexa, ela exige uma fonte externa de 9v, apesar do driver de motor suportar uma carga &lt;br /&gt;
&lt;br /&gt;
maior como a de 12v, o motor enconder exige uma alimentação de 9v em um de seus terminais, além da alimentação já proveniente de &lt;br /&gt;
&lt;br /&gt;
seu lado positivo, então caso utilize uma carga superior a 9v, lembre-se de usar uma peça para reduzir a potência enviada. &lt;br /&gt;
&lt;br /&gt;
Vamos começar pelo lado positivo e negativo, o v1 e v2 do motor devem ser ligados no OUT 1 e OUT 2 do driver de motor (não há &lt;br /&gt;
&lt;br /&gt;
problema se inverter, mas corrija o código de acordo com sua vontade), enquanto o segundo motor será ligado no OUT3 e OUT4. Feito &lt;br /&gt;
&lt;br /&gt;
isso, ligaremos os terminais deste motor, começando pelo GND (ground) que deverá ser aplicado no GND do driver de motor que terá &lt;br /&gt;
&lt;br /&gt;
um fio conectado ao GND da Labrador; o VDD corresponde a potência do motor, ele quem receberá os 9v proveniente da fonte externa, &lt;br /&gt;
&lt;br /&gt;
para que isso ocorra você deve conectá-lo no mesmo local que provê energia para o driver de motor, no nosso caso será na entrada &lt;br /&gt;
&lt;br /&gt;
de 12v; por fim, o terceiro terminal receberá uma energia de 3.3v proveniente da Labrador que passará por um resistor enquanto &lt;br /&gt;
&lt;br /&gt;
outro fio partindo do mesmo circuito levará a informação para um pino de INPUT na Labrador. Seguido os mesmos passos com o outro &lt;br /&gt;
&lt;br /&gt;
motor, agora devemos configurar 4 pinos OUTPUT da Labrador, sendo dois para cada motor que deverá ser colocado nos pinos IN1, IN2, &lt;br /&gt;
&lt;br /&gt;
IN3 e IN4, sendo o IN1 e IN2 correspondente ao motor conectado no OUT1 e OUT2 e, o IN3 e IN4 correspondente aos motores conectados &lt;br /&gt;
&lt;br /&gt;
no OUT3 e OUT4, esses serão os fios responsáveis por enviar um sinal da Labrador para o driver de motor fazer com que os motores &lt;br /&gt;
&lt;br /&gt;
realizem alguma ação. Por fim, o driver de motor será alimentado pela fonte externa de energia, sendo o lado positivo de 9v &lt;br /&gt;
&lt;br /&gt;
acoplado na primeira entrada, onde o terminal VDD do motor foi colocado, ou seja, a entrada de 12v do driver; o lado negativo da &lt;br /&gt;
&lt;br /&gt;
bateria deverá ser aplicado no GND do driver de motor, no mesmo local de onde os grounds dos motores estão conectados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Motor 9v CC da Fischertecnik: &lt;br /&gt;
&lt;br /&gt;
 A montagem destes motores é bem semelhante ao Motor Enconder, mas bem mais simples, já que esses motores não possuem terminais. &lt;br /&gt;
&lt;br /&gt;
Aqui você conectará os motores nos pinos OUT do driver de motor, e os pinos OUTPUT da Labrador nos IN do driver de motor. A fonte &lt;br /&gt;
&lt;br /&gt;
externa poderá ser de 9v ou 12v e o lado positivo será conectado na entrada de 12v enquanto o lado negativo na entrada GND que &lt;br /&gt;
&lt;br /&gt;
deverá estar conectador com o GND da Labrador. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;CÓDIGO FONTE&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve ESCREVER o seu código fonte com comentários.&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&lt;br /&gt;
    import caninos_sdk as k9 #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
    labrador = k9.Labrador()    #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
    labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)    #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
    labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)    #ativamos o pino 18 (da labrador), como entrada e definimos um apelido para ele&lt;br /&gt;
    #um laço de repetição para 6 iterações&lt;br /&gt;
    while True:&lt;br /&gt;
        if labrador.button1.read() == 1: # verificamos o estado do botão, caso seja ALTO, ligamos o LED&lt;br /&gt;
            labrador.led_status.high()&lt;br /&gt;
        else:                            # se não, delsigamos o LED&lt;br /&gt;
            labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;REFERÊNCIAS&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve listar qualquer página que você tenha usado como base para criar o seu projeto.&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;RECOMENDAÇÕES&#039;&#039;&#039;==&lt;br /&gt;
Aqui você deve escrever qualquer coisa que não cabe em outros lugares e que você ache pertinente ao seu projeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Você pode também pode copiar e preencher este documento[https://docs.google.com/document/d/13DGOq3WX72bodbcvn35K9yOBWndCjzIFwk92ORpHpOs/edit?usp=sharing] e nos enviar.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_3_-_Controlando_um_LED_com_um_bot%C3%A3o&amp;diff=707</id>
		<title>Guia 3 - Controlando um LED com um botão</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_3_-_Controlando_um_LED_com_um_bot%C3%A3o&amp;diff=707"/>
		<updated>2024-05-28T15:42:01Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Formatando o texto&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 3 - Controlando um LED com um botão&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
de soluções que envolvem a programação de sistemas embarcados.&lt;br /&gt;
&lt;br /&gt;
Neste terceiro guia, você aprenderá a controlar um LED com um botão, para isso, utilize o Guia 3 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1x-oHMVUgGkuBOEtTRprQuQrdooxK83x-/edit?usp=sharing&amp;amp;ouid=107464440979458243615&amp;amp;rtpof=true&amp;amp;sd=true Guia 3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Introdução&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
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, &lt;br /&gt;
&lt;br /&gt;
utilizaremos a &#039;&#039;&#039;Linguagem de Programação Python&#039;&#039;&#039;, com os recursos disponibilizados na &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;. No Guia 2, verificamos como podemos &lt;br /&gt;
&lt;br /&gt;
controlar as &#039;&#039;&#039;GPIOs&#039;&#039;&#039; para garantir que seja possível enviar sinais digitais para o mundo real, por meio do uso de um LED. &lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
botão não esteja pressionado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Ao final deste experimento você será capaz de:&amp;lt;/font&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
1. Ligar e Desligar um &#039;&#039;&#039;LED&#039;&#039;&#039; utilizando um botão&lt;br /&gt;
&lt;br /&gt;
2. Realizar a leitura de um botão utilizando a Linguagem de Programação &#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Programar uma &#039;&#039;&#039;GPIO&#039;&#039;&#039;, lendo um sinal digital em uma porta de sua escolha &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Descrição do Experimento ==&lt;br /&gt;
&lt;br /&gt;
Quando programamos nosso LED, utilizamos o pin15 para controlar os estados de &amp;quot;ligado&amp;quot; ou &amp;quot;desligado&amp;quot; de acordo com uma rotina lógica que &lt;br /&gt;
&lt;br /&gt;
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, &lt;br /&gt;
&lt;br /&gt;
ou apagar o mesmo LED sempre que o Botão não estiver pressionado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação I:&#039;&#039;&#039;&lt;br /&gt;
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ê &lt;br /&gt;
&lt;br /&gt;
reiniciar a sua placa.&lt;br /&gt;
&lt;br /&gt;
Código 1. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
        sudo chown caninos /dev/gpiochip*&lt;br /&gt;
        sudo chmod g+rw /dev/gpiochip*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação II:&#039;&#039;&#039;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Código 2. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
        pip install -U caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Desta forma, você deverá:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Incluir no circuito do Guia 2 um &#039;&#039;&#039;botão&#039;&#039;&#039;, garantindo que:&lt;br /&gt;
&lt;br /&gt;
* O circuito necessário para conectá-lo junto a labrador seja adequadamente montado e;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt; seja a &#039;&#039;&#039;gpio&#039;&#039;&#039; utilizada para a leitura deste &#039;&#039;&#039;botão&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
2. Em seguida, você deve escrever um código em &#039;&#039;&#039;Python&#039;&#039;&#039;, utilizando a &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;, para que o &#039;&#039;&#039;LED&#039;&#039;&#039; acenda sempre que o &#039;&#039;&#039;botão&#039;&#039;&#039; seja &lt;br /&gt;
&lt;br /&gt;
pressionado, ou para que o &#039;&#039;&#039;LED&#039;&#039;&#039; apague enquanto o &#039;&#039;&#039;botão&#039;&#039;&#039; não estiver pressionado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;46A52F&amp;quot;&amp;gt;&#039;&#039;&#039;Discutindo a montagem do circuito&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_1_guia_2.png|thumb|400px|Figura 1]]&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
disponíveis na sua placa Labrador. Na hora de montar o seu circuito revise pelo menos duas vezes!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;46A52F&amp;quot;&amp;gt;&#039;&#039;&#039;Discutindo a montagem do programa&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para programarmos a Labrador em Python precisaremos importar a Caninos SDK. Esta biblioteca foi desenvolvida para que possamos programar de forma mais &lt;br /&gt;
&lt;br /&gt;
simples nossa labrador, e desenvolver projetos compartilháveis. &lt;br /&gt;
&lt;br /&gt;
Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, habilitar a GPIO (&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt;) que deverá ser &lt;br /&gt;
&lt;br /&gt;
definido como uma porta de entrada. Veja o Código 3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Criando uma variável do tipo Labrador para controlar o &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18.&amp;lt;/font&amp;gt;:&lt;br /&gt;
        labrador = k9.Labrador()&lt;br /&gt;
        labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Já a segunda, nos permite definir que o &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt;, associado a esta variável &#039;&#039;&#039;labrador&#039;&#039;&#039;, foi ativado como uma &#039;&#039;&#039;gpio&#039;&#039;&#039; para uso no programa (por meio da função &#039;&#039;&#039;enable_io&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Além disso, definimos que a &#039;&#039;&#039;GPIO&#039;&#039;&#039; será uma porta de &#039;&#039;&#039;entrada&#039;&#039;&#039;, por meio da constante &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&#039;&#039;&#039;k9.Pin.Direction.INPUT&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Por fim, definimos que ela receberá o apelido de&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&#039;&#039;button1&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Este apelido permite que você utilize o &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&#039;&#039;button1&#039;&#039;&#039;&amp;lt;/font&amp;gt; deste ponto em diante do código, o que torna um pouco mais fácil controlar seu código, certo?&lt;br /&gt;
&lt;br /&gt;
Para que seja possível realizar a leitura do sinal enviado para placa, quando clicamos no botão, podemos utilizar o &#039;&#039;&#039;apelido&#039;&#039;&#039; que atribuímos anteriormente a nossa &#039;&#039;&#039;GPIO&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Para realizar a leitura do estado do botão, podemos utilizar a operação apresentada no Código 4&lt;br /&gt;
&lt;br /&gt;
Código 4. O button1 (&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt;) receberá um sinal HIGH (5V) se for pressionado, ou de LOW (0V) enquanto não for pressionado:&lt;br /&gt;
&lt;br /&gt;
        labrador.button1.read()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Com estas novas instruções já somos capazes de adaptar completamente nosso código! &lt;br /&gt;
&lt;br /&gt;
        &amp;lt;font color=&amp;quot;46A52F&amp;quot;&amp;gt; Caso tenha alguma dúvida, consulte a seção &#039;&#039;&#039;Código do Experimento&#039;&#039;&#039;.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;A562CE&amp;quot;&amp;gt; &#039;&#039;&#039;Montagem do circuito&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Veja a Figura 2 para observar a montagem do circuito que incluí o botão que será acessado durante nosso experimento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_2_guia_3.jpg|thumb|400px|Figura 2]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
    #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
    import caninos_sdk as k9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
    labrador = k9.Labrador()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
    labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #ativamos o pino 18 (da labrador), como entrada e definimos um apelido para ele&lt;br /&gt;
    labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #um laço de repetição para 6 iterações&lt;br /&gt;
    while True:&lt;br /&gt;
       #verificamos o estado do botão, caso seja ALTO, ligamos o LED&lt;br /&gt;
       # se não, delsigamos o LED&lt;br /&gt;
       if labrador.button1.read() == 1:&lt;br /&gt;
            labrador.led_status.high()&lt;br /&gt;
       else:&lt;br /&gt;
            labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;Guia 4 - Controlando um led por PWM]&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_3_-_Controlando_um_LED_com_um_bot%C3%A3o&amp;diff=706</id>
		<title>Guia 3 - Controlando um LED com um botão</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_3_-_Controlando_um_LED_com_um_bot%C3%A3o&amp;diff=706"/>
		<updated>2024-05-28T15:21:09Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Adicionando a página do próximo guia ao final da página.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 3 - Controlando um LED com um botão&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Neste terceiro guia, você aprenderá a controlar um LED com um botão, para isso, utilize o Guia 3 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1x-oHMVUgGkuBOEtTRprQuQrdooxK83x-/edit?usp=sharing&amp;amp;ouid=107464440979458243615&amp;amp;rtpof=true&amp;amp;sd=true Guia 3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introdução ==&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;&#039;Linguagem de Programação Python&#039;&#039;&#039;, com os recursos disponibilizados na &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;. No Guia 2, verificamos como podemos controlar as &#039;&#039;&#039;GPIOs&#039;&#039;&#039; para garantir que seja possível enviar sinais digitais para o mundo real, por meio do uso de um LED. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Ao final deste experimento você será capaz de:&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
1. Ligar e Desligar um &#039;&#039;&#039;LED&#039;&#039;&#039; utilizando um botão&lt;br /&gt;
&lt;br /&gt;
2. Realizar a leitura de um botão utilizando a Linguagem de Programação &#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Programar uma &#039;&#039;&#039;GPIO&#039;&#039;&#039;, lendo um sinal digital em uma porta de sua escolha &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Descrição do Experimento ==&lt;br /&gt;
&lt;br /&gt;
Quando programamos nosso LED, utilizamos o pin15 para controlar os estados de &amp;quot;ligado&amp;quot; ou &amp;quot;desligado&amp;quot; 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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação I:&#039;&#039;&#039;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sudo chown caninos /dev/gpiochip*&lt;br /&gt;
        sudo chmod g+rw /dev/gpiochip*&lt;br /&gt;
&lt;br /&gt;
(Código 1. Definição de permissões para o uso das GPIOs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação II:&#039;&#039;&#039;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        pip install -U caninos-sdk&lt;br /&gt;
&lt;br /&gt;
(Código 2. Definição de permissões para o uso das GPIOs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Desta forma, você deverá:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Incluir no circuito do Guia 2 um &#039;&#039;&#039;botão&#039;&#039;&#039;, garantindo que (i) o circuito necessário para conecta-lo junto a labrador seja adequdamente montado e (ii) que o &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt; seja a &#039;&#039;&#039;gpio&#039;&#039;&#039; utilizada para a leitura deste &#039;&#039;&#039;botão&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
2. Em seguida, você deve escrever um código em &#039;&#039;&#039;Python&#039;&#039;&#039;, utilizando a &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;, para que o &#039;&#039;&#039;LED&#039;&#039;&#039; acenda sempre que o &#039;&#039;&#039;botão&#039;&#039;&#039; seja presisonado, ou para que o &#039;&#039;&#039;LED&#039;&#039;&#039; apague enquanto o &#039;&#039;&#039;botão&#039;&#039;&#039; não estiver pressionado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;46A52F&amp;quot;&amp;gt;&#039;&#039;&#039;Discutindo a montagem do circuito&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_1_guia_2.png|thumb|400px|Figura 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;46A52F&amp;quot;&amp;gt;&#039;&#039;&#039;Discutindo a montagem do programa&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, habilitar a GPIO (&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt;) que deverá ser definido como uma porta de entrada. Veja o Código 3.&lt;br /&gt;
&lt;br /&gt;
        labrador = k9.Labrador()&lt;br /&gt;
        labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)&lt;br /&gt;
(Código 3. Criando uma variável do tipo Labrador para controlar o &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18.&amp;lt;/font&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt;, associado a esta variável &#039;&#039;&#039;labrador&#039;&#039;&#039;, foi ativado como uma &#039;&#039;&#039;gpio&#039;&#039;&#039; para uso no programa (por meio da função &#039;&#039;&#039;enable_io&#039;&#039;&#039;). Além disso, definimos que a &#039;&#039;&#039;GPIO&#039;&#039;&#039; será uma porta de &#039;&#039;&#039;entrada&#039;&#039;&#039;, por meio da constante &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&#039;&#039;&#039;k9.Pin.Direction.INPUT&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Por fim, definimos que ela receberá o apelido de &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&#039;&#039;button1&#039;&#039;&#039;&amp;lt;/font&amp;gt;. Este apelido permite que você utilize o &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&#039;&#039;&#039;button1&#039;&#039;&#039;&amp;lt;/font&amp;gt; deste ponto em diante do código, o que torna um pouco mais fácil controlar seu código, certo?&lt;br /&gt;
&lt;br /&gt;
Para que seja possível realizar a leitura do sinal enviado para placa, quando clicamos no botão, podemos utilizar o &#039;&#039;&#039;apelido&#039;&#039;&#039; que atribuímos anteriormente a nossa &#039;&#039;&#039;GPIO&#039;&#039;&#039;. Para realizar a leitura do estado do botão, podemos utilizar a operação apresentada no Código 4&lt;br /&gt;
&lt;br /&gt;
        labrador.button1.read()&lt;br /&gt;
&lt;br /&gt;
(Código 4. O button1 (&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;pin18&amp;lt;/font&amp;gt;) receberá um sinal HIGH (5V) se for pressionado, ou de LOW (0V) enquanto não for pressionado.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Com estas novas instruções já somos capazes de adaptar completamente nosso código! &lt;br /&gt;
&lt;br /&gt;
        &amp;lt;font color=&amp;quot;46A52F&amp;quot;&amp;gt; Caso tenha alguma dúvida, consulte a seção &#039;&#039;&#039;Código do Experimento&#039;&#039;&#039;.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;A562CE&amp;quot;&amp;gt; &#039;&#039;&#039;Montagem do circuito&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Veja a Figura 2 para observar a montagem do circuito que incluí o botão que será acessado durante nosso experimento.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_2_guia_3.jpg|thumb|400px|Figura 2]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
    #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
    import caninos_sdk as k9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
    labrador = k9.Labrador()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
    labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #ativamos o pino 18 (da labrador), como entrada e definimos um apelido para ele&lt;br /&gt;
    labrador.pin18.enable_gpio(k9.Pin.Direction.INPUT, alias=&amp;quot;button1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #um laço de repetição para 6 iterações&lt;br /&gt;
    while True:&lt;br /&gt;
       #verificamos o estado do botão, caso seja ALTO, ligamos o LED&lt;br /&gt;
       # se não, delsigamos o LED&lt;br /&gt;
       if labrador.button1.read() == 1:&lt;br /&gt;
            labrador.led_status.high()&lt;br /&gt;
       else:&lt;br /&gt;
            labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_4_-_Controlando_um_LED_por_PWM &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;Guia 3 - Controlando um led por PWM]&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_1_-_Preparando_o_Ambiente_de_Desenvolvimento&amp;diff=705</id>
		<title>Guia 1 - Preparando o Ambiente de Desenvolvimento</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_1_-_Preparando_o_Ambiente_de_Desenvolvimento&amp;diff=705"/>
		<updated>2024-05-28T15:18:49Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Adicionando a página do próximo guia ao final da página.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 1 - Preparando o Ambiente de Desenvolvimento&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
de soluções que envolvem a programação de sistemas embarcados.&lt;br /&gt;
&lt;br /&gt;
Neste primeiro guia, você aprenderá a configurar o ambiente de desenvolvimento de sua labrador, para isso, utilize o Guia 1 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1Fbobc0WxL2OzWtLRGwHwpWkG399fbSXY/edit Guia 1]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pré-Requisitos de Sistema&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Debian 10 (Versão do Sistema Operacional)&lt;br /&gt;
*Kernel 4.X ou superior&lt;br /&gt;
*LXTerminal (Ir em: System Tools &amp;gt; LXTerminal)&lt;br /&gt;
&lt;br /&gt;
== Introdução ==&lt;br /&gt;
&lt;br /&gt;
Neste documento você encontra o passo a passo para configurar o Ambiente de Desenvolvimento que você utilizará para programar sua placa Labrador. &lt;br /&gt;
&lt;br /&gt;
Ao final deste experimento teremos:&lt;br /&gt;
&lt;br /&gt;
1. Uma IDE configurada para codificação de códigos em Python e que viabilizará que criemos programas utilizando, futuramente, as GPIOs.&lt;br /&gt;
&lt;br /&gt;
2.  versão mais atual da Caninos SDK instalada em nossa placa.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Descrição do experimento&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Neste experimento temos por objetivo instalar as dependências necessárias para que seja possível desenvolver soluções embarcadas, utilizando a Labrador,&lt;br /&gt;
&lt;br /&gt;
com linguagem de programação Python.&lt;br /&gt;
&lt;br /&gt;
As etapas necessárias para realizar as configurações de ambiente consistem em: (i) atualizar a ferramenta de pacote avançada do nosso sistema operacional&lt;br /&gt;
&lt;br /&gt;
(APT) e (ii) resolver as dependências necessários para desenvolver em linguagem Python, tal como instalar o gerenciador de pacotes padrão (pip). Além&lt;br /&gt;
&lt;br /&gt;
disso, precisaremos instalar os pacotes da Caninos SDK para utilizar os recursos disponíveis para uso da placa.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 1 - Atualizando o APT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Abra o LXTerminal (ver Figura 1) disponível em sua placa Labrador.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Figura_1_guia_1.png|thumb|400px|(FIgura 1)]]&lt;br /&gt;
&lt;br /&gt;
*Digite o trecho de código do Código 1 para atualizar o gerenciador apt de sua placa. Note que ao utilizar o comando sudo será necessário informar a senha&lt;br /&gt;
&lt;br /&gt;
de acesso da placa, que por padrão é caninos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 1. Atualizando o APT da placa labrador:&lt;br /&gt;
        sudo apt update &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 2 - Instalando PIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Ainda no LXTerminal, rode o comando disponível em Código 2 para instalação do gerenciador PIP. Observação: nesta etapa serão solicitadas liberação de &lt;br /&gt;
&lt;br /&gt;
espaço para que seja possível instalar alguns pacotes, para isso, pressione a tecla [y] para que seja possível avançar com a instalação.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 2. Instalando as dependências do Python (incluindo pip):&lt;br /&gt;
        sudo apt install python3-dev python3-pip python3-setuptools libffi-dev libssl-dev curl &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 3 - Atualizando o PIP&#039;&#039;&#039;&lt;br /&gt;
*Utilize o Código 3 para atualizar o pip em sua máquina. Caso apareça alguma mensagem de erro, significa que não foi possível realizar a instalação de &lt;br /&gt;
&lt;br /&gt;
forma correta. Neste caso, verifique os procedimentos anteriores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Verificando a versão do pip instalada:&lt;br /&gt;
        pip3 install --upgrade pip &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 4 - Instalando o Pacote Caninos SDK&#039;&#039;&#039;&lt;br /&gt;
*Por fim, rode o trecho de Código 4 para instalar os recursos de acesso as GPIOs (gpiod) e o pacote da Caninos SDK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 4. Instalando a ferramenta para codificação IDLE3:&lt;br /&gt;
        pip3 install gpiod &lt;br /&gt;
        pip3 install caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 5 - Instalando IDLE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Rode o trecho de Código 5 para instalar nossa ferramenta de edição de código (IDLE): &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 5. Instalando a ferramenta para codificação IDLE3:&lt;br /&gt;
        sudo apt-get install idle3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 6 - Executando o IDLE3&#039;&#039;&#039;&lt;br /&gt;
*E por fim, execute o Código 6 para abrir a ferramenta IDLE3:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 6. Abrindo a ferramenta para codificação IDLE3:&lt;br /&gt;
        idle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_2_-_Programando_um_LED_com_a_Labrador &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;Guia 2 - Programando um led com a Labrador]&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_2_-_Programando_um_LED_com_a_Labrador&amp;diff=704</id>
		<title>Guia 2 - Programando um LED com a Labrador</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_2_-_Programando_um_LED_com_a_Labrador&amp;diff=704"/>
		<updated>2024-05-28T15:16:52Z</updated>

		<summary type="html">&lt;p&gt;Ivan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 2 - Programando um LED com a Labrador&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
desenvolvimento de soluções que envolvem a programação de sistemas embarcados.&lt;br /&gt;
&lt;br /&gt;
Neste segundo guia você encontrará um exemplo de como programar um LED, enviando um sinal digital para uma das GPIOs disponíveis na &lt;br /&gt;
&lt;br /&gt;
Labrador, para isso, utilize o Guia 2 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1tZjkWo1yBHxC_eEfaE1qUQ8wt9h-27io/edit?usp=sharing&amp;amp;ouid=107464440979458243615&amp;amp;rtpof=true&amp;amp;sd=true Guia 2]&lt;br /&gt;
&lt;br /&gt;
Apps e Bibliotecas Necessárias:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pré-Requisito:&#039;&#039;&#039;&lt;br /&gt;
1. Guia 1 - Preparando o Ambiente de Desenvolvimento&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Introdução&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Neste documento você encontra o passo a passo para programar um LED na placa Labrador. Para isso, utilizaremos a Linguagem de Programação&lt;br /&gt;
&lt;br /&gt;
Python, com os recursos disponibilizados na Caninos SDK. A Caninos SDK consiste em um conjunto de pré-definições, elaboradas pelo time da&lt;br /&gt;
&lt;br /&gt;
Caninos Education, com o objetivo de democratizar o processo de programação das GPIOs.&lt;br /&gt;
&lt;br /&gt;
O processo de funcionamento é muito parecido com o que já existe em outras plataformas para desenvolvimento de sistemas embarcados. No &lt;br /&gt;
&lt;br /&gt;
entanto, para que seja possível utilizar a Caninos SDK é necessário que você tenha realizado o primeiro experimento &amp;quot;Guia 1 - &lt;br /&gt;
&lt;br /&gt;
Preparando o Ambiente de Desenvolvimento&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ao final deste experimento você será capaz de:&lt;br /&gt;
&lt;br /&gt;
1. Ligar e Desligar um LED utilizando Linguagem de Programação Python&lt;br /&gt;
&lt;br /&gt;
2. Programar uma GPIO, escrevendo um sinal digital em uma porta de sua escolha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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ê&lt;br /&gt;
&lt;br /&gt;
reiniciar a sua placa.&lt;br /&gt;
&lt;br /&gt;
Código 1. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
  sudo chown caninos /dev/gpiochip*&lt;br /&gt;
  &lt;br /&gt;
  sudo chmod g+rw /dev/gpiochip*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
labrador.&lt;br /&gt;
&lt;br /&gt;
Código 2. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
  pip3 install -U caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes necessários&#039;&#039;&#039;&lt;br /&gt;
*1 Placa Labrador de 32 bits&lt;br /&gt;
*1 LED &lt;br /&gt;
*1 Resistor de pelo menos 330 Ω (no exemplo utilizamos 1kΩ)&lt;br /&gt;
*2 Cabos MxF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Descrição do experimento&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Para acendermos um LED precisamos enviar um sinal de tensão que permitia que, através de uma diferença de potencial, o LED seja capaz de &lt;br /&gt;
&lt;br /&gt;
emitir um brilho. Desta forma, provocaremos esta diferença de potencial utilizando duas portas diferentes da Labrador. Uma delas será a porta&lt;br /&gt;
&lt;br /&gt;
GND que permitirá uma conexão de um sinal de referência (0V) para o nosso LED. A outra será a pin15, que permitirá que programemos de fato o &lt;br /&gt;
&lt;br /&gt;
LED, enviando ou não, sinais de tensão de acordo com o programa que iremos criar. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Desta forma, você deverá:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Montar o circuito necessário para conectar um LED junto a labrador, garantindo &lt;br /&gt;
&lt;br /&gt;
*1. O uso adequado de um resistor na montagem do circuito com o LED; &lt;br /&gt;
*2. Que o pin15 seja a GPIO utilizada para a programação deste LED.&lt;br /&gt;
&lt;br /&gt;
Em seguida, você deve escrever um código em Python, utilizando a Caninos SDK para que o LED acenda, seja estabelecida uma pausa de 1 &lt;br /&gt;
&lt;br /&gt;
segundo e então o LED apague.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do circuito&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para lhe auxiliar no processo de montagem, utilize as portas destacadas na Figura 1. Esta figura consiste em um mapeamento de cada uma das &lt;br /&gt;
&lt;br /&gt;
GPIOs disponíveis na sua placa Labrador. Na hora de montar o seu circuito revise pelo menos duas vezes! &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_1_guia_2.png|thumb|400px|(Figura 1. GPIOs disponíveis na placa labrador)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Se aprofundando um pouco mais…&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A placa Labrador, de acordo com a Figura 1, possuí um conjunto de portas de propósito geral, que servem tanto como entrada ou saída para sinais &lt;br /&gt;
&lt;br /&gt;
digitais. No entanto, algumas delas estão reservadas para funcionalidades específicas da placa ou para que possam ser utilizadas para alimentar &lt;br /&gt;
&lt;br /&gt;
circuitos que utilizaremos em nosso experimento. Por exemplo, a GPIO de número 1 está associada a uma tensão de 3.3V.&lt;br /&gt;
&lt;br /&gt;
Neste experimento vamos programar um LED, acendendo-o e apagando-o em intervalos de meio segundo. Para isso, utilizaremos duas portas disponíveis&lt;br /&gt;
&lt;br /&gt;
no labrador: a pin15 (ver Figura 1) que será utilizada para definir quando o LED deve acender e quando ele deve apagar. E a porta GND que será&lt;br /&gt;
&lt;br /&gt;
utilizada como uma referência de tensão (0V) GND. &lt;br /&gt;
&lt;br /&gt;
Você pode escolher qualquer uma das portas GND disponíveis, mas caso tenha dúvidas, confira a montagem na seção &amp;quot;Montagem do Circuito&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do programa&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para programarmos a Labrador em Python precisaremos importar &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;. Esta biblioteca foi desenvolvida para que possamos programar &lt;br /&gt;
&lt;br /&gt;
de forma mais simples nossa labrador, e desenvolver projetos compartilháveis. Além disso, precisaremos importar a biblioteca &#039;&#039;&#039;time&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
para garantir as pausas de acordo com o enunciado (ver Código 3).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Importando as bibliotecas necessárias:&lt;br /&gt;
&lt;br /&gt;
             import caninos_sdk as k9&lt;br /&gt;
             import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, vamos habilitar o pin15 (nosso pin15) que &lt;br /&gt;
&lt;br /&gt;
deverá ser definido como uma porta de saída. Veja o Código 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 4. Criando uma variável do tipo Labrador para controlar o pin15:&lt;br /&gt;
&lt;br /&gt;
             labrador = k9.Labrador()&lt;br /&gt;
             labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note que de acordo com o Código 4 realizamos duas operações distintas. Na primeira, criamos uma variável labrador e na segunda definimos que &lt;br /&gt;
&lt;br /&gt;
o pin15, 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, &lt;br /&gt;
&lt;br /&gt;
definimos que a GPIO será uma porta de saída, por meio da constante k9.Pin.Direction.OUTPUT e que ela receberá o apelido de led status. Este &lt;br /&gt;
&lt;br /&gt;
apelido permite que você utilize ele como uma constante, deste ponto em diante do código.&lt;br /&gt;
&lt;br /&gt;
Para enviarmos um sinal de alto para esta GPIO podemos utilizar, de agora em diante, o apelido que criamos, conforme o Código 4. Para &lt;br /&gt;
&lt;br /&gt;
enviarmos um sinal de HIGH (5V), podemos utilizar o algoritmo representado no Código 5. Caso seja necessário enviar um sinal de 0V, podemos &lt;br /&gt;
&lt;br /&gt;
enviar um sinal de LOW, de acordo com o Código 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 5. O led_status (pin15) receberá um sinal de tensão HIGH (5V):&lt;br /&gt;
&lt;br /&gt;
             labrador.led_status.high()&lt;br /&gt;
&lt;br /&gt;
Código 6. O led_status (pin15) receberá um sinal de tensão LOW (0V):&lt;br /&gt;
&lt;br /&gt;
             labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veja que mantivemos o acesso a variável labrador, porém utilizamos o apelido que criamos no Código 4 para realizar as operações de acender e &lt;br /&gt;
&lt;br /&gt;
apagar um led. Por fim, lembre-se que para realizar as pausas entre o comando de ligar e desligar o led, será necessário implementar um delay. &lt;br /&gt;
&lt;br /&gt;
Para isso, utilize o comando disponível no Código 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 7. Comando de delay com o uso da biblioteca timer:&lt;br /&gt;
&lt;br /&gt;
             time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
Caso tenha alguma dúvida, consulte a seção &amp;quot;Código do Experimento&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Montagem do Circuito&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_2_guia_2.jpg|thumb|300px|(Figura 2. Conexão dos pinos na Labrador)]]&lt;br /&gt;
&lt;br /&gt;
Quando elaboramos um projeto que envolve o uso de microcontroladores é importante identificarmos que dois projetos distintos devem ser &lt;br /&gt;
realizados:&lt;br /&gt;
&lt;br /&gt;
1. A montagem dos recursos físicos do projeto (hardware) e;&lt;br /&gt;
&lt;br /&gt;
2. a montagem do código de programação que permitirá o controle e acesso aos recursos disponibilizados pelo projeto físico.&lt;br /&gt;
&lt;br /&gt;
O projeto físico neste experimento consiste em acender um LED utilizando a labrador como uma placa que permita o controle dos recursos &lt;br /&gt;
&lt;br /&gt;
disponíveis no mundo real. A Figura 2 permite identificar a montagem de parte deste circuito, a que está associada a Labrador. Nesta &lt;br /&gt;
&lt;br /&gt;
montagem especificamos uma GPIO para sinal de referência GND e outra GPIO (pin15) que será controlada via código de programação.&lt;br /&gt;
&lt;br /&gt;
Veja a Figura 3 para observar a montagem do circuito do LED que será controlado. O LED possuí duas polaridades distintas. Visualmente, &lt;br /&gt;
&lt;br /&gt;
podemos identificar a polaridade positiva com a perna do LED mais &amp;quot;cumprida&amp;quot;, esta deve ser conectada em série com o resistor. Já a perna &lt;br /&gt;
&lt;br /&gt;
mais &amp;quot;curta&amp;quot;, de polaridade negativa, deve ser conectada em série com a conexão GND.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_3_guia_2.jpg|thumb|400px|left|(Figura 3. Conexão dos pinos da Labrador na Protoboard)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na Figura 3 conectamos as outras pontas dos conectores que associamos à placa Labrador &lt;br /&gt;
&lt;br /&gt;
na Figura 2. Após isso, conectamos nosso resistor, em série, para garantir que o sinal &lt;br /&gt;
&lt;br /&gt;
enviado pela pin15 da labrador passe primeiro pelo resistor indicado na Figura 3, e &lt;br /&gt;
&lt;br /&gt;
somente após isso seja transmitido ao LED. Por fim, conectamos o fio marrom na outra &lt;br /&gt;
&lt;br /&gt;
extremidade do nosso led.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Código do Experimento&#039;&#039;&#039; ==&lt;br /&gt;
               #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
               import caninos_sdk as k9&lt;br /&gt;
               #esta biblioteca permite gerar uma pausa na labrador (um delay)&lt;br /&gt;
               import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
               labrador = k9.Labrador()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
               labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #um laço de repetição para 6 iterações&lt;br /&gt;
               for i in range(0, 6):&lt;br /&gt;
                  #na labrador, acessamos o LED habilitado como saída (led_status)&lt;br /&gt;
                  #enviamos então, um sinal de ALTO para o pin15&lt;br /&gt;
                  labrador.led_status.high()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                  #uma pausa de meio segundo&lt;br /&gt;
                  time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #enviamos um sinal de BAIXO para o pin15&lt;br /&gt;
               labrador.led_status.low()&lt;br /&gt;
               time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wiki.caninosloucos.org/index.php/Guia_3_-_Controlando_um_LED_com_um_bot%C3%A3o &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;Guia 3 - Controlando um led com um botão]&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_2_-_Programando_um_LED_com_a_Labrador&amp;diff=703</id>
		<title>Guia 2 - Programando um LED com a Labrador</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_2_-_Programando_um_LED_com_a_Labrador&amp;diff=703"/>
		<updated>2024-05-28T14:56:25Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Removida a redundância do código onde após o código 4, ele voltava a repetir o que já foi escrito.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 2 - Programando um LED com a Labrador&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
desenvolvimento de soluções que envolvem a programação de sistemas embarcados.&lt;br /&gt;
&lt;br /&gt;
Neste segundo guia você encontrará um exemplo de como programar um LED, enviando um sinal digital para uma das GPIOs disponíveis na &lt;br /&gt;
&lt;br /&gt;
Labrador, para isso, utilize o Guia 2 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1tZjkWo1yBHxC_eEfaE1qUQ8wt9h-27io/edit?usp=sharing&amp;amp;ouid=107464440979458243615&amp;amp;rtpof=true&amp;amp;sd=true Guia 2]&lt;br /&gt;
&lt;br /&gt;
Apps e Bibliotecas Necessárias:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pré-Requisito:&#039;&#039;&#039;&lt;br /&gt;
1. Guia 1 - Preparando o Ambiente de Desenvolvimento&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Introdução&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Neste documento você encontra o passo a passo para programar um LED na placa Labrador. Para isso, utilizaremos a Linguagem de Programação&lt;br /&gt;
&lt;br /&gt;
Python, com os recursos disponibilizados na Caninos SDK. A Caninos SDK consiste em um conjunto de pré-definições, elaboradas pelo time da&lt;br /&gt;
&lt;br /&gt;
Caninos Education, com o objetivo de democratizar o processo de programação das GPIOs.&lt;br /&gt;
&lt;br /&gt;
O processo de funcionamento é muito parecido com o que já existe em outras plataformas para desenvolvimento de sistemas embarcados. No &lt;br /&gt;
&lt;br /&gt;
entanto, para que seja possível utilizar a Caninos SDK é necessário que você tenha realizado o primeiro experimento &amp;quot;Guia 1 - &lt;br /&gt;
&lt;br /&gt;
Preparando o Ambiente de Desenvolvimento&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ao final deste experimento você será capaz de:&lt;br /&gt;
&lt;br /&gt;
1. Ligar e Desligar um LED utilizando Linguagem de Programação Python&lt;br /&gt;
&lt;br /&gt;
2. Programar uma GPIO, escrevendo um sinal digital em uma porta de sua escolha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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ê&lt;br /&gt;
&lt;br /&gt;
reiniciar a sua placa.&lt;br /&gt;
&lt;br /&gt;
Código 1. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
  sudo chown caninos /dev/gpiochip*&lt;br /&gt;
  &lt;br /&gt;
  sudo chmod g+rw /dev/gpiochip*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
labrador.&lt;br /&gt;
&lt;br /&gt;
Código 2. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
  pip3 install -U caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes necessários&#039;&#039;&#039;&lt;br /&gt;
*1 Placa Labrador de 32 bits&lt;br /&gt;
*1 LED &lt;br /&gt;
*1 Resistor de pelo menos 330 Ω (no exemplo utilizamos 1kΩ)&lt;br /&gt;
*2 Cabos MxF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Descrição do experimento&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Para acendermos um LED precisamos enviar um sinal de tensão que permitia que, através de uma diferença de potencial, o LED seja capaz de &lt;br /&gt;
&lt;br /&gt;
emitir um brilho. Desta forma, provocaremos esta diferença de potencial utilizando duas portas diferentes da Labrador. Uma delas será a porta&lt;br /&gt;
&lt;br /&gt;
GND que permitirá uma conexão de um sinal de referência (0V) para o nosso LED. A outra será a pin15, que permitirá que programemos de fato o &lt;br /&gt;
&lt;br /&gt;
LED, enviando ou não, sinais de tensão de acordo com o programa que iremos criar. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Desta forma, você deverá:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Montar o circuito necessário para conectar um LED junto a labrador, garantindo &lt;br /&gt;
&lt;br /&gt;
*1. O uso adequado de um resistor na montagem do circuito com o LED; &lt;br /&gt;
*2. Que o pin15 seja a GPIO utilizada para a programação deste LED.&lt;br /&gt;
&lt;br /&gt;
Em seguida, você deve escrever um código em Python, utilizando a Caninos SDK para que o LED acenda, seja estabelecida uma pausa de 1 &lt;br /&gt;
&lt;br /&gt;
segundo e então o LED apague.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do circuito&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para lhe auxiliar no processo de montagem, utilize as portas destacadas na Figura 1. Esta figura consiste em um mapeamento de cada uma das &lt;br /&gt;
&lt;br /&gt;
GPIOs disponíveis na sua placa Labrador. Na hora de montar o seu circuito revise pelo menos duas vezes! &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_1_guia_2.png|thumb|400px|(Figura 1. GPIOs disponíveis na placa labrador)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Se aprofundando um pouco mais…&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A placa Labrador, de acordo com a Figura 1, possuí um conjunto de portas de propósito geral, que servem tanto como entrada ou saída para sinais &lt;br /&gt;
&lt;br /&gt;
digitais. No entanto, algumas delas estão reservadas para funcionalidades específicas da placa ou para que possam ser utilizadas para alimentar &lt;br /&gt;
&lt;br /&gt;
circuitos que utilizaremos em nosso experimento. Por exemplo, a GPIO de número 1 está associada a uma tensão de 3.3V.&lt;br /&gt;
&lt;br /&gt;
Neste experimento vamos programar um LED, acendendo-o e apagando-o em intervalos de meio segundo. Para isso, utilizaremos duas portas disponíveis&lt;br /&gt;
&lt;br /&gt;
no labrador: a pin15 (ver Figura 1) que será utilizada para definir quando o LED deve acender e quando ele deve apagar. E a porta GND que será&lt;br /&gt;
&lt;br /&gt;
utilizada como uma referência de tensão (0V) GND. &lt;br /&gt;
&lt;br /&gt;
Você pode escolher qualquer uma das portas GND disponíveis, mas caso tenha dúvidas, confira a montagem na seção &amp;quot;Montagem do Circuito&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do programa&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para programarmos a Labrador em Python precisaremos importar &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;. Esta biblioteca foi desenvolvida para que possamos programar &lt;br /&gt;
&lt;br /&gt;
de forma mais simples nossa labrador, e desenvolver projetos compartilháveis. Além disso, precisaremos importar a biblioteca &#039;&#039;&#039;time&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
para garantir as pausas de acordo com o enunciado (ver Código 3).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Importando as bibliotecas necessárias:&lt;br /&gt;
&lt;br /&gt;
             import caninos_sdk as k9&lt;br /&gt;
             import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, vamos habilitar o pin15 (nosso pin15) que &lt;br /&gt;
&lt;br /&gt;
deverá ser definido como uma porta de saída. Veja o Código 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 4. Criando uma variável do tipo Labrador para controlar o pin15:&lt;br /&gt;
&lt;br /&gt;
             labrador = k9.Labrador()&lt;br /&gt;
             labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note que de acordo com o Código 4 realizamos duas operações distintas. Na primeira, criamos uma variável labrador e na segunda definimos que &lt;br /&gt;
&lt;br /&gt;
o pin15, 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, &lt;br /&gt;
&lt;br /&gt;
definimos que a GPIO será uma porta de saída, por meio da constante k9.Pin.Direction.OUTPUT e que ela receberá o apelido de led status. Este &lt;br /&gt;
&lt;br /&gt;
apelido permite que você utilize ele como uma constante, deste ponto em diante do código.&lt;br /&gt;
&lt;br /&gt;
Para enviarmos um sinal de alto para esta GPIO podemos utilizar, de agora em diante, o apelido que criamos, conforme o Código 4. Para &lt;br /&gt;
&lt;br /&gt;
enviarmos um sinal de HIGH (5V), podemos utilizar o algoritmo representado no Código 5. Caso seja necessário enviar um sinal de 0V, podemos &lt;br /&gt;
&lt;br /&gt;
enviar um sinal de LOW, de acordo com o Código 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 5. O led_status (pin15) receberá um sinal de tensão HIGH (5V):&lt;br /&gt;
&lt;br /&gt;
             labrador.led_status.high()&lt;br /&gt;
&lt;br /&gt;
Código 6. O led_status (pin15) receberá um sinal de tensão LOW (0V):&lt;br /&gt;
&lt;br /&gt;
             labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veja que mantivemos o acesso a variável labrador, porém utilizamos o apelido que criamos no Código 4 para realizar as operações de acender e &lt;br /&gt;
&lt;br /&gt;
apagar um led. Por fim, lembre-se que para realizar as pausas entre o comando de ligar e desligar o led, será necessário implementar um delay. &lt;br /&gt;
&lt;br /&gt;
Para isso, utilize o comando disponível no Código 7.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 7. Comando de delay com o uso da biblioteca timer:&lt;br /&gt;
&lt;br /&gt;
             time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
Caso tenha alguma dúvida, consulte a seção &amp;quot;Código do Experimento&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Montagem do Circuito&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_2_guia_2.jpg|thumb|300px|(Figura 2. Conexão dos pinos na Labrador)]]&lt;br /&gt;
&lt;br /&gt;
Quando elaboramos um projeto que envolve o uso de microcontroladores é importante identificarmos que dois projetos distintos devem ser &lt;br /&gt;
realizados:&lt;br /&gt;
&lt;br /&gt;
1. A montagem dos recursos físicos do projeto (hardware) e;&lt;br /&gt;
&lt;br /&gt;
2. a montagem do código de programação que permitirá o controle e acesso aos recursos disponibilizados pelo projeto físico.&lt;br /&gt;
&lt;br /&gt;
O projeto físico neste experimento consiste em acender um LED utilizando a labrador como uma placa que permita o controle dos recursos &lt;br /&gt;
&lt;br /&gt;
disponíveis no mundo real. A Figura 2 permite identificar a montagem de parte deste circuito, a que está associada a Labrador. Nesta &lt;br /&gt;
&lt;br /&gt;
montagem especificamos uma GPIO para sinal de referência GND e outra GPIO (pin15) que será controlada via código de programação.&lt;br /&gt;
&lt;br /&gt;
Veja a Figura 3 para observar a montagem do circuito do LED que será controlado. O LED possuí duas polaridades distintas. Visualmente, &lt;br /&gt;
&lt;br /&gt;
podemos identificar a polaridade positiva com a perna do LED mais &amp;quot;cumprida&amp;quot;, esta deve ser conectada em série com o resistor. Já a perna &lt;br /&gt;
&lt;br /&gt;
mais &amp;quot;curta&amp;quot;, de polaridade negativa, deve ser conectada em série com a conexão GND.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_3_guia_2.jpg|thumb|400px|left|(Figura 3. Conexão dos pinos da Labrador na Protoboard)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na Figura 3 conectamos as outras pontas dos conectores que associamos à placa Labrador &lt;br /&gt;
&lt;br /&gt;
na Figura 2. Após isso, conectamos nosso resistor, em série, para garantir que o sinal &lt;br /&gt;
&lt;br /&gt;
enviado pela pin15 da labrador passe primeiro pelo resistor indicado na Figura 3, e &lt;br /&gt;
&lt;br /&gt;
somente após isso seja transmitido ao LED. Por fim, conectamos o fio marrom na outra &lt;br /&gt;
&lt;br /&gt;
extremidade do nosso led.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Código do Experimento&#039;&#039;&#039; ==&lt;br /&gt;
               #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
               import caninos_sdk as k9&lt;br /&gt;
               #esta biblioteca permite gerar uma pausa na labrador (um delay)&lt;br /&gt;
               import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
               labrador = k9.Labrador()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
               labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #um laço de repetição para 6 iterações&lt;br /&gt;
               for i in range(0, 6):&lt;br /&gt;
                  #na labrador, acessamos o LED habilitado como saída (led_status)&lt;br /&gt;
                  #enviamos então, um sinal de ALTO para o pin15&lt;br /&gt;
                  labrador.led_status.high()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                  #uma pausa de meio segundo&lt;br /&gt;
                  time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #enviamos um sinal de BAIXO para o pin15&lt;br /&gt;
               labrador.led_status.low()&lt;br /&gt;
               time.sleep(0.5)&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_2_-_Programando_um_LED_com_a_Labrador&amp;diff=702</id>
		<title>Guia 2 - Programando um LED com a Labrador</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_2_-_Programando_um_LED_com_a_Labrador&amp;diff=702"/>
		<updated>2024-05-28T14:21:17Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Alteração na formatação e disposição do texto&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 2 - Programando um LED com a Labrador&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
&lt;br /&gt;
desenvolvimento de soluções que envolvem a programação de sistemas embarcados.&lt;br /&gt;
&lt;br /&gt;
Neste segundo guia você encontrará um exemplo de como programar um LED, enviando um sinal digital para uma das GPIOs disponíveis na &lt;br /&gt;
&lt;br /&gt;
Labrador, para isso, utilize o Guia 2 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1tZjkWo1yBHxC_eEfaE1qUQ8wt9h-27io/edit?usp=sharing&amp;amp;ouid=107464440979458243615&amp;amp;rtpof=true&amp;amp;sd=true Guia 2]&lt;br /&gt;
&lt;br /&gt;
Apps e Bibliotecas Necessárias:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pré-Requisito:&#039;&#039;&#039;&lt;br /&gt;
1. Guia 1 - Preparando o Ambiente de Desenvolvimento&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Introdução&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Neste documento você encontra o passo a passo para programar um LED na placa Labrador. Para isso, utilizaremos a Linguagem de Programação&lt;br /&gt;
&lt;br /&gt;
Python, com os recursos disponibilizados na Caninos SDK. A Caninos SDK consiste em um conjunto de pré-definições, elaboradas pelo time da&lt;br /&gt;
&lt;br /&gt;
Caninos Education, com o objetivo de democratizar o processo de programação das GPIOs.&lt;br /&gt;
&lt;br /&gt;
O processo de funcionamento é muito parecido com o que já existe em outras plataformas para desenvolvimento de sistemas embarcados. No &lt;br /&gt;
&lt;br /&gt;
entanto, para que seja possível utilizar a Caninos SDK é necessário que você tenha realizado o primeiro experimento &amp;quot;Guia 1 - &lt;br /&gt;
&lt;br /&gt;
Preparando o Ambiente de Desenvolvimento&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ao final deste experimento você será capaz de:&lt;br /&gt;
&lt;br /&gt;
1. Ligar e Desligar um LED utilizando Linguagem de Programação Python&lt;br /&gt;
&lt;br /&gt;
2. Programar uma GPIO, escrevendo um sinal digital em uma porta de sua escolha&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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ê&lt;br /&gt;
&lt;br /&gt;
reiniciar a sua placa.&lt;br /&gt;
&lt;br /&gt;
Código 1. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
  sudo chown caninos /dev/gpiochip*&lt;br /&gt;
  &lt;br /&gt;
  sudo chmod g+rw /dev/gpiochip*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Observação 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
labrador.&lt;br /&gt;
&lt;br /&gt;
Código 2. Definição de permissões para o uso das GPIOs:&lt;br /&gt;
&lt;br /&gt;
  pip3 install -U caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Componentes necessários&#039;&#039;&#039;&lt;br /&gt;
*1 Placa Labrador de 32 bits&lt;br /&gt;
*1 LED &lt;br /&gt;
*1 Resistor de pelo menos 330 Ω (no exemplo utilizamos 1kΩ)&lt;br /&gt;
*2 Cabos MxF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Descrição do experimento&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Para acendermos um LED precisamos enviar um sinal de tensão que permitia que, através de uma diferença de potencial, o LED seja capaz de &lt;br /&gt;
&lt;br /&gt;
emitir um brilho. Desta forma, provocaremos esta diferença de potencial utilizando duas portas diferentes da Labrador. Uma delas será a porta&lt;br /&gt;
&lt;br /&gt;
GND que permitirá uma conexão de um sinal de referência (0V) para o nosso LED. A outra será a pin15, que permitirá que programemos de fato o &lt;br /&gt;
&lt;br /&gt;
LED, enviando ou não, sinais de tensão de acordo com o programa que iremos criar. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Desta forma, você deverá:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. Montar o circuito necessário para conectar um LED junto a labrador, garantindo (i) o uso adequado de um resistor na montagem do circuito com&lt;br /&gt;
&lt;br /&gt;
o LED e (ii) que o pin15 seja a gpio utilizada para a programação deste LED.&lt;br /&gt;
&lt;br /&gt;
2. Em seguida, você deve escrever um código em Python, utilizando a Caninos SDK para que o LED acenda, seja estabelecida uma pausa de 1 segundo&lt;br /&gt;
&lt;br /&gt;
e então o LED apague.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do circuito&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para lhe auxiliar no processo de montagem, utilize as portas destacadas na Figura 1. Esta figura consiste em um mapeamento de cada uma das &lt;br /&gt;
&lt;br /&gt;
GPIOs disponíveis na sua placa Labrador. Na hora de montar o seu circuito revise pelo menos duas vezes! &lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_1_guia_2.png|thumb|400px|(Figura 1. GPIOs disponíveis na placa labrador)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Se aprofundando um pouco mais…&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A placa Labrador, de acordo com a Figura 1, possuí um conjunto de portas de propósito geral, que servem tanto como entrada ou saída para sinais &lt;br /&gt;
&lt;br /&gt;
digitais. No entanto, algumas delas estão reservadas para funcionalidades específicas da placa ou para que possam ser utilizadas para alimentar &lt;br /&gt;
&lt;br /&gt;
circuitos que utilizaremos em nosso experimento. Por exemplo, a GPIO de número 1 está associada a uma tensão de 3.3V.&lt;br /&gt;
&lt;br /&gt;
Neste experimento vamos programar um LED, acendendo-o e apagando-o em intervalos de meio segundo. Para isso, utilizaremos duas portas disponíveis&lt;br /&gt;
&lt;br /&gt;
no labrador: a pin15 (ver Figura 1) que será utilizada para definir quando o LED deve acender e quando ele deve apagar. E a porta GND que será&lt;br /&gt;
&lt;br /&gt;
utilizada como uma referência de tensão (0V) GND. &lt;br /&gt;
&lt;br /&gt;
Você pode escolher qualquer uma das portas GND disponíveis, mas caso tenha dúvidas, confira a montagem na seção &amp;quot;Montagem do Circuito&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do programa&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para programarmos a Labrador em Python precisaremos importar &#039;&#039;&#039;Caninos SDK&#039;&#039;&#039;. Esta biblioteca foi desenvolvida para que possamos programar &lt;br /&gt;
&lt;br /&gt;
de forma mais simples nossa labrador, e desenvolver projetos compartilháveis. Além disso, precisaremos importar a biblioteca &#039;&#039;&#039;time&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
para garantir as pausas de acordo com o enunciado (ver Código 3).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Importando as bibliotecas necessárias:&lt;br /&gt;
&lt;br /&gt;
             import caninos_sdk as k9&lt;br /&gt;
             import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, vamos habilitar o pin15 (nosso pin15) que &lt;br /&gt;
&lt;br /&gt;
deverá ser definido como uma porta de saída. Veja o Código 4.&lt;br /&gt;
&lt;br /&gt;
Código 4. Criando uma variável do tipo Labrador para controlar o pin15:&lt;br /&gt;
&lt;br /&gt;
             labrador = k9.Labrador()&lt;br /&gt;
             labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para acendermos um LED precisamos enviar um sinal de tensão que permitia que, através de uma diferença de potencial, o LED seja capaz de &lt;br /&gt;
&lt;br /&gt;
emitir um brilho. Desta forma, provocaremos esta diferença de potencial utilizando duas portas diferentes da Labrador. Uma delas será a &lt;br /&gt;
&lt;br /&gt;
porta GND que permitirá uma conexão de um sinal de referência (0V) para o nosso LED. A outra será a pin15, que permitirá que programemos&lt;br /&gt;
&lt;br /&gt;
de fato o LED, enviando ou não, sinais de tensão de acordo com o programa que iremos criar. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Desta forma, você deverá:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Montar o circuito necessário para conectar um LED junto a labrador, garantindo &lt;br /&gt;
&lt;br /&gt;
*1. O uso adequado de um resistor na montagem do circuito com o LED; &lt;br /&gt;
*2. Que o pin15 seja a GPIO utilizada para a programação deste LED.&lt;br /&gt;
&lt;br /&gt;
Em seguida, você deve escrever um código em Python, utilizando a Caninos SDK para que o LED acenda, seja estabelecida uma pausa de 1 &lt;br /&gt;
&lt;br /&gt;
segundo  e então o LED apague.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do circuito&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para lhe auxiliar no processo de montagem, utilize as portas destacadas na Figura 1. Esta figura consiste em um mapeamento de cada uma das &lt;br /&gt;
&lt;br /&gt;
GPIOs disponíveis na sua placa Labrador. Na hora de montar o seu circuito revise pelo menos duas vezes! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Se aprofundando um pouco mais…&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A placa Labrador, de acordo com a Figura 1, possuí um conjunto de portas de propósito geral, que servem tanto como entrada ou saída para &lt;br /&gt;
&lt;br /&gt;
sinais digitais. No entanto, algumas delas estão reservadas para funcionalidades específicas da placa ou para que possam ser utilizadas &lt;br /&gt;
&lt;br /&gt;
para alimentar circuitos que utilizaremos em nosso experimento. Por exemplo, a GPIO de número 1 está associada a uma tensão de 3.3V.&lt;br /&gt;
&lt;br /&gt;
Neste experimento vamos programar um LED, acendendo-o e apagando-o em intervalos de meio segundo. Para isso, utilizaremos duas portas &lt;br /&gt;
&lt;br /&gt;
disponíveis no labrador: a pin15 (ver Figura 1) que será utilizada para definir quando o LED deve acender e quando ele deve apagar. E a &lt;br /&gt;
&lt;br /&gt;
porta GND que será utilizada como uma referência de tensão (0V) GND. &lt;br /&gt;
&lt;br /&gt;
Você pode escolher qualquer uma das portas GND disponíveis, mas caso tenha dúvidas, confira a montagem na seção &amp;quot;Montagem do Circuito&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Discutindo a montagem do programa&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Para programarmos a Labrador em Python precisaremos importar Caninos SDK. Esta biblioteca foi desenvolvida para que possamos programar de &lt;br /&gt;
&lt;br /&gt;
forma mais simples nossa labrador, e desenvolver projetos compartilháveis. Além disso, precisaremos importar a biblioteca &#039;&#039;&#039;time&#039;&#039;&#039; para &lt;br /&gt;
&lt;br /&gt;
garantir as pausas de acordo com o enunciado (ver Código 3).&lt;br /&gt;
&lt;br /&gt;
Código 3. Importando as bibliotecas necessárias:&lt;br /&gt;
&lt;br /&gt;
             import caninos_sdk as k9&lt;br /&gt;
             import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Após isso, precisamos criar uma variável para acessar os recursos da placa Labrador e em seguida, vamos habilitar o pin15 (nosso pin15) que &lt;br /&gt;
&lt;br /&gt;
deverá ser definido como uma porta de saída. Veja o Código 4.&lt;br /&gt;
&lt;br /&gt;
Código 4. Criando uma variável do tipo Labrador para controlar o pin15:&lt;br /&gt;
&lt;br /&gt;
             labrador = k9.Labrador()&lt;br /&gt;
             labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Note que de acordo com o Código 4 realizamos duas operações distintas. Na primeira, criamos uma variável labrador e na segunda definimos que &lt;br /&gt;
&lt;br /&gt;
o pin15, 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, &lt;br /&gt;
&lt;br /&gt;
definimos que a GPIO será uma porta de saída, por meio da constante k9.Pin.Direction.OUTPUT e que ela receberá o apelido de led status. Este &lt;br /&gt;
&lt;br /&gt;
apeliado permite que você utilize ele como uma constante, deste ponto em diante do código.&lt;br /&gt;
&lt;br /&gt;
Para enviarmos um sinal de alto para esta GPIO podemos utilizar, de agora em diante, o apelido que criamos, conforme o Código 4. Para &lt;br /&gt;
&lt;br /&gt;
enviarmos um sinal de HIGH (5V), podemos utilizar o algoritmo representado no Código 5. Caso seja necessário enviar um sinal de 0V, podemos &lt;br /&gt;
&lt;br /&gt;
enviar um sinal de LOW, de acordo com o Código 6.&lt;br /&gt;
&lt;br /&gt;
Código 5. O led_status (pin15) receberá um sinal de tensão HIGH (5V):&lt;br /&gt;
&lt;br /&gt;
             labrador.led_status.high()&lt;br /&gt;
&lt;br /&gt;
Código 6. O led_status (pin15) receberá um sinal de tensão LOW (0V):&lt;br /&gt;
&lt;br /&gt;
             labrador.led_status.low()&lt;br /&gt;
&lt;br /&gt;
Veja que mantivemos o acesso a variável labrador, porém utilizamos o apelido que criamos no Código 4 para realizar as operações de acender e &lt;br /&gt;
&lt;br /&gt;
apagar um led. Por fim, lembre-se que para realizar as pausas entre o comando de ligar e desligar o led, será necessário implementar um delay. &lt;br /&gt;
&lt;br /&gt;
Para isso, utilize o comando disponível no Código 7.&lt;br /&gt;
&lt;br /&gt;
Código 7. Comando de delay com o uso da biblioteca timer:&lt;br /&gt;
&lt;br /&gt;
             time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
Caso tenha alguma dúvida, consulte a seção &amp;quot;Código do Experimento&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Montagem do Circuito&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_2_guia_2.jpg|thumb|300px|(Figura 2. Conexão dos pinos na Labrador)]]&lt;br /&gt;
&lt;br /&gt;
Quando elaboramos um projeto que envolve o uso de microcontroladores é importante identificarmos que dois projetos distintos devem ser &lt;br /&gt;
realizados:&lt;br /&gt;
&lt;br /&gt;
1. A montagem dos recursos físicos do projeto (hardware) e;&lt;br /&gt;
&lt;br /&gt;
2. a montagem do código de programação que permitirá o controle e acesso aos recursos disponibilizados pelo projeto físico.&lt;br /&gt;
&lt;br /&gt;
O projeto físico neste experimento consiste em acender um LED utilizando a labrador como uma placa que permita o controle dos recursos &lt;br /&gt;
&lt;br /&gt;
disponíveis no mundo real. A Figura 2 permite identificar a montagem de parte deste circuito, a que está associada a Labrador. Nesta &lt;br /&gt;
&lt;br /&gt;
montagem especificamos uma GPIO para sinal de referência GND e outra GPIO (pin15) que será controlada via código de programação.&lt;br /&gt;
&lt;br /&gt;
Veja a Figura 3 para observar a montagem do circuito do LED que será controlado. O LED possuí duas polaridades distintas. Visualmente, &lt;br /&gt;
&lt;br /&gt;
podemos identificar a polaridade positiva com a perna do LED mais &amp;quot;cumprida&amp;quot;, esta deve ser conectada em série com o resistor. Já a perna &lt;br /&gt;
&lt;br /&gt;
mais &amp;quot;curta&amp;quot;, de polaridade negativa, deve ser conectada em série com a conexão GND.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:figura_3_guia_2.jpg|thumb|400px|left|(Figura 3. Conexão dos pinos da Labrador na Protoboard)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na Figura 3 conectamos as outras pontas dos conectores que associamos à placa Labrador &lt;br /&gt;
&lt;br /&gt;
na Figura 2. Após isso, conectamos nosso resistor, em série, para garantir que o sinal &lt;br /&gt;
&lt;br /&gt;
enviado pela pin15 da labrador passe primeiro pelo resistor indicado na Figura 3, e &lt;br /&gt;
&lt;br /&gt;
somente após isso seja transmitido ao LED. Por fim, conectamos o fio marrom na outra &lt;br /&gt;
&lt;br /&gt;
extremidade do nosso led.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Código do Experimento&#039;&#039;&#039; ==&lt;br /&gt;
               #importamos as bibliotecas necessárias para utilizarmos a labrador&lt;br /&gt;
               import caninos_sdk as k9&lt;br /&gt;
               #esta biblioteca permite gerar uma pausa na labrador (um delay)&lt;br /&gt;
               import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #criamos nossa variável labrador, para uso dos recursos da placa&lt;br /&gt;
               labrador = k9.Labrador()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #ativamos o pino 15 (da labrador), como saída e definimos um apelido para ele&lt;br /&gt;
               labrador.pin15.enable_gpio(k9.Pin.Direction.OUTPUT, alias=&amp;quot;led_status&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #um laço de repetição para 6 iterações&lt;br /&gt;
               for i in range(0, 6):&lt;br /&gt;
                  #na labrador, acessamos o LED habilitado como saída (led_status)&lt;br /&gt;
                  #enviamos então, um sinal de ALTO para o pin15&lt;br /&gt;
                  labrador.led_status.high()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                  #uma pausa de meio segundo&lt;br /&gt;
                  time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               #enviamos um sinal de BAIXO para o pin15&lt;br /&gt;
               labrador.led_status.low()&lt;br /&gt;
               time.sleep(0.5)&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_0_-_Sabendo_o_necess%C3%A1rio&amp;diff=701</id>
		<title>Guia 0 - Sabendo o necessário</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_0_-_Sabendo_o_necess%C3%A1rio&amp;diff=701"/>
		<updated>2024-05-28T13:48:17Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Deixando o texto dentro do campo de visão.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Aprendendo a usar o Linux ==&lt;br /&gt;
&lt;br /&gt;
Para conseguir se orientar no Linux, é necessário que o usuário esteja familiarizado com o guia [[Linux - Aplicativos e funções úteis do Linux]]. Desta forma, o&lt;br /&gt;
&lt;br /&gt;
usuário poderá navegar na internet e abrir o prompt de comando sem problemas.&lt;br /&gt;
&lt;br /&gt;
== Restrições do Firefox ==&lt;br /&gt;
&lt;br /&gt;
É pertinente ressaltar que o Mozilla Firefox não funciona a menos que o relógio do seu computador esteja atualizado, mas isso é corrigido automaticamente se ele &lt;br /&gt;
&lt;br /&gt;
estiver conectado à internet.&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_1_-_Preparando_o_Ambiente_de_Desenvolvimento&amp;diff=700</id>
		<title>Guia 1 - Preparando o Ambiente de Desenvolvimento</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_1_-_Preparando_o_Ambiente_de_Desenvolvimento&amp;diff=700"/>
		<updated>2024-05-22T12:33:15Z</updated>

		<summary type="html">&lt;p&gt;Ivan: Ajuste na largura do texto&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 1 - Preparando o Ambiente de Desenvolvimento&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
de soluções que envolvem a programação de sistemas embarcados.&lt;br /&gt;
&lt;br /&gt;
Neste primeiro guia, você aprenderá a configurar o ambiente de desenvolvimento de sua labrador, para isso, utilize o Guia 1 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1Fbobc0WxL2OzWtLRGwHwpWkG399fbSXY/edit Guia 1]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pré-Requisitos de Sistema&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Debian 10 (Versão do Sistema Operacional)&lt;br /&gt;
*Kernel 4.X ou superior&lt;br /&gt;
*LXTerminal (Ir em: System Tools &amp;gt; LXTerminal)&lt;br /&gt;
&lt;br /&gt;
== Introdução ==&lt;br /&gt;
&lt;br /&gt;
Neste documento você encontra o passo a passo para configurar o Ambiente de Desenvolvimento que você utilizará para programar sua placa Labrador. &lt;br /&gt;
&lt;br /&gt;
Ao final deste experimento teremos:&lt;br /&gt;
&lt;br /&gt;
1. Uma IDE configurada para codificação de códigos em Python e que viabilizará que criemos programas utilizando, futuramente, as GPIOs.&lt;br /&gt;
&lt;br /&gt;
2.  versão mais atual da Caninos SDK instalada em nossa placa.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Descrição do experimento&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Neste experimento temos por objetivo instalar as dependências necessárias para que seja possível desenvolver soluções embarcadas, utilizando a Labrador,&lt;br /&gt;
&lt;br /&gt;
com linguagem de programação Python.&lt;br /&gt;
&lt;br /&gt;
As etapas necessárias para realizar as configurações de ambiente consistem em: (i) atualizar a ferramenta de pacote avançada do nosso sistema operacional&lt;br /&gt;
&lt;br /&gt;
(APT) e (ii) resolver as dependências necessários para desenvolver em linguagem Python, tal como instalar o gerenciador de pacotes padrão (pip). Além&lt;br /&gt;
&lt;br /&gt;
disso, precisaremos instalar os pacotes da Caninos SDK para utilizar os recursos disponíveis para uso da placa.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 1 - Atualizando o APT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Abra o LXTerminal (ver Figura 1) disponível em sua placa Labrador.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Figura_1_guia_1.png|thumb|400px|(FIgura 1)]]&lt;br /&gt;
&lt;br /&gt;
*Digite o trecho de código do Código 1 para atualizar o gerenciador apt de sua placa. Note que ao utilizar o comando sudo será necessário informar a senha&lt;br /&gt;
&lt;br /&gt;
de acesso da placa, que por padrão é caninos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 1. Atualizando o APT da placa labrador:&lt;br /&gt;
        sudo apt update &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 2 - Instalando PIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Ainda no LXTerminal, rode o comando disponível em Código 2 para instalação do gerenciador PIP. Observação: nesta etapa serão solicitadas liberação de &lt;br /&gt;
&lt;br /&gt;
espaço para que seja possível instalar alguns pacotes, para isso, pressione a tecla [y] para que seja possível avançar com a instalação.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 2. Instalando as dependências do Python (incluindo pip):&lt;br /&gt;
        sudo apt install python3-dev python3-pip python3-setuptools libffi-dev libssl-dev curl &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 3 - Atualizando o PIP&#039;&#039;&#039;&lt;br /&gt;
*Utilize o Código 3 para atualizar o pip em sua máquina. Caso apareça alguma mensagem de erro, significa que não foi possível realizar a instalação de &lt;br /&gt;
&lt;br /&gt;
forma correta. Neste caso, verifique os procedimentos anteriores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Verificando a versão do pip instalada:&lt;br /&gt;
        pip3 install --upgrade pip &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 4 - Instalando o Pacote Caninos SDK&#039;&#039;&#039;&lt;br /&gt;
*Por fim, rode o trecho de Código 4 para instalar os recursos de acesso as GPIOs (gpiod) e o pacote da Caninos SDK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 4. Instalando a ferramenta para codificação IDLE3:&lt;br /&gt;
        pip3 install gpiod &lt;br /&gt;
        pip3 install caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 5 - Instalando IDLE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Rode o trecho de Código 5 para instalar nossa ferramenta de edição de código (IDLE): &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 5. Instalando a ferramenta para codificação IDLE3:&lt;br /&gt;
        sudo apt-get install idle3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 6 - Executando o IDLE3&#039;&#039;&#039;&lt;br /&gt;
*E por fim, execute o Código 6 para abrir a ferramenta IDLE3:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 6. Abrindo a ferramenta para codificação IDLE3:&lt;br /&gt;
        idle&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
	<entry>
		<id>https://wiki.canisinc.com.br/index.php?title=Guia_1_-_Preparando_o_Ambiente_de_Desenvolvimento&amp;diff=699</id>
		<title>Guia 1 - Preparando o Ambiente de Desenvolvimento</title>
		<link rel="alternate" type="text/html" href="https://wiki.canisinc.com.br/index.php?title=Guia_1_-_Preparando_o_Ambiente_de_Desenvolvimento&amp;diff=699"/>
		<updated>2024-05-22T12:29:20Z</updated>

		<summary type="html">&lt;p&gt;Ivan: /* Descrição do experimento */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Guia 1 - Preparando o Ambiente de Desenvolvimento&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Neste primeiro guia, você aprenderá a configurar o ambiente de desenvolvimento de sua labrador, para isso, utilize o Guia 1 disponibilizado abaixo:&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1Fbobc0WxL2OzWtLRGwHwpWkG399fbSXY/edit Guia 1]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pré-Requisitos de Sistema&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Debian 10 (Versão do Sistema Operacional)&lt;br /&gt;
*Kernel 4.X ou superior&lt;br /&gt;
*LXTerminal (Ir em: System Tools &amp;gt; LXTerminal)&lt;br /&gt;
&lt;br /&gt;
== Introdução ==&lt;br /&gt;
&lt;br /&gt;
Neste documento você encontra o passo a passo para configurar o Ambiente de Desenvolvimento que você utilizará para programar sua placa Labrador. &lt;br /&gt;
&lt;br /&gt;
Ao final deste experimento teremos:&lt;br /&gt;
&lt;br /&gt;
1. Uma IDE configurada para codificação de códigos em Python e que viabilizará que criemos programas utilizando, futuramente, as GPIOs.&lt;br /&gt;
&lt;br /&gt;
2.  versão mais atual da Caninos SDK instalada em nossa placa.&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Descrição do experimento&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
Neste experimento temos por objetivo instalar as dependências necessárias para que seja possível desenvolver soluções embarcadas, utilizando a Labrador,&lt;br /&gt;
&lt;br /&gt;
com linguagem de programação Python.&lt;br /&gt;
&lt;br /&gt;
As etapas necessárias para realizar as configurações de ambiente consistem em: (i) atualizar a ferramenta de pacote avançada do nosso sistema operacional&lt;br /&gt;
&lt;br /&gt;
(APT) e (ii) resolver as dependências necessários para desenvolver em linguagem Python, tal como instalar o gerenciador de pacotes padrão (pip). Além&lt;br /&gt;
&lt;br /&gt;
disso, precisaremos instalar os pacotes da Caninos SDK para utilizar os recursos disponíveis para uso da placa.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 1 - Atualizando o APT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Abra o LXTerminal (ver Figura 1) disponível em sua placa Labrador.&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Figura_1_guia_1.png|thumb|400px|(FIgura 1)]]&lt;br /&gt;
&lt;br /&gt;
*Digite o trecho de código do Código 1 para atualizar o gerenciador apt de sua placa. Note que ao utilizar o comando sudo será necessário informar a senha&lt;br /&gt;
&lt;br /&gt;
de acesso da placa, que por padrão é caninos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 1. Atualizando o APT da placa labrador:&lt;br /&gt;
        sudo apt update &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 2 - Instalando PIP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Ainda no LXTerminal, rode o comando disponível em Código 2 para instalação do gerenciador PIP. Observação: nesta etapa serão solicitadas liberação de &lt;br /&gt;
&lt;br /&gt;
espaço para que seja possível instalar alguns pacotes, para isso, pressione a tecla [y] para que seja possível avançar com a instalação.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 2. Instalando as dependências do Python (incluindo pip):&lt;br /&gt;
        sudo apt install python3-dev python3-pip python3-setuptools libffi-dev libssl-dev curl &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 3 - Atualizando o PIP&#039;&#039;&#039;&lt;br /&gt;
*Utilize o Código 3 para atualizar o pip em sua máquina. Caso apareça alguma mensagem de erro, significa que não foi possível realizar a instalação de &lt;br /&gt;
&lt;br /&gt;
forma correta. Neste caso, verifique os procedimentos anteriores.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 3. Verificando a versão do pip instalada:&lt;br /&gt;
        pip3 install --upgrade pip &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 4 - Instalando o Pacote Caninos SDK&#039;&#039;&#039;&lt;br /&gt;
*Por fim, rode o trecho de Código 4 para instalar os recursos de acesso as GPIOs (gpiod) e o pacote da Caninos SDK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 4. Instalando a ferramenta para codificação IDLE3:&lt;br /&gt;
        pip3 install gpiod &lt;br /&gt;
        pip3 install caninos-sdk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 5 - Instalando IDLE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Rode o trecho de Código 5 para instalar nossa ferramenta de edição de código (IDLE): &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 5. Instalando a ferramenta para codificação IDLE3:&lt;br /&gt;
        sudo apt-get install idle3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etapa 6 - Executando o IDLE3&#039;&#039;&#039;&lt;br /&gt;
*E por fim, execute o Código 6 para abrir a ferramenta IDLE3:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Código 6. Abrindo a ferramenta para codificação IDLE3:&lt;br /&gt;
        idle&lt;/div&gt;</summary>
		<author><name>Ivan</name></author>
	</entry>
</feed>