Je souhaite vous présenter mon projet de plate-forme universelle ouverte pour les robots domestiques (tondeuses à gazon, aspirateurs et similaires). Le projet est toujours en cours d'assemblage et d'écriture de logiciels, j'espère avoir des commentaires et suggestions utiles.

J'ai récemment fait connaissance avec le projet Ardumower (
article à son sujet ) et j'ai acquis beaucoup d'expérience intéressante. Mais, malheureusement, ce robot a de nombreuses limites différentes, donc mon client «maison intelligente» a parrainé un projet d'un robot complètement nouveau et beaucoup plus puissant qui peut bien faire face à la tonte de l'herbe et à diverses autres tâches (par exemple, il y a une idée livrer des boissons aux invités à la maison :)). Le projet est développé comme une plate-forme universelle et extensible, avec un circuit ouvert et un SDK pour écrire ses propres options logicielles.
L'élément principal du robot est la carte avec le processeur ATSAM3X8E 32 bits, identique à celui utilisé dans Arduino Due, qui vous permet d'utiliser un environnement de développement simple et familier, et supprime également de nombreux problèmes techniques en raison de la grande communauté de personnes écrivant des programmes pour cette plate-forme. En raison du grand nombre de ports de microcontrôleur, vous pouvez connecter presque tout à la carte. Spécifications de la carte:
Alimenté par 12 à 30 volts, un chargeur de batterie intégré avec un courant jusqu'à 5 ampères, et même un booster pour la charge de la batterie solaire pendant le fonctionnement.
Deux sièges pour les contrôleurs de moteurs collecteurs Polulu Dual MC33926 largement utilisés, avec la possibilité de contrôler jusqu'à quatre moteurs (en deux versions - deux moteurs sur roues, le deuxième contrôleur contrôle le moteur de tonte; ou quatre moteurs sur roues avec des canaux séparés). Les connecteurs de moteur ont des fils pour connecter les odomètres.
Empreinte pour un contrôleur de moteur pas à pas (entraînement pour changer la hauteur de tonte de l'herbe, par exemple).
Un connecteur pour installer Orange Pi Zero (pour prendre en charge le GPS RTK avec une précision centimétrique et certains algorithmes de contrôle complexes externes) avec la possibilité de mettre à jour le firmware via ce micro-ordinateur.
6 sorties de signal PPM pour contrôler les moteurs et servos sans balais.
6 ports pour sonars HC-SR04, 2 ports pour capteurs de collision (pare-chocs de tondeuse avec ses capteurs pneumatiques, par exemple), deux capteurs de gazon capacitifs, 2 entrées pour capteurs de distance analogiques infrarouges, quatre entrées pour capteurs de périmètre câblés, deux connecteurs de thermistance contrôlés ports pour ventilateur, bip et trois LED (20 et 70 mA). Bien sûr, de nombreux ports peuvent être utilisés pour connecter d'autres capteurs, avec certaines limitations.
Presque tous les ports externes pris en charge par le microcontrôleur sont également connectés aux connecteurs:
3 connecteurs de port série, deux bus I2C avec 9 connecteurs (dont l'un est tamponné avec des connecteurs pour les appareils à cinq et trois volts), 2 bus SPI, CAN (sans émetteur-récepteur physique), USB, deux DAC séparés (juste apportés aux connecteurs puisqu'il y a, vous pouvez y jouer de la musique ou quelque chose comme ça).
Un régulateur de commutation supplémentaire de 5 volts 2 ampères avec six connecteurs pour les appareils externes. Eh bien, un relais avec un verrou, pour l'arrêt d'urgence de la batterie, pour éviter sa décharge excessive au cas où vous n'atteindriez pas la station de charge. Naturellement, la consommation de tension et de courant est contrôlée par un microcontrôleur (en partie via un ADC multicanal intégré, en partie via un MAX11617EE supplémentaire).
En mode veille (les pilotes de moteur sont inactifs) - la consommation de courant est de 130-140 milliampères.
Schéma (jette tout sur une seule feuille, pour plus de commodité):

Lors du soudage de la carte, je suis tombé sur le fait que certains éléments sont trop petits pour une soudure manuelle avec un sèche-cheveux et que quelque chose peut surchauffer (comme une diode dans l'unité de charge), donc quelques changements mineurs sont possibles.
Le développement d'un SDK pour écrire le firmware du robot est déjà en cours, avec son aide, il sera possible de se désengager complètement de la gestion du matériel à un bas niveau, après avoir reçu un ensemble de classes pour tous les périphériques et capteurs. Par exemple, un morceau de code qui fait tourner le robot vers le nord ressemblera à ceci (ces exemples fonctionnent déjà, bien que sans quelques vérifications de surcharge et autres):
course = 0.0; imuSens.setCourse(course); motWheel.rollCourse((navThing *) &imuSens, 9000);
Et pour longer le périmètre câblé jusqu'à la station, en soulevant le moteur de tonte:
mow.setHeight(0); perSens.setTracking(true); motWheel.moveCourse((navThing *) &perSens, 120000);
Malheureusement, je ne peux pas encore présenter le SDK, beaucoup n'a pas encore été écrit (comme le code pour prendre en charge les étiquettes RFID Decawave DW1000 et les capteurs secondaires). Mais je peux dire que toutes les fonctions de bas niveau fonctionnent et après un court laps de temps, je peux le mettre sur github.
Teaser: