A motivação do projeto é fazer um protótipo de garra robótica autônoma, que será bastante simplificado devido ao pouco tempo e disposição de recursos. Além disso, uma proposta do projeto é tornar o código mais eficiente possível em termos de processamento dentro do que foi aprendido na disciplina até o momento. Com isso, as únicas bibliotecas necessárias para o projeto será a biblioteca da CMSIS "stm32f4xx.h" e as próprias start up files referentes ao microcontrolador que poderão ser baixados neste repositório. Ou seja, sem usar a biblioteca HAL.
O projeto será desenvolvido em um STM32F401RE embarcado em uma Nucleo development board e a proposta é criar uma garra robótica de apenas 1 eixo de liberadade. Para isso, será usado um servo motor como atuador do sistema, um sensor ultrassônico HC-SR04 e a próptia development board Nucleo STM32F401RE. O sensor de ultrassom será ativado e lido pelo microcontrolador a cada ciclo do programa. Com ele, é possível ter uma noção da distância da garra robótica para um obstáculo ou objeto a ser manipulado. A medida que o objeto se aproxima, a garra se fecha em formato de pinça.
Há dois vídeos do funcionamento do protótipo na pasta vídeos do repositório.
Teste do sensor perpendicular a superfície plana
Foram necessários 4 periféricos para o projeto final: TIM2, GPIOB, GPIOC e TIM4. Além disso, durante o desenvolvimento, foi usado USART2.
O clock interno utlizado nos reset values do microcontrolador é de 16 MHz e pode ser usado a até 84 Mhz. No nosso caso, o clock de 16 Mhz foi mantido.
Foi usado para criar uma função de delay para ser aplicada ao código uma vez que a mesma não é uma função nativa da biblioteca do fabricante apesar de ser essencial para o fluxo do firmware.
- Prescaler: 16-1
- ARR: 0 (habilitado durante o código)
- Counter mode: UP (Crescente)
- Trigger event: UG bit
- Load value: 0
Foi usado para gerar saída PWM para o controle do atuador. O mesmo está localizado no pino B6 da development board.
- Output mode: PWM generation
- Prescaler: 3200-1
- ARR: 100-1
- Counter mode: UP (Crescente)
- Trigger event: UG bit
- Load value: 0
- CH polarity: HIGH
Usado no modo alternate function ao habilitar AF2 do registrador AFRL. Isso por sua vez, permite que haja saída para o PWM configurado no periférico TIM4.
Este periférico controlou 3 pinos: ECHO, TRIGGER e userButton.
Emite pulso de aproximadamente 10 us para o sensor ultrassom para requisitar as informações do mesmo.
Foi configurado como GPIO output e High Speed
Recebe o sinal vindo do pino ECHO do ultrassom e amostra esse sinal recebido como forma de medir o tempo que o pulso fica em HIGH, que é usado para medir a distância.
Foi configurado como GPIO input
Obs: é conveniente usar comunicação serial UART para debugar e acompanhar os valores das variáveis do código durante o desenvolvimento. No caso do microcontrolador utilizado, usa-se o periférico USART2 para a comunicação com o host uma vez que ele tem conexão direta com a entrada USB do debugger.
- Modo de comunicação: Assíncrona
- baud rate: 115200 bits/s
- Tamanho da mensagem: 8 bits
- Paridade: sem paridade
- Stop bits: 1
- Data direction: Full-duplex (transmitir e receber)
| Porta | Função | Destino |
|---|---|---|
| PC0 | GPIO_C0 | ECHO |
| PC1 | GPIO_C1 | TRIGGER |
| PB6 | TIM4_CH1 | Motor |
Um projeto inicial mais ambicioso, porém realizável a baixo custo seria tornar a garra mais precisa com mais resolução. Isso pode ser feito aosubstituir o motor servo por motor de passo. Para isso, ainda seria necessário incluir drivers de motor de passo. Outra boa adição ao sistema seria a inclusão de outros sensores de ultrassom em outras posições para melhorar a percepção do sistema e/ou até mesmo adicionar outros sensores como diodos foto sensíveis para curtas distâncias e CI ToF VL53L0X. Além disso, poderia-se aplicar um controle mais rebuscado como fuzzy ou PID caso houvesse mais resolução nos motores.






