Project OMower – open universal wheel platform (start) / SurprizingFacts

I want to present my project an open universal platform for home robots (lawn mowers, vacuum cleaners and the like). The project is still at the stage of assembling and writing software, I hope for useful comments and suggestions.

Recently I got acquainted with the project Ardumower (Article about him) and got a lot of interesting experience. But, unfortunately, this robot has many different limitations, so my customer of the "smart house" sponsored the project of a completely new and much more powerful robot capable of coping well with mowing grass and with various other tasks (for example, there is an idea To carry home drinks for guests :)).

The main element of the robot is a motherboard with a 32-bit ATSAM3X8E processor identical to that used in Arduino Due, which makes it possible to use a simple and extensible platform, with an open circuit and an SDK for writing its software variants. Habitual development environment, and also removes many problems with technical issues at the expense of a large community of people writing programs for this platform. Thanks to a large number of ports of the microcontroller – to connect almost anything to the board. The board features:

Power supply from 12 to 30 volts, built-in battery charging unit with a current of up to 5 amps and even a booster for charging the solar battery during operation.

Two seats for common collector controllers Motors Polulu Dual MC33926, with the ability to control up to four motors (in two versions – two motors on wheels, a second controller controls the mowing motor, or four motors on wheels with separate channels).

A seat for the controller of a stepper motor (drive to change the mowing height of grass, for example).

Connector for installing Orange Pi Zero (to support RTK GPS centimeter accuracy And some external complex control algorithms) with the ability to update the firmware through this microcomputer.

6 PPM signal outputs for controlling brushless motors and servo drives.

6 ports for sonar HC-SR04, 2 ports For collision sensors (ardumower bumper with its evmaticheskimi sensors, for example) two capacitive grass sensor 2 inputs for analogue infrared distance sensors, four wire input for the perimeter sensors, two connectors for thermistors controlled ports for the fan, a beeper and three LEDs (20 and 70 mA). Of course, many ports can be used to connect other sensors, with certain restrictions.

Also on the connectors are almost all external ports supported by the microcontroller:

3 serial port connectors, two I2C buses with 9 connectors (One of which is buffered with connectors for both 5-volt and 3-volt devices), 2 SPI buses, CAN (without a physical transceiver), USB, two separate DACs (just outputted to connectors once you can play music there, Then in this spirit).

Addition Yelnia switching regulator 5 volts 2 amps with six connectors for external devices. Well, the relay with a fix, for emergency shutdown of the battery, to prevent its re-discharge in the event that it did not reach the charging station. Naturally, the voltage and current consumption are controlled by the microcontroller (in part via the built-in multi-channel ADC, in part via the optional MAX11617EE).

Scheme (put everything on one sheet, for convenience):


During the soldering process, the board was faced with the fact that some elements are too small for manual soldering by a hair dryer, and something can overheat (such as a diode in the charging unit), so some minor changes are possible.

The development of the SDK for writing robot firmware is already underway, with its help it will be possible rakticheski completely ignore the management of "iron" low, obtaining a set of classes for all peripheral devices and sensors. For example, a piece of code that causes a robot to rotate north will look like this (these examples are already working, although without some overload checks and the like):

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

And to go along the wire perimeter to the station, lifting the mowing motor:

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

Unfortunately, I can not post the SDK yet, much has not been written yet (such as code for supporting the Decawave DW1000 and any secondary Sensors). But I can say that all low-level functions work and after a short time I will be able to put it on github.