Prática 2 - Processamento Digital de Sinais Interface GPIO do Raspberry Pi Davi Engenharia Elétrica UFTM Uberaba, Brasil I. 1. Mateus Engenharia Elétrica UFTM Uberaba, Brasil PARTE I A INTERFACE GPIO Vitor Hugo Engenharia Elétrica UFTM Uberaba, Brasil Victor Leoni Santos Soares Engenharia Elétrica UFTM Uberaba, Brasil A montagem do circuito foi seguindo as imagens contidas no arquivo disponibilizado pelo professor. A seguir a foto do circuito real montado: As GPIOs (General Purpose Input/Output) do Raspberry Pi 3 Model B são pinos que podem ser programados para desempenhar diversas funções, desde entrada/saída digital até comunicação com periféricos externos. O Raspberry Pi 3 Model B é um computador de placa única (SBC) muito popular, e suas GPIOs são uma das características que o tornam versátil para projetos de hardware. Em seguida, utilizando a linguagem de programação Python e a sua IDLE, elaborou-se dois códigos: um utilizando a biblioteca RPi.GPIO e o outro utilizando a biblioteca GPIOZero. Para utilizar as bibliotecas citadas, é necessário fazer o Nessa primeira parte do relatório foi proposto que fosse montado um pequeno circuito envolvendo um led e um botão a fim de entender o funcionamento dessas GPIOs. Além disso, foi necessário a elaboração de um código que fizesse o controle de que quando acionado o botão o led acenderá. download das mesmas. Os seguintes comandos para fazer os downloads são: $ sudo apt install rpi.gpio $ sudo apt install python3-gpiozero O primeiro código criado foi utilizando a biblioteca RPi.GPIO. Essa biblioteca oferece um nível de abstração mais baixo, exigindo que o programador lide diretamente com conceitos de nível de hardware, como pinos e estados. Ela pode ser mais complexa devido a necessidade de entender os detalhes de baixo nível e a manipulação direta de pinos. A seguir é mostrado o código e seu output: Em comparação ao primeiro código apresentado, é necessário informar apenas o pino a qual os componentes O primeiro código se assemelha à programação usando a Arduino IDE, é necessário setar os pinos, se são de entrada e saída e os níveis lógicos desejados para fazer o controle. Além disso, foi adicionado um tratamento de exceções apenas para que o programa não fique em loop infinito, sendo utilizado o CTRL+C para pará-lo. estão ligados sem ter que setar se são de saída ou entrada. Essa biblioteca já vem com funções pré-definidas, facilitando muito para quem não tem afinidade com os conceitos de nível de hardware. Além disso, não foi necessário fazer um tratamento de exceções pois já há uma função que mantém o programa funcionando e para pará-lo basta apertar o CTRL+C também. O segundo código foi desenvolvido com base na biblioteca GPIOzero, a qual proporciona um nível de abstração mais alto, simplificando a interação com as GPIOs através de objetos 2. CONFIGURANDO UM AMBIENTE VIRTUAL Python, como o LED e o BUTTON. Como ela é mais orientada a objetos e simplificada, permite uma abordagem Para a criação de um ambiente virtual é necessário mais intuitiva para criar e manipular os componentes. A seguir criar um diretório novo (mkdir nome_diretorio) ou utilizar um o código e seu output. já criado. Após isso, basta dar os seguintes comandos: $ cd lab2 #Mudar para o diretório lab2 $ python3 –m venv venv $ source venv/bin/activate $ pip install pip–upgrade No caso apresentado acima, foi necessário fazer o Feito isso, criou-se um ambiente virtual utilizando o download da biblioteca RPi.GPIO no ambiente virtual para diretório anteriormente informado. Para que os programas que fosse possível a execução do código. Após isso, foi consigam ser executados dentro desse ambiente virtual são utilizado o comando $ pip freeze > requirements.txt para que necessários algumas etapas: ele criasse um arquivo contendo a biblioteca necessária, • • O programa deve estar no mesmo diretório que o porém esse processo poderia ser evitado se o arquivo contendo ambiente virtual criado; todas as dependências do programa fosse criado anteriormente Se o código usa alguma biblioteca, é necessário fazer e depois importado para o ambiente virtual. o download da mesma dentro do ambiente virtual Feito isso, o código irá rodar normalmente. Com isso, o sistema cria um arquivo txt e adiciona ao diretório pertencente ao ambiente virtual contendo todas as dependências que o programa precisa para ser executado. Em seguida, é pedido para comentar sobre a função requeriments.txt. O requirements.txt em um ambiente virtual é crucial para garantir consistência e replicabilidade no desenvolvimento. Ele permite a reprodução fácil do ambiente em diferentes máquinas, simplifica a configuração rápida, controla versões, facilita a integração contínua, isola ambientes virtuais e serve como documentação automática. O requirements.txt assegura que o ambiente de produção seja configurado com as mesmas versões de bibliotecas usadas durante o desenvolvimento. II. PARTE 2 1. SINAIS E SISTEMAS EM TEMPO DISCRETO. Foi elaborado um código na linguagem Phyton para simular o sinal discreto de função seguinte. 𝒙(𝒕) = 𝟏𝟎𝒔𝒆𝒏(𝟐𝟒𝟎𝟎𝝅𝒕 + 𝝅/𝟒) Para uma frequência de amostragem de 12000 Hz Para uma frequência de amostragem de 24.000 Hz Foi feito a plotagem nas frequências de amostragem sendo de 10 kHz, 12kHz e 24kHz. Percebe-se que quanto maior a frequência de Para uma frequência de amostragem de 10000 Hz amostragem melhor, além disso, frequência abaixo de determinado valor são inadequadas, pois há muita perda Na figura acima, é possível perceber que das características do sinal senoidal, o Teorema de quando se faz a derivada do sinal de rampa, obtém-se um Nyquist estabelece um valor mínimo para que o sinal sinal constante, o que é esperado, pois a derivada de uma seja reconhecível. função do primeiro grau resulta em um valor constante. 2. SISTEMAS A. Diferenciador A seguir, é visto o código em python que implementa a função rampa discreta e realiza a derivada da mesma e plota os respectivos gráficos. . Após a alteração do intervalo de amostragem, o comportamento do sinal se manteve o mesmo quando comparado ao anterior. B. Integrador O código responsável por criar o sinal discreto x[n] e realizar a sua integração é visto abaixo. Após a mudança no intervalo das amostras e também na quantidade de amostras, os sinais obtidos estão a seguir. Assim, observa-se que o sinal se manteve com a forma esperada, anteriormente vista. Esse resultado é O resultado está apresentado na figura abaixo. esperado, pois a alteração ocorreu somente na distância de uma amostra a outra. C. Solução iterativa da Equação de Diferenças O código abaixo feito na linguagem de programação python resolve de maneira interativa uma equação diferença qualquer, bastando para isso inserir a respectiva equação e a função de entrada x[n] no código abaixo. Tal código está configurado para resolver a equação diferença y[n] - 0.5*y[n-1] = x[n] com condição inicial y[-1] = 16 e x[n] = n^2 do exemplo 3.8 do livro do Lathi. REFÊRENCIAS [1] LATHI, B. P. Sinais e sistemas lineares. Porto Alegre: Bookman, 2007.