DAMI-M4 v1.1.0

Primeira actualização do robot 2WD DAMI-M4

Nesta actualização destaco os seguintes aspectos:

  • Aprofundamento da Arquitetura Robótica Distribuida, com a adoção de um microcontrolador dedicado à leitura dos sensores de distância.
  • Um Arduino Mega 2560  para substituir o antigo Arduino nano que funcionava como master.
  • Um Raspberry Pi 3B+ para substituir o antigo Raspberry Pi B
  • O desaparecimento da placa com os circuitos da alimentação e suporte para um Arduino Nano, que foi substituida por uma breadboard média.

Durante a implementação experimentei algumas formas de comunicação entre Arduinos e o Raspberry Pi, e Arduinos entre eles.

Nunca consegui por a funcionar um solução de multiplos masters no bus I2C, a solução com duas portas SERIAL no Arduino Nano recorrendo á biblioteca SoftwareSerial nunca foi satisfatória, e a solução alternativa à biblioteca Wire que avaliei e testei para implementar um bus I2C alternativo num Arduino Nano também não foram funcionais.

Poderia ter também feito do microcontrolador responsavel pela leitura dos sonares um slave no bus I2C, mas creio que no futuro quando lhe acrescentar um sensor de distancia VL53L1X o necessário papel de master no bus I2C é capaz de deixar o sistema disfuncional.

Como a prazo iria colocar um Arduino Mega 2560, decidi apenas faze-lo mais cedo, e assim acabei com o problema da disponibilidade das portas SERIE de hardware.

Durante os testes apercebi-me que estava errado quando ao funcionamento da biblioteca newPing.

Pensava que o método sonar.check_timer(), devolvia sempre verdadeiro sempre que estava no tempo de fazer uma leitura, independentemente dessa leitura ser zero ou não.

Estava enganao. Se não existir leitura, ou seja se nao tiver nada no limite máximo definido, então o metodo devolve “false” e o codigo dentro do if não é executado, preservando os valores anteriores.

Isto explica os traços circulares das leituras do sonares no M3 durante as rotações.

O aprofundamento da arquitetura distribuida que esta versão representa está patente no seguinte diagrama.

Diagrama do hardware no robot DAMI-M4
Diagrama do hardware no robot DAMI-M4

O Raspberry Pi 3B+ está a aguardar por melhores dias de atenção. Por enquanto continua simplesmente como o meu acesso remoto ao robot e aos dados dos sistemas em cada iteração do loop.

Hardware do robot

  • 1 x Nanocomputador Raspberry Pi 3B+
  • 1 x Microprocessadores Arduino Mega 2560
  • 2 x Microprocessadores Arduino Nano 328p
  • 1 x Acelerómetro e giroscópio MPU6050
  • 4 x Sonar HC SR-04
  • 1 x Ponte H L298N
  • 2 x Motores 12V 350RPM 30:1 c/ encoders de quadrante de 64CPR e resolução total de 1920 pulsos
  • 2 x Bateria de 12V
  • 1 x Modulo com os connectores para ligar as baterias
  • 1 x Power Pack de 5V
  • 1 x Divisor de tensão de 5V para 3.3V
  • 1 x Circuito de alimentação de 5V
  • 1 x Circuito de alimentação de 8V
  • 2 x Bases de acrilico (inferior e superior)
  • 4 x Suportes de sonares
  • 3 x Breadboard mini
  • 1 x Breadboard média
  • n x Fios, porcas e parafusos

Software

m4_mod7_ms0

Implementação inacabada do software do robot M3 aplicado a motores DC, extendida a mais um microcontrolador.

m4_master_master_mod7_v1

m4_motor_slave_mod5_v1

m4_sensor_master_mod7_v1

 

Video da primeira aceleradela

Avaliação

Não foi efectuado nenhum teste exaustivo. Apenas verifiquei se andava, parava nos obstaculos e como decidia nesses casos.

Andou a direito e parou no obstaculo como esperado. No movimento à retaguarda balancou muito, coisa que nao estava habituado a ver nos testes da versão anterior (e repetiu-se em todos os testes), e achei que o movimento de rotação nao foi bem de 90 graus.

Por ultimo, num segundo teste após uma modificação ao calculo das distancias medidas pelo sonar acabou por ficar parado sem eu perceber porque.

Estes testes iniciais à versão 1.1.0 não correram lá muito bem.

Por outro lado, a recepção de leituras dos sonares está a uma cadência muito lenta, a cada 250 ms e o interface SERIAL a 600 baud. Que são resquicios das minhas más esperiências com a biblioteca SoftwareSerial. Terei que melhorar a frequencia de leitura destes dados.

Assim como o envio de dados para o Raspberry Pi que esta a ser efectuado a cada 33ms, deve ser melhorado e passar a enviar os dados todos os loops.

Estes problemas vão ser objecto da minha atenção antes de lançar uma nova versão.