Projeto OMower - Plataforma Universal de Rodas Abertas (início)

Quero apresentar meu projeto de uma plataforma universal aberta para robôs domésticos (cortadores de grama, aspiradores de pó e similares). O projeto ainda está em processo de montagem e escrita de software, espero comentários e sugestões úteis.



Recentemente, eu me familiarizei com o projeto Ardumower ( artigo sobre ele ) e tive muita experiência interessante. Mas, infelizmente, esse robô tem muitas limitações diferentes, então meu cliente de “casa inteligente” patrocinou um projeto de um robô completamente novo e muito mais poderoso que pode lidar bem com o corte de grama e com várias outras tarefas (por exemplo, existe uma idéia entregar bebidas para os hóspedes em casa :)). O projeto está sendo desenvolvido como uma plataforma universal e extensível, com um circuito aberto e SDK para escrever suas próprias opções de software.

O principal elemento do robô é a placa com o processador ATSAM3X8E de 32 bits, idêntico ao usado no Arduino Due, que permite usar um ambiente de desenvolvimento simples e familiar e também remove muitos problemas com problemas técnicos devido à grande comunidade de pessoas que escrevem programas para esta plataforma. Devido ao grande número de portas do microcontrolador, você pode conectar quase tudo à placa. Especificações da placa:

Alimentado por 12 a 30 volts, um carregador de bateria embutido com uma corrente de até 5 amperes e até um reforço para carregar a bateria solar durante a operação.

Dois assentos para os controladores de motor coletor Polulu Dual MC33926, amplamente utilizados, com capacidade de controlar até quatro motores (em duas versões - dois motores sobre rodas, o segundo controlador controla o motor de corte; ou quatro motores sobre rodas com canais separados). Os conectores do motor têm cabos para conectar odômetros.

Área útil de um controlador de motor de passo (acionamento para alterar a altura da grama cortada, por exemplo).

Um conector para instalar o Orange Pi Zero (para suportar o GPS RTK com precisão de centímetros e alguns algoritmos de controle externos complexos) com a capacidade de atualizar o firmware através deste microcomputador.

6 saídas de sinal PPM para controle de motores e servos sem escova.

6 portas para sonares HC-SR04, 2 portas para sensores de colisão (pára-choques com seus sensores pneumáticos, por exemplo), dois sensores capacitivos de grama, 2 entradas para sensores de distância analógicos infravermelhos, quatro entradas para sensores de perímetro com fio, dois conectores de termistor controlados portas para ventilador, sinal sonoro e três LEDs (20 e 70 mA). Obviamente, muitas portas podem ser usadas para conectar outros sensores, com certas limitações.

Quase todas as portas externas suportadas pelo microcontrolador também estão conectadas aos conectores:

3 conectores de porta serial, dois barramentos I2C com 9 conectores (um dos quais é armazenado em buffer com conectores para dispositivos de cinco e três volts), 2 barramentos SPI, CAN (sem um transceptor físico), USB, dois DACs separados (recém-trazidos aos conectores como existe, você pode tocar música lá ou algo assim).

Um regulador de comutação adicional de 5 volts e 2 amperes com seis conectores para dispositivos externos. Bem, um relé com uma trava, para desligamento de emergência da bateria, para evitar a descarga excessiva no caso de você não chegar à estação de carregamento. Naturalmente, o consumo de tensão e corrente é controlado pelo microcontrolador (em parte pelo ADC multicanal integrado, em parte pelo MAX11617EE opcional).

No modo inativo (os drivers do motor estão inativos) - o consumo de corrente é de 130 a 140 miliamperes.

Esquema (jogou tudo em uma folha, por conveniência):



No processo de soldar a placa, deparei-me com o fato de que alguns elementos são muito pequenos para a soldagem manual com um secador de cabelo e algo pode superaquecer (como um diodo na unidade de carregamento), portanto, são possíveis pequenas alterações.

O desenvolvimento de um SDK para escrever o firmware do robô já está em andamento. Com sua ajuda, será possível desativar completamente completamente o gerenciamento de hardware em um nível baixo, tendo recebido um conjunto de classes para todos os dispositivos e sensores periféricos. Por exemplo, um pedaço de código que faz o robô virar para o norte terá a seguinte aparência (esses exemplos já funcionam, embora sem algumas verificações de sobrecarga e similares):

course = 0.0; imuSens.setCourse(course); motWheel.rollCourse((navThing *) &imuSens, 9000); 

E para percorrer o perímetro com fio até a estação, levantando o motor de corte:

  mow.setHeight(0); perSens.setTracking(true); motWheel.moveCourse((navThing *) &perSens, 120000); 

Infelizmente, ainda não consigo definir o SDK, muito ainda não foi escrito (como código para oferecer suporte às tags RFID Decawave DW1000 e a quaisquer sensores secundários). Mas posso dizer que todas as funções de baixo nível funcionam e, após um curto período de tempo, posso colocá-lo no github.

Teaser:

Source: https://habr.com/ru/post/pt406177/


All Articles