Tecnologia

Ξ 1 comentário

Robô Autônomo com Digispark (DigiBot)

publicado por Wagner Rambo

Robô Autônomo com Digispark (DigiBot)1 – Introdução

Utilizando um sistema embarcado bem pequeno, de baixo custo e que pode ser facilmente programado até pelos menos experientes, pode-se desenvolver um robô móvel autônomo. Neste artigo veremos como desenvolver um robô, utilizando este sistema embarcado. Estamos falando do Digispark, que consiste em um microcontrolador do tipo embedded, para implementação de diversos projetos. A plataforma apresenta um microcontrolador do tipo Attiny85, da Atmel, regulador de tensão de 5V e 6 pinos programáveis, disponíveis a partir de conectores header, além de possibilitar a comunicação direta com uma porta USB (figura 1).

Figura 1 – Microcontrolador Attiny85 (à esquerda). Sistema embarcado Digispark (à direita).

Figura 1 – Microcontrolador Attiny85 (à esquerda). Sistema embarcado Digispark (à direita).

2 – Características do Robô

O Digibot tem um funcionamento bastante trivial, a novidade está por conta do sistema embarcado utilizado no projeto. O robô move-se sempre para frente até deparar-se com um obstáculo. Encontrando um obstáculo, o robô para, move-se brevemente para trás, e executa um desvio à esquerda. Adotou-se o uso de sensores magnéticos, que serão explanados mais adiante neste mesmo artigo, e os motores são controlados através de um CI driver dedicado. Na figura 2, pode-se observar o Digibot, totalmente construído.

Figura 2 – Digibot.

Figura 2 – Digibot.

3 – O Circuito

O diagrama esquemático completo do Digibot está explícito na figura 3. Toda parte lógica, bem como a regulagem de tensão estão abstraídos no módulo Digispark. Como mencionado, o mesmo já apresenta regulador de 5V em sua placa, o que contribui para diminuição dos componentes externos a serem utilizados.

Figura 3 – Diagrama esquemático do Digibot.

Figura 3 – Diagrama esquemático do Digibot.

O módulo Digispark é alimentado por uma bateria de 9V (V1), e o mesmo gera uma tensão de +5V para o restante do circuito lógico. O pino de RESET é mantido em nível alto, através do resistor de pull-up R1, que tem o valor típico de 10kΩ. O pino programável P2 é configurado como entrada digital, e mantido em nível alto pelo resistor R2. Os sensores consistem em ampolas magnéticas (reed switch) em paralelo, quando qualquer um deles for acionado, o estado lógico de P2 é alterado para low, “informando” o microcontrolador que o robô detectou um obstáculo.

O movimento do robô é proporcionado por 2 motores de 6V (M1 e M2), que são comandados pelo circuito integrado U1, que consiste em um driver para motores, que contém duas pontes H em sua construção. Este CI é o L293D e já apresenta em seu interior diodos de proteção. Como os motores consistem em cargas indutivas, utilizam-se os capacitores C1 e C2 (poliéster, 100nF), com o intuito de filtrar espúrios gerados por suas bobinas. Os pinos de controle de U1 (IN1 a IN4) são comandados pelos pinos P0, P1, P3 e P4, respectivamente, que foram configurados como saída digital no Digispark. Um conjunto de 4 pilhas comuns forma uma bateria de 6V (V2), utilizada exclusivamente para alimentação dos motores, através do pino VS (voltage supply), do L293D.

Utilizou-se chaves pequenas para ligar/desligar o robô, soldadas diretamente na placa de circuito impresso. A chave ROBOT aciona a alimentação dos circuitos lógicos, e DRIVER a alimentação os motores. O led D2 consiste em um led verde comum que indica que os circuitos lógicos estão alimentados e tem seu resistor limitador de corrente, R3, calculado a seguir.

Formula-1

Onde:

  • É a bateria de 9V;
  • É a tensão de trabalho do led verde utilizado [V];
  • É a corrente de trabalho do led vermelho utilizado [A].

Adotou-se o valor de 470Ω, pois consiste no valor comercial superior mais próximo do valor calculado (série E-12).

O led D1 é um led vermelho comum e indica que os motores estão alimentados. O mesmo procedimento foi utilizado para calcular seu resistor limitador de corrente R4.

Formula-2

Utiliza-se um resistor de 330Ω, por ser o valor comercial superior mais próximo ao calculado. C3 é um capacitor de poliéster de 220nF, e serve como filtro para o circuito lógico.

4 – Montagem (setor eletrônico)

A montagem eletrônica é totalmente simples, visto que os circuitos mais complexos estão abstraídos no módulo Digispark. O lay-out da placa de circuito impresso pode ser visto na figura 4. A mesma pode ser confeccionada através do método artesanal ou método térmico.

Figura 4 – Lay-out do circuito impresso do Digibot.

Figura 4 – Lay-out do circuito impresso do Digibot.

Na figura 5, pode-se ver a face da PCI que contém as trilhas e ilhas.

Figura 5 – Face de cobre da placa de circuito impresso.

Utilizou-se conectores para a bateria de 9V e o conjunto de pilhas, e também para ligação dos motores com a placa. Para os motores, conectores KRE (aparafusáveis) podem ser empregados. Optamos pelo uso de conectores simples para que o tamanho final da placa ficasse reduzido. Visto que os conectores da Digispark são do tipo header (MODU fêmea), também utilizou-se barra de pinos para conexão com a placa, facilitando sua remoção, quando a reprogramação do robô for necessária. Para o circuito integrado, recomenda-se o uso de soquete apropriado.

Os led’s podem ser soldados diretamente à placa, ou caso o leitor prefira, podem ser fixos ao corpo do robô e conectados à placa através de fios, atenção para polarização destes dispositivos. Os resistores são todos de 1/8W e os capacitores são de poliéster até 63V. As chaves ON/OFF são do tipo para fixar diretamente à placa, mas outros modelos podem ser adotados. Sensor 1 e 2, são ampolas magnéticas (reed switches), cujo funcionamento será mais detalhado no tópico de montagem mecânica. Para os jumpers, pode-se utilizar fios ou sobras de terminais.

É importante salientar que o circuito deve ser totalmente revisado após o término da montagem, evitando problemas como a queima de componentes que foram soldados em locais errados, invertidos, etc.

5 – Montagem (setor mecânico)

Para o setor mecânico, qualquer plataforma que contenha dois motores com caixas de redução independentes pode ser utilizada. Neste caso optamos por construir nossa própria plataforma. Para as caixas de redução, aproveitou-se dois servos motores de parabólica que estavam com o setor eletrônico queimado (pode se conseguir estes servos a baixíssimo custo, ou até gratuitamente em lojas especializadas, visto que para eles um servo com setor eletrônico queimado, não tem mais utilidade).

Os servos então foram devidamente adaptados para rotação contínua, aproveitando-se os motores e as caixas de redução (figura 6).

Figura 6 – Servo de parabólica convertido para rotação contínua.

Figura 6 – Servo de parabólica convertido para rotação contínua.

Os servos foram fixos um em oposição ao outro com auxílio de parafusos e porcas. Chapas plásticas aproveitadas de reciclagem, foram devidamente usinadas para compor o “corpo do robô”, fixando a placa de controle, a bateria de 9V e o suporte de pilhas. Utilizou-se como roda de equilíbrio (roda boba), uma rodinha de cadeira, facilmente encontrada em lojas de ferragens. As rodas principais foram desenvolvidas com separadores de mini CD’s (pode-se utilizar mini CD’s mesmo ou então CD’s), e os pneus com papel E.V.A. colados às rodas com cola quente. A figura 7 apresenta o robô com algumas medidas relevantes.

Figura 7 – Algumas medidas do chassi do Digibot.

Figura 7 – Algumas medidas do chassi do Digibot.

Como os sensores do robô são do tipo reed switch, foi construída uma estrutura com peças usinadas em PVC, contendo parafusos que atuam como eixos. Nestes parafusos fixou-se pequenos imãs. A estrutura é mantida em uma posição com um par de molas. Ao esbarrar em um obstáculo, a chapa PVC frontal atua como um para-choque, aproximando os imãs dos respectivos reed switch, acionando assim os sensores do robô, que efetuará a rotina de desvio. Lembrando que os sensores podem ser implementados com bumpers de colisão ou outros métodos, se o projetista preferir. Veja o setor dos sensores na figura 8.

Figura 8 – Setor mecânico dos sensores do robô.

Figura 8 – Setor mecânico dos sensores do robô.

6 – O programa

Como citado no início deste artigo, o sistema embarcado Digispark apresenta interface direta com USB, e pode ser facilmente programado através da IDE do Arduino, bastando selecionar a placa “Digispark” na mesma. A lógica implementada foi extremamente simples, como pode ser notado no fluxograma do código, apresentado na figura 9.

Figura 9 – Fluxograma que descreve o funcionamento do robô.

Figura 9 – Fluxograma que descreve o funcionamento do robô.

O programa inicia configurando o ambiente, e chama uma função que faz o Digibot mover-se para frente, testando os sensores até que um obstáculo seja detectado. Detectando um obstáculo, o robô para de se mover, e executa a rotina de desvio, continua movendo-se para frente e testando os sensores. O código fonte completo e bem comentado pode ser visto na figura 10. A linguagem utilizada é o C, mas como o programa é feito na IDE do Arduino e a mesma apresenta ampla biblioteca já com funções que facilitam ainda mais a programação, pode-se afirmar que é um C de mais alto nível do que o tradicional.

Figura 10 – Código fonte completo do robô.

Figura 10 – Código fonte completo do robô.

Utiliza-se a diretiva “define” para atribuir nomes constantes aos pinos a serem programados. Após, escreve-se o protótipo de duas funções (sub rotinas) uma que faz o robô se mover para frente (roboFrente) e outra que executa o teste dos sensores e faz com que o robô desvie de um obstáculo, caso seja detectado (roboDesvio). Na função de setup, o microcontrolador é configurado, P2 é entrada digital, e os demais pinos são configurados como saída digital, pela função “pinMode”.

A função delay é utilizada, para que o robô aguarde 1 segundo antes de começar a se locomover. Após o delay, chama-se a função que faz o Digibot mover-se para frente. Na função de loop infinito, tudo que é feito é chamar a função de desvio, toda a lógica de controle está abstraída nesta sub rotina.

A função roboFrente apenas configura os pinos de saída com o binário “1001” (HIGH, LOW, LOW, HIGH), que controla os motores de modo que o robô mova-se para frente. Este valor é arbitrado ou determinado de forma empírica.

A função roboDesvio inicia com um laço de condição “if”, que testa os sensores com o comando “digitalRead”. Se for detectado nível baixo, os comandos do laço “if” são executados, o desvio é realizado e a função roboFrente é chamada através da técnica recursiva. O binário “0000” para o robô por meio segundo, em seguida “0110” (LOW, HIGH, HIGH, LOW), move o robô para trás por 1 segundo, e o desvio é realizado com o binário “1010”, por 1 segundo. Este último delay deve ser obtido experimentalmente, e dependerá da mecânica utilizada para o robô.

7 – Prova e Uso

Após revisar criteriosamente sua montagem, ligue a chave DRIVER e observe o led vermelho acender. Nada acontecerá por enquanto, pois o circuito lógico ainda não foi alimentado. Agora ligue a chave ROBOT, e o led verde deverá acender, o led contido na Digispark também acenderá. Após um segundo o robô deverá iniciar sua locomoção para frente.

Antes de colocar o robô a andar pelo chão, recomenda-se efetuar-se o ajuste dos sensores, buscando o melhor ponto de acionamento, na bancada de trabalho. Deve-se ajustar a posição dos imãs até que obtenha-se o ponto exato de acionamento dos Reed Switches, quando o para choque do robô for atingido por um obstáculo.

Verificado o correto desempenho pode-se colocar o robô em campo, para que mova-se de forma autônoma. O Digibot estará finalizado e funcionando!

8 – Lista de materiais

A lista dos componentes utilizados neste projeto é apresentada na Tabela 1.

Tabela 1: Lista de Material (Componentes e outros)

Tabela 1: Lista de Material (Componentes e outros)

9 – Conclusão

Com auxílio de um sistema embarcado pequeno, pode-se idealizar um robô móvel autônomo, desenvolvendo conhecimentos em eletrônica, mecatrônica e programação. Apesar do projeto de um robô não ser simples, este artigo visou despertar o interesse na robótica, mesmo para aqueles menos experientes, bem como acrescentou novos conhecimentos apresentando o sistema embarcado Digispark. Um vídeo do Digibot em funcionamento pode ser visto no canal WR Kits, no site youtube.com.br. É o 9º vídeo da série Robots.

[Crédito da Imagem: Robô Auntônomo – ShutterStock]

Autor

Wagner Rambo é graduando de engenharia eletrônica com ênfase em computadores e telecomunicações pela Universidade Feevale, Rio Grande do Sul. Trabalha há 12 anos na manutenção de equipamentos eletrônicos e com projetos na área de robótica e eletrônica. Em 2011 fundou a empresa WR Kits (www.wrkits.com.br), especializada na fabricação e projeto de kits de robótica didática e dispositivos eletrônicos para soluções industriais, bem como a venda de componentes eletrônicos diversos.

Wagner Rambo

Comentários

1 Comment

  • como vocês estão fazendo para o digispark ser reconhecido pelo windows, pois programo com a ide do arduino mas na hora de conectar o digispark o windows mesmo com o drive instalado, acusa não reconhecer o digispark,

    mensagem da ide arduino

    AVISO: A categoria ” na biblioteca SPI é invalida. Definindo para ‘Uncategorized’
    Aviso: platform.txt do núcleo ‘[0}’ contém algo depreciado (recipe.ar.pattern=”{compiler.path}{compiler.ar.cmd}” {compiler.ar.flags} “{build.path}/{archive_file}” “{object_file}”), automaticamente convertido para recipe.ar.pattern=”{compiler.path}{compiler.ar.cmd}” {compiler.ar.flags} “{archive_file_path}” “{object_file}”. Considere atualizar este núcleo.
    Aviso: platform.txt do núcleo ‘[0}’ contém algo depreciado (recipe.c.combine.pattern=”{compiler.path}{compiler.c.elf.cmd}” {compiler.c.elf.flags} -mmcu={build.mcu} -o “{build.path}/{build.project_name}.elf” {object_files} “{build.path}/{archive_file}” “-L{build.path}” -lm), automaticamente convertido para recipe.c.combine.pattern=”{compiler.path}{compiler.c.elf.cmd}” {compiler.c.elf.flags} -mmcu={build.mcu} -o “{build.path}/{build.project_name}.elf” {object_files} “{archive_file_path}” “-L{build.path}” -lm. Considere atualizar este núcleo.

    O sketch usa 668 bytes (11%) de espaço de armazenamento para programas. O máximo são 6.012 bytes.
    Variáveis globais usam 9 bytes de memória dinâmica.
    Running Digispark Uploader…
    Plug in device now… (will timeout in 60 seconds)
    > Please plug in the device …
    > Press CTRL+C to terminate the program.
    > Device search timed out
    Biblioteca inválida encontrada em C:\Users\Nando\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.5\libraries\Digispark_Examples: C:\Users\Nando\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.5\libraries\Digispark_Examples
    Biblioteca inválida encontrada em C:\Users\Nando\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.5\libraries\Digispark_Examples: C:\Users\Nando\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.5\libraries\Digispark_Examples

You must be logged in to post a comment.

Busca

Patrocínio

Publicidade



Siga-nos!

Newsletter: Inscreva-se

Para se inscrever em nossa newsletter preencha o formulário.

Artigos Recentes