Petit robot fait maison. Ressources utiles pour créer un robot de vos propres mains Des robots sympas sur des microcontrôleurs

Bonjour, chers habitants de Khabrovsk.
Beaucoup de temps s'est écoulé depuis la dernière fois que j'ai écrit des articles sur le développement ici, il est temps de résoudre ce problème.
Dans cet article, je parlerai de la façon dont j'ai assemblé un petit robot sur le microcontrôleur STM32F101 pour divertir mon Maine Coon, Arthas, des problèmes auxquels j'ai dû faire face et de ce qui en a résulté.

Contexte et énoncé du problème

Il y a six mois, j'ai reçu ce beau Maine Coon noir, que j'ai nommé Arthas en l'honneur du célèbre héros de jeux vidéo.

Le chat est incroyablement joueur, adore courir, tendre une embuscade et même aller chercher une balle, comme un chien. Comme je n’ai rien collectionné depuis longtemps, j’ai décidé de développer un petit jouet pour le chat.
Les principales exigences étaient les suivantes :

  1. Protection des parties critiques de la structure contre les dents et les griffes du chat, idéalement un corps complètement fermé (balle)
  2. Du paragraphe précédent découle l'exigence de petites dimensions de l'appareil, car Il est souhaitable qu'il s'agisse toujours d'un petit ballon et non d'un ballon de football.
  3. Possibilité de contrôle depuis un téléphone portable/tablette et ordinateur de bureau- pour ne pas réinventer la roue et assurer la compatibilité avec appareils mobiles La communication Bluetooth est idéale.
  4. Pour le rendre plus intéressant, il serait souhaitable de disposer d'au moins une sorte de capteur qui permettrait à l'avenir de rendre le robot plus ou moins autonome, et pas seulement une voiture radiocommandée.
  5. Avoir un moyen d'émettre du son pour attirer l'attention du chat.

je vais démontrer tout de suite courte vidéo Ce qui s'est passé, c'est que le catbot a été lancé en mode test (contrôlé par moi depuis un ordinateur) :

Le catbot est testé sans coque extérieure, émet des sons qui attirent le chat et ne peut pas s'échapper car... l'un des disques tombe en panne.
(Plus d'informations à ce sujet à la fin de l'article)


Catbot assemblé

Certains peuvent penser que le chat ne réagit pas très activement au robot, mais en fait la raison est que lors des tests, il me l'a déjà arraché cent fois, l'a emporté et l'a mâché. Bien sûr, j'ai emporté le robot (ce n'est pas encore fini), alors le chat, voyant le robot par terre, a décidé d'attendre un peu pour être sûr qu'il ne lui serait pas enlevé dès qu'il attaquerait)

Développement : sélection de la base des éléments et préparation
Cadre
Après avoir décidé du design proposé, j'ai acheté une paire de boules en plastique composées de deux moitiés - l'une d'un diamètre de 60 mm, l'autre de 80 mm, au cas où la première ne pourrait pas rentrer. De telles dimensions limitaient grandement le choix des moteurs et des capteurs (dans le sens où, par exemple, un capteur à ultrasons pourrait être oublié ; il ne rentrerait pas dans la boule et, de plus, ne fonctionnerait pas dans un espace clos).

Microcontrôleur
Après avoir scié « l’oreille », les boules sont devenues des candidates idéales pour le rôle du corps. En raison des dimensions limitées, il a été décidé de concevoir l'ensemble du circuit en utilisant les plus petits boîtiers, c'est-à-dire pour la plupart des QFN.
STM32F101 a été choisi comme processeur central, car il s'agit d'un microcontrôleur basé sur le cœur Cortex M3, et non sur le M0 allégé, alors qu'il peut fonctionner à 36 MHz, dispose de 64 Ko de flash et de 16 Ko de RAM et, la plupart surtout, est disponible en corps QFN 6x6 mm
Capteur
Le capteur choisi était un accéléromètre à trois axes du même ST, qui bénéficiait d'une réduction chez Terraelectronics, je l'ai donc acheté pour environ 30 roubles pièce.

L'accéléromètre est disponible dans un boîtier QFN 3x3 mm et peut communiquer via un bus I2C, ce qui est très utile dans des conditions de dimensions limitées. À l'aide d'un accéléromètre, il est possible de calculer l'inclinaison du robot le long de trois axes, et aussi, peut-être, d'essayer d'en obtenir des informations indiquant si le robot est en mouvement ou s'il a heurté un obstacle (par des changements d'accélération). Et bien sûr, déterminez le moment où le chat lui donne un coup de pied pour faire un couinement - de cette façon, le chat croira que c'est quelque chose de vivant)

Connexion
Comme moyen de communication, nous utilisons bien sûr des modules chinois HC-05 éprouvés, bon marché et de petite taille.

C'est le seul module prêt à l'emploi inclus dans le robot.
Source sonore
Au départ, je voulais utiliser de petites enceintes, mais malheureusement, même les plus petites étaient encore assez grandes. De plus, ils consommaient beaucoup et nécessitaient au moins un transistor et un filtre pour les pomper en PWM. Après quelques recherches sur Google, j'ai trouvé ce bip piézo intéressant :

Le PKLCS1212E4001 de Murata coûte 48 roubles, a des dimensions de 11x11 mm (le plus grand élément de la carte !) et est un sondeur piézoélectrique standard - un appareil qui produit du son en courbant la membrane avec effet piézoélectrique. Cela signifie qu'il consomme des ordres de grandeur. moins de courant qu'un haut-parleur émettant un bip au même volume.
Mais contrairement à un haut-parleur, il a une réponse en fréquence très délicate et inégale, donc ce qu'il fait de mieux, c'est le grincement. Et elle peut le faire le plus fort à une fréquence de 4 KHz (mais cela ne veut pas dire que vous ne pouvez pas grincer sur les autres !)
Lecteurs
L'élément le plus important sont les entraînements qui déplaceront le robot. Malheureusement, tout ne s'est pas déroulé aussi bien que nous l'aurions souhaité ; nous en parlerons davantage à la fin de l'article. Pour les entraînements, j'ai décidé de prendre les plus petits servos que j'ai pu trouver et de les convertir pour une rotation constante.
Mon choix s'explique par le fait qu'en prenant des servos j'obtiens un moteur + réducteur + carte de commande dans un boîtier d'environ 15x20x8 mm. Malgré tous mes efforts, je n’ai pas trouvé de motoréducteurs de cette taille.
En conséquence, le choix s'est porté sur des servos sub-micro, au prix de 187 roubles chacun :

Nutrition
Tous les éléments ont été sélectionnés, il reste à décider comment et avec quoi alimenter le système. Évidemment, la source la plus petite et la plus appropriée est une petite batterie au lithium polymère. Étant donné que les disques nécessitent 4,8 V, nous augmenterons la tension à 5 V avec un convertisseur DC-DC de petite taille de MAXIM Semiconductors. Le MAX8815 est un excellent microcircuit dans un boîtier de 3 x 3 mm qui vous permet de fournir jusqu'à 1 A à une charge avec une efficacité de 97 % (ce qui, bien sûr, dépend de la disposition correcte du PCB, du mode de fonctionnement et du choix du câblage, comme toujours).
Étant donné que les disques ne consomment pas plus de 600 mA, même aux heures de pointe, cela est largement suffisant.

Pour alimenter le reste de l'électronique et les protéger des interférences introduites par les moteurs, après le convertisseur élévateur DC-DC, nous installerons un régulateur linéaire de petite taille de TI, LP2985, avec une sortie fixe de 3,3 V.

Circuits et un peu de design

Tout d’abord, quelques mots sur la conception du robot. Pour minimiser les dimensions et les coûts, j'ai décidé d'utiliser des circuits imprimés comme éléments structurels. Autrement dit, les lecteurs sont serrés entre deux cartes de circuits imprimés maintenues ensemble par des vis. Une fois assemblé (et après débogage des modifications apportées à la carte, dont nous parlerons plus tard), tout ressemble à ceci :

Pour empêcher les disques de bouger, j'ai mis un matériau merveilleux entre la planche et leur surface - du latex provenant d'un expanseur Torres

Le fait est que j'ai acheté une fois une fronde en Chine. La lance elle-même était très confortable, en alliage de titane, mais le caoutchouc ne servait à rien. Sur Internet, des experts en lance-pierres ont conseillé de le jeter immédiatement, de s'acheter ce même extenseur et d'en couper des harnais de remplacement. Le résultat a dépassé toutes mes attentes et la fronde est devenue incroyablement puissante. Et parce que l'expandeur est une grosse chose, alors Ô La plupart du matériel est resté intact et gisait dans une boîte, attendant dans les coulisses.
Après avoir utilisé ce latex comme joint entre les disques et la carte, les disques s'ajustent comme un gant, sans bouger d'un millimètre.

En conséquence, pour mettre en œuvre une telle conception, deux cartes sont nécessaires, dans lesquelles tous les composants sont concentrés sur les côtés extérieurs.
Puisque nous avons une augmentation si soudaine de la surface utilisable, nous pouvons placer sur le plateau inférieur chargeur pour la batterie, un connecteur mini-USB, des LED indiquant la charge, et, en même temps, déplacez-y le module BT pour qu'il ne soit pas recouvert par la batterie et n'interfère pas avec la communication.
Ainsi, deux PCB ont été développés, TOP et BOTTOM. En bas se trouve ce que j'ai déjà dit, et en haut se trouve tout le « cerveau » et, pour ainsi dire, le système digestif du robot - un microcontrôleur, un accéléromètre, un convertisseur et un régulateur de puissance, et, bien sûr , un tweeter piézo.

Le schéma du panneau supérieur ressemble à ceci :


Schéma d'alimentation


Cerveau

Pour empêcher l'USB d'envoyer ses cinq volts là où il n'est pas nécessaire, les entrées ON du convertisseur U1 et le régulateur U2 sont connectées, tirées vers l'alimentation et sorties sur la broche J1 sur le bord de la carte - en appliquant le niveau GND. là, les entrées et sorties du convertisseur seront transférées dans un état à haute impédance, coupant essentiellement le circuit et permettant au courant USB de circuler là où il doit être : dans le circuit de charge de la batterie. Le reste du schéma de connexion du convertisseur est typique, tiré de la fiche technique.

L'accéléromètre U4 est connecté au bus I2C du contrôleur sans résistances de rappel - oui, elles sont nécessaires au fonctionnement du bus, mais la fiche technique assure que les deux lignes sont connectées à Vdd_IO via une résistance de rappel intégrée à l'intérieur du LIS331DL. Bizarrement, il n'y a plus d'informations à leur sujet ; je n'ai jamais connu la valeur nominale (et lorsqu'elle est éteinte, elle n'est pas mesurée ; apparemment, ils sont déconnectés du bus par des transistors). J'ai donc dû me fier aveuglément à la fiche technique. Je dois dire que j'avais raison : l'accéléromètre fonctionne très bien sans résistances supplémentaires.
Cependant, une autre falsification majeure y était associée, que vous pouvez découvrir dans la section « Tests et falsifications ».

En plus de l'accéléromètre, la LED D1 est connectée au contrôleur, conçue pour attirer visuellement l'attention du chat et servir d'indication, ainsi qu'un diviseur de tension sur les résistances R4 et R5, qui est connecté à l'entrée ADC du contrôleur via condensateur de lissage C5. Ce diviseur amène la tension de la batterie dans une plage que l'ADC peut mesurer, donnant une indication du niveau de charge de la batterie.
D'ailleurs, un mini-fak-up était associé à ces résistances. Le fait est que j'ai supposé que mon contrôleur avait une tension de référence intégrée (environ 1,2 volts), comme dans les anciens modèles. Mais il s'est avéré que dans les modèles du boîtier QFN36, il n'y a pas de source intégrée et l'entrée REF à l'intérieur du boîtier est court-circuitée à la tension d'alimentation (3,3 V), de sorte que les résistances qui, à 4,2 V, donnaient 1 V à la batterie en sortie a dû être remplacée par celles qui donnent 3V.

Le tweeter LS1, grâce à sa nature piézo, peut être connecté directement à la broche du contrôleur - sa consommation est très faible, sur fréquence de résonance son impédance est de plusieurs centaines d'ohms. Le seul problème potentiel est qu'il peut également fonctionner dans le sens opposé, c'est-à-dire générer une tension lorsqu'il est déformé (chocs), pour lequel des diodes ou des résistances de protection sont généralement installées. Cependant, selon les résultats de l'expérience, la tension lors d'un impact moyen ne dépassait pas 1,5 V, ce que les diodes de protection de la sortie du contrôleur peuvent facilement gérer, j'ai donc pris le risque de ne pas installer de protection supplémentaire.

Les sorties du générateur PWM intégré du contrôleur sont acheminées vers les broches J8 et J9 pour contrôler les variateurs. Comme mesure supplémentaire (et, comme il s'est avéré, non superflue) pour réduire la consommation en mode inactif, les contacts J11 et J12, auxquels sont connectés les GND des variateurs, sont coupés de la masse du circuit par le transistor de puissance Q1 - alimentation haut niveau sur la porte donne aux actionneurs la puissance de la terre et permet au courant de circuler dans leurs entrailles. Il s'est avéré que même avec un signal PWM nul, le circuit de commande des variateurs leur fournit toujours une certaine tension et la consommation augmente de 10 mA par rapport à ceux complètement désactivés.

Un point important était le choix de l'interface de débogage. Dans des conditions de dimensions très limitées, j'ai bien sûr voulu me contenter d'un nombre minimum de fils. Mais les informations sur le montant minimum se sont révélées très contradictoires. Après une recherche réfléchie sur Google et des expérimentations, j'ai opté pour l'interface SWD, affichant uniquement les broches SWDIO et SWCLK. Une autre falsification est liée à cela, décrite dans la section « tests et falsifications ». Mais en bref, oui, ces deux broches suffisent vraiment pour le débogage dans la plupart des cas.

Le plateau inférieur est conçu tout simplement :


Planche inférieure

Il contient deux microcircuits linéaires de charge de batterie Li-Pol (Li-Ion) connectés en parallèle, LTC4054 de Linear Technology. C'est le moyen le plus simple que je connaisse de charger des polymères de lithium monocellulaires et des ions lithium, si le rendement plutôt faible ne vous dérange pas (qui est dû au fait que les puces sont linéaires).
Ils s'intègrent parfaitement en parallèle, dans certains Schémas chinois J'ai vu jusqu'à quatre mikruhi similaires en parallèle, fournissant un courant de charge important. Individuellement, chacun peut fournir jusqu'à 800 mA, mais seulement si vous souhaitez faire frire des œufs avec. Lorsque la charge est supérieure à 500 mA et que la batterie est complètement déchargée, le microcircuit commence à chauffer tellement qu'il est impossible de tenir le doigt. Parce que il dispose d'un circuit de protection contre la température intégré, ce qui, en principe, n'est pas effrayant - il baissera automatiquement le courant de charge lorsqu'il se réchauffera jusqu'à 120 degrés. Mais ce n’est quand même pas très agréable, j’ai donc préféré mettre deux pièces, heureusement la place permise. Le courant de charge est réglé par les résistances R4 et R5, que j'ai sélectionnées de manière à ce qu'elles soient d'environ 500 mA pour deux (c'est-à-dire 250 mA pour chacune), auxquelles elles ne chauffent pas autant.

De plus, la carte contient un connecteur mini-USB (J2), le transistor Q1, qui met à la masse l'entrée ON du circuit d'alimentation de la carte supérieure, lorsque Connexion USB et un module de communication Bluetooth.

J'ai commandé les planches chez Rezonit, et cela s'est avéré assez bon marché - j'ai payé moins de 2 000 roubles pour un panneau de six planches différentes, qui comprenait également deux planches du catbot.
Les planches supérieure et inférieure ont des dimensions de 32x26 mm. Après assemblage (et avant que les faux soient réparés), la carte supérieure ressemble à ceci :

Et celui du bas ressemble à ceci :

Il est temps d'écrire un firmware de test !

Tester le micrologiciel

Je prévois de créer le firmware final basé sur FreeRTOS (afin de ne pas perdre de temps sur la mise en œuvre du multitâche normal, le blocage des files d'attente, etc.), mais pour le test j'ai esquissé un petit firmware qui initialise tous les périphériques et permet de le contrôler avec des commandes simples depuis l'ordinateur. Passons en revue les initialisations :

Synchronisation et GPIO

Code

void InitRCC() ( RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); eriph_TIM3,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I); 2C1,ENABLE); ; ) void InitGPIO() ( GPIO_InitTypeDef GPIO_InitStructure; //LED GPIO_InitStructure.GPIO_Speed ​​​​= GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; GPIO_Mode_AIN ; cture.GPIO_Pin = GPIO_Init(GPIO_InitStructure); //Buzzer GPIO_InitStructure.GPIO_Speed ​​​​= GPIO_Speed_50MHz ; IO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;


Tout est simple ici - nous appliquons une horloge à tous les périphériques dont nous avons besoin, c'est-à-dire aux ports d'E/S, ADC, UART, quelques minuteries (une pour le tweeter, la seconde pour les lecteurs PWM) et à I2C . Ensuite, nous configurons tous les GPIO.
Couineur

Code

void InitBuzzer() ( TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period = 4; TIM_TimeBaseStructure.TIM_Prescaler = 1800; TIM_TimeBaseStructure.TIM_ClockDivision = 0; M_CounterMode = TIM_CounterMode_ Vers le haut ; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1 ; TIM_OCInitStructure.TIM_Pulse = 0 ; TIM_OCPolarity_High ; _ARRPreloadConfig(TIM2, ENABLE);


La configuration se résume à initialiser le timer dont la sortie est connectée au buzzer. Nous configurons le PWM, mais, en fait, nous ne modifierons pas la largeur d'impulsion, en la réglant toujours à 50 %. Au lieu de cela, nous allons changer le diviseur, ce qui amènera la minuterie à modifier la fréquence d'impulsion pour émettre un bip avec une tonalité différente.
Parce que fréquence du système est de 36 MHz, réglez la période sur 4 (nous n'avons toujours pas besoin de beaucoup de décharge PWM) et le prescaler sur 1800, obtenant une fréquence de 4 KHz.
Lecteurs

Code

void InitServo() ( TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period = 0xFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0xB0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; .TIM_CounterMode = TIM _CounterMode_Up ; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1 ; ; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; OC1PreloadConfig(TIM3, TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);


On fait la même chose qu'avec le tweeter, mais on l'affine déjà pour la sortie PWM avec les paramètres requis par les variateurs, à savoir une fréquence d'environ 50 Hz, et ça suffit grand nombre décharges pour contrôler la vitesse avec une grande précision. Ainsi, nous réglons le pré-échelle à 176 et la période à 4096, ce qui nous donne environ 50 Hz et 12 bits de PWM.
Accéléromètre et Bluetooth

Code

void InitAccel() ( I2C_InitTypeDef I2C_InitStructure; I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; structure.I2C_Ack = _Enable ; I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit ; I2C_InitStructure.I2C_ClockSpeed ​​​​= 200000 ; ); void InitBT() ( USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_Init Structure.USART_StopBits = USART_StopBits_1; USART_InitS tructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitSture.usart_mode = USART_MODE_RX | USART_MODE_TX ; Usart_init (USART1, & Usart_initSTRUTER Sart_it_rxne, activer) ;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 ;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0 ;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;

Code

#define OPCODE 0 #define LENGTH 1 #define PAYLOAD 2 enum CommandStates (CS_DONE, CS_RECEIVING, CS_EXECUTING); enum CommandCodes (CC_TEST=0x01, CC_SERVO_STATE, CC_SET_SERVO1_DS, CC_SET_SERVO2_DS, CC_GET_ACCEL_REG, CC_SET_ACCEL_REG, CC_GET_BATTERY, CC_LED_STATE, CC_BUZZER, CC_INVALID) ; enum ErrorCodes (EC_NONE, EC_INVALID_CMD, EC_MAX_LEN_EXCEEDED); enum ReplyCodes (RC_NONE, RC_EXECUTED, RC_TEST, RC_ACCELREG, RC_ERROR); typedef struct (commande de char non signé ; état de char non signé ; longueur de char non signé ; charge utile de char non signé ; )CommandDescriptor ; Descripteur de commande Cmd ; void InitCmd(CommandDescriptor *Comm) ( Comm->Command=0; Comm->Length=0; caractère non signé i; for(i=0;i Charge utile[i]=0 ; Comm->State=CS_DONE ; //État d'initialisation à la fin, pour empêcher l'interruption d'interférer) void SetInvalidCmd(CommandDescriptor *Comm, unsigned char ErrorCode) ( Comm->Command=CC_INVALID; Comm->Length=3; Comm->State=CS_EXECUTING; //Juste renvoyer l'erreur Comm->Payload=ErrorCode; ) void USART1_IRQHandler(void) ( char data; if ((USART1->SR & USART_FLAG_RXNE) != (u16)RESET) ( data = USART_ReceiveData(USART1); switch(Cmd.State ) ( cas CS_DONE : if(data>=CC_INVALID) ( SetInvalidCmd(&Cmd, EC_INVALID_CMD); return; ) Cmd.Command=data; Cmd.Length=0; Cmd.State=CS_RECEIVING; return; cas CS_RECEIVING : if(Cmd. Longueur==0) ( if(data>CMD_BUFFER_LEN) ( SetInvalidCmd(&Cmd, EC_MAX_LEN_EXCEEDED); return; ) Cmd.Length=data; BufPtr=0; return; ) if(BufPtr


=Cmd.Length-2) ( Cmd.State=CS_EXECUTING; return; ) case CS_EXECUTING: return;
) ) )
Tout d'abord, déclarons la structure de la commande, qui sera constituée en fait de la commande elle-même, de l'état (exécuté, en cours de réception, en cours de traitement), de la longueur du paquet (y compris les deux champs déjà répertorié) et la charge utile, qui peut aller de 0 à 8 octets.
Décrivons une fonction auxiliaire pour initialiser cette structure et une autre pour la remplir avec des valeurs de commande invalides. Décrivons maintenant l'interruption. Après avoir reçu un octet via UART, voyons ce qui s'y passe avec la commande actuelle (celle qui est la seule dans la "file d'attente") -.
Si nous sommes en train de recevoir, nous contrôlons la longueur de ce que nous recevons pour qu'elle ne dépasse pas 10 octets (2 octets de l'en-tête et de la charge utile) et la longueur déclarée dans le deuxième octet de l'en-tête. Si quelque chose ne va pas, nous signalons une erreur, sinon nous disons que la commande a été reçue et est entrée dans l'état CS_EXECUTING. A partir de maintenant, nous ignorons tout ce qui nous arrive jusqu'à ce que quelqu'un donne un état à cet ordre. CS_DONE.
Si nous avions une vraie file d'attente, nous pourrions y lancer la commande reçue et accepter les suivantes pour le moment.

C'est tout - la fonction principale du firmware initialise simplement les périphériques, active Bluetooth et attend que la commande ait un état CS_EXECUTING. Après cela, il traite la commande (je ne donnerai pas ce code, c'est juste un gros commutateur utilisant des opcodes avec des octets de la charge utile entrés dans les registres) et définit son statut CS_DONE.

vide principal()

Code

int main(void) ( InitCmd(&Cmd); InitHardware(); DisableServos(); EnableBT(); EnableLED(); while(1) ( if(Cmd.State==CS_EXECUTING) ( ProcessCmd(&Cmd); InitCmd(&Cmd ); ) ) )

Modification des entraînements pour des problèmes de rotation et de conception constants
Étant donné que les entraînements sont initialement conçus pour tourner à 170 degrés, ils doivent être légèrement améliorés afin de pouvoir être utilisés comme moteurs de robot. En raison de leur petite taille, cela peut ne pas être très facile au début.
En général, tous les entraînements sont construits de la même manière, quelle que soit leur taille - ils ont un moteur, ils ont une boîte de vitesses dont l'arbre de sortie se trouve sur le même axe avec une résistance variable, à partir de laquelle le circuit de commande reçoit des informations sur la position actuelle. de l'arbre.


La résistance est incluse comme diviseur entre l'alimentation et la terre. Il y a une butée sur l'un des engrenages de l'arbre de sortie qui empêche le servo de tourner plus loin qu'il ne le devrait, et le potentiomètre lui-même agit également comme une telle butée. Plus précisément, dans ces entraînements, tout est assez trivial - la butée est une saillie sur l'arbre de sortie, assez grande, il est donc plus facile de la couper, mais ce sur quoi elle repose, la saillie à l'intérieur du couvercle de l'entraînement.

Cette saillie peut être facilement fondue avec un fer à souder ; l'essentiel est de s'assurer qu'il ne reste aucun morceau de plastique qui gênerait la rotation.
L'arbre du potentiomètre contient une petite coupure à son extrémité, ce qui l'empêche de tourner dans l'engrenage de l'arbre de sortie. Très pratique, il est situé dans un petit renfoncement dans lequel s'insère cet engrenage. Par conséquent, nous le coupons/fusionnons simplement avec un fer à souder jusqu'à ce qu'il ne reste plus aucune trace de cette coupure. Ça y est, l'engrenage tourne tranquillement sans toucher la résistance variable.


Nous lubrifions tout en plus, car... La graisse de rechange chinoise, fermez le capot supérieur. Il en reste très peu.
Nous ouvrons le capot inférieur et voyons le circuit de commande connecté au moteur et au potentiomètre.


Nous avons impitoyablement coupé les fils du potentiomètre et les retirons du servo afin qu'ils n'interfèrent pas. Aux plages de contact auxquelles elles sont allées, nous soudons deux petites résistances CMS identiques, d'une résistance totale d'environ 5 KOhm (si un peu plus ou un peu moins, ce n'est pas grave), formant un diviseur constant. J'en ai soudé deux de 2,4 KOhm.
Étant donné que les moteurs seront en miroir les uns par rapport aux autres, nous échangeons également les fils allant au moteur pour l'un d'eux. Vous pouvez bien sûr le faire avec un logiciel, mais le matériel est plus agréable.

Ça y est, désormais le servo considérera toujours que son axe est exactement au milieu. Et en appliquant un signal PWM avec une valeur de rapport cyclique supérieure à la moyenne, l'arbre de sortie commencera à tourner dans un sens et avec un rapport cyclique inférieur dans l'autre. Et plus la valeur donnée est éloignée de la moyenne, plus l'arbre tourne vite.

Tests et contrefaçons


Le client teste un appareil prototype

Puisque j'ai déjà démontré une vidéo et une photo de l'appareil ci-dessus, cette rubrique contiendra principalement description du texte le râteau sur lequel j'ai marché. Certains d’entre eux sont survenus par ma faute, d’autres ne dépendent pas de moi.

Merde avec la nourriture
La toute première falsification, qui a entraîné le plus de modifications dans le schéma. Connecté au convertisseur boost. Lorsque j'ai démarré l'appareil pour la première fois (pas encore de lecteurs), je n'ai rien remarqué, le contrôleur a démarré et a flashé. 5V étaient présents à la sortie du convertisseur. Il est temps de vérifier les disques, et c'est là que le râteau est sorti. Lors de la connexion des lecteurs, le convertisseur a été instantanément coupé - sa protection intégrée s'est déclenchée, désactivant le microcircuit si la tension de sortie tombait de plus de 10 % en dessous de la valeur spécifiée (5 V). Le débogage m'a pris beaucoup de temps, notamment m'asseoir devant un oscilloscope, remplacer la puce du convertisseur elle-même par une similaire, tester différentes selfs, etc.
Fait intéressant, même les conteneurs accrochés à proximité des lecteurs n'ont pas aidé, j'ai donc décidé que le problème venait de la disposition de la carte ou de l'inducteur. Les mesures ont montré que le convertisseur cesse de fonctionner à une charge supérieure à 90 mA, même dans le cas d'une charge purement résistive ! Dans le même temps, le rendement était d'environ 40 %, ce qui est bien entendu inacceptable pour un convertisseur d'impulsions.

La raison s'est avérée incroyablement banale - il semble qu'au lieu d'un condensateur céramique de sortie de 10 µF, j'ai soudé par erreur le même de 1 µF. Avec une telle capacité de sortie, le microcircuit ne pouvait pas atteindre le mode de fonctionnement et les gros condensateurs accrochés aux buses ne l'aidaient pas du tout.
Après avoir légèrement démonté la carte du masque, j'ai soudé deux condensateurs céramiques de 22 uF à la sortie du convertisseur, à son entrée et juste devant les servos.
En parallèle, j'ai installé une self de lissage (plus précisément une perle de ferrite), BLM41PG471SN1, évaluée à 2A, entre la sortie du convertisseur et les servos.
De plus, il s'est avéré que l'espace sur la carte vous permet d'insérer un condensateur au tantale dans le boîtier « A », 150 uF, juste à côté de la sortie du convertisseur.
En fait, pour un fonctionnement correct, un condensateur de 22 uF en sortie et un en entrée auraient suffi, mais comme l'espace le permettait, j'ai décidé de jouer la sécurité.
Le résultat était tout simplement magnifique, la sortie 5V était presque silencieuse même sous charge, et l'efficacité du convertisseur, selon mes mesures (j'ai inclus des ampèremètres dans les circuits d'entrée et de sortie), atteignait 93 pour cent, ce qui en soi est un très bon indicateur.

Conclusion de la falsification : Vérifiez quels éléments vous soudez sur la carte. Les convertisseurs d'impulsions sont des objets sensibles, et les composants accrochés à la morve n'amélioreront pas la situation, même si la direction de la pensée (capacité de sortie insuffisante) était correcte.
La résistance des sondes du multimètre et du shunt, la capacité et l'inductance des planches à pain déforment l'image, ces choses doivent donc être testées dans la configuration finale, et non sur la morve.

Merde avec l'accéléromètre
Fak-up hémorroïdaire, encore une fois dû à l'inattention. Lors du test des périphériques, il s'est avéré que l'accéléromètre ne répondait pas. Parce que il se trouve sur le bus I2C, la communication commence (sans compter l'impulsion de démarrage) avec le transfert de l'adresse de l'appareil. Après quoi, il doit répondre par une impulsion de confirmation si l'adresse correspond. Il n’y a eu aucune impulsion.
Comme le corps de l'accéléromètre était le pire à souder (3x3 mm et il n'y avait pas de plot « masse » sur le ventre du microcircuit, c'est pourquoi il était centré de manière dégoûtante), j'ai décidé que le problème venait de la soudure et j'ai passé beaucoup de temps temps de le ressouder plusieurs fois. Cela n'a pas aidé.
Ensuite, j'ai décidé que les résistances intégrées promises s'avéraient insuffisantes, j'ai donc nettoyé la carte et soudé la mienne. Cela n'a pas aidé.
J'ai vérifié le code plusieurs fois et vérifié l'adresse avec la fiche technique. Cela n'a pas aidé.
En conséquence, par miracle, il a fourni une adresse qui différait une à une de celle spécifiée (par l'un des chiffres de la représentation binaire de l'adresse). Cela a aidé.
J'ai commencé à creuser des fiches techniques parce que cela ne pouvait tout simplement pas arriver - que l'appareil réponde à une adresse différente. Et j'ai découvert une bonne chose.
Il s'avère qu'il existe deux modifications de l'accéléromètre : et.
Corps identique. Fiches techniques identiques. Même carte de registre. C'est juste que le second ne peut pas mesurer 2g/4g/8g, mais le premier ne peut mesurer que 2g/4g.
Et leurs adresses diffèrent d'un point. Bon Google, quand j'ai commencé à taper LIS133 il m'a automatiquement indiqué « LIS133DLH », je n'ai pas tout de suite vu la différence dans les fiches techniques, alors j'ai tapé sur l'Axel avec l'adresse de quelqu'un d'autre.

Conclusion de la falsification : Vérifiez le nom de l'élément dans la fiche technique. Si elle diffère de celle attendue d'au moins une lettre, assurez-vous de savoir de quoi cette lettre est responsable. Le plus souvent, les lettres à la fin ne sont pas importantes pour le développement et concernent le type de livraison du composant, mais cela arrive aussi comme avec cet accéléromètre.

Merde avec le module Bluetooth
Eh bien, cette connerie relève davantage de la conscience des Chinois. Il s'avère qu'ils produisent plusieurs modifications de ce module, HC-04, HC-05, HC-06 - ils ne diffèrent pas par le matériel, ils diffèrent par le firmware. Si vous le souhaitez, vous pouvez passer de l'un à l'autre.
J'ai reçu HC-04 au lieu de HC-05, ils diffèrent en ce que 04 a un firmware plus simple, et si 05 passe en mode commande en envoyant un signal à l'un de ses GPIO, et que 05 peut fonctionner à la fois en maître et en esclave, alors 04 est toujours il fonctionne uniquement en esclave (ou uniquement en maître, mais je n'ai pas vu de tels modules en vente), est initialement en mode réception de commandes et cesse d'y répondre après avoir établi une connexion avec le maître.
De plus, aucun de ces modules ne prend en charge le mode veille d'économie d'énergie.
Par conséquent, il s'est avéré que le signal que j'émets pour passer le module en mode commande est inutile, et également que le module consomme constamment de 20 à 40 mA lors de la recherche d'un maître.
La solution consistait à transférer le signal de commande, inutile dans cette situation, vers la broche RESET du module. Désormais, lorsqu'un niveau bas y est appliqué, le module passe à l'état RESET et arrête de consommer.

Conclusion de la falsification : L’Orient est une question délicate. Les modules chinois sont une loterie, il faut lire attentivement les fiches techniques, vérifier aussi ce qu'ils vous envoient.

Merde avec l'interface de débogage
Ce n’est pas exactement une falsification, mais cela donne matière à réflexion. Oui, pour le micrologiciel et le débogage, deux broches de signal SWD suffisent vraiment : horloge et données. Cependant, il ne sera pas du tout cousu (par ST-LINK en tout cas) si la broche du programmateur VAPP pas connecté directement à l’alimentation du contrôleur. Le programmateur teste la tension avec et y est généralement assez sensible ; pour une raison quelconque, cela n'a pas fonctionné pour moi même lorsque je l'ai connecté à la source 3,3 V du programmateur. Cependant, ce n'est pas si effrayant - eh bien, je l'ai soudé à l'un des connecteurs de lissage.
Quelque chose d'autre est bien pire. Avoir une épingle NRST, qui est bien entendu responsable de la réinitialisation du contrôleur. Et en fait, SWD peut réinitialiser le logiciel du contrôleur, donc en principe il n’est pas nécessaire de le connecter. Mais.
Le râteau s'est glissé lorsque je testais le mode veille. Malheureusement, je n'ai pas lu ces termes importants de Refman STM32, section Prise en charge du débogage pour les modes basse consommation: Le noyau ne permet pas de désactiver FCLK ou HCLK pendant une session de débogage. Comme ceux-ci sont requis pour la connexion du débogueur, lors d’un débogage, ils doivent rester actifs.
Pendant le sommeil le plus profond, en mode veille, la synchronisation est désactivée ainsi que le débogage. Et parce que Pour le test de consommation, j'ai simplement rentré l'entrée stand-by dans le principal, puis je me suis retrouvé avec un contrôleur non couture.
Le lien entre la réinitialisation et ce fait est simple - le programmateur peut coudre sous la réinitialisation lorsque le mode veille n'est pas encore activé (et il est activé immédiatement lorsqu'il est allumé avec mon firmware), seulement pour cela, il doit pouvoir pour redémarrer le contrôleur, qui sans broche NRST il ne pouvait pas le faire.
Ce qui m'a sauvé, assez curieusement, c'est l'utilitaire standard de ST, qui disposait d'un excellent mode automatique dans lequel le programmeur essaie constamment de détecter l'automate programmable. Après avoir activé ce mode, j'ai commencé le câblage avec GND soudé à l'aiguille, en essayant de pénétrer dans le tampon de réinitialisation qui dépassait à peine sous le contrôleur. Cela a réussi, le programmeur a réussi à récupérer le contrôleur avant qu'il ne se rendorme et efface le firmware.

Conclusion de la falsification : Lorsque vous vous endormez, pensez à la façon dont vous allez vous réveiller. Eh bien, vous devez retirer la réinitialisation, à au moins un millimètre du corps, afin de pouvoir au moins la piquer avec une aiguille.

Merde avec les lecteurs
La connerie la plus triste, et ce n'est pas sur ma conscience. Les disques, désolé, sont de la merde. Ils sont conçus exclusivement pour leur mode servo, et de manière à réaliser Ô la plupart du temps en position statique. Sous charge, ils chauffent sans pitié. De plus, ils chauffent même si rien n’y est attaché, l’arbre ne fait que tourner. Par conséquent, ils ne peuvent pas fonctionner en mode rotation constante - après deux minutes, même à des vitesses réduites et avec une excellente lubrification à l'intérieur (rien ne colle, le mouvement est fluide), ils commencent à fondre naturellement.

Le corps fond et, pire encore, les engrenages, notamment celui de sortie. Après cela, le lecteur se bloque et seul le remplacement est utile. Ainsi, le catbot sous la forme sous laquelle il est présenté sur la photo et la vidéo ne peut fonctionner que pendant 1 à 2 minutes avec des pauses. Nous avons donc dû le démonter et remplacer les variateurs par des MG90 plus sains, plus lents et plus consommateurs, avec des engrenages métalliques capables de tourner lentement pendant une durée infiniment longue.
Alors maintenant, il ne rentre plus dans le ballon (même un gros, encore moins un petit) et roule très lentement.
Le chat, cependant, est toujours intéressé.

Conclusion de la falsification : Eh bien, quelle conclusion peut-on tirer ? Il s’agissait d’un échantillon test, juste pour révéler de telles choses. Conclusion sur les disques : utilisez les petits disques avec beaucoup de précautions. Peut-être qu'ils tireront un hexagone ou un quadripode ultra-léger et ultra-petit, j'essaierai d'en assembler un quand j'aurai le temps.

Conclusions générales sur le travail : Dans l’ensemble, ce fut une expérience utile. Et le chat l'apprécie même malgré les nouveaux entraînements, grâce auxquels le chatbot est devenu plus grand et plus lent. Surtout quand il bipe)
Pour ceux qui collectionnent chose similaire Je peux aussi dire ceci - le capteur de rotation (l'essieu n'en fait pas partie) est une chose obligatoire, donc aucun niveau d'étalonnage et de valeurs constantes ne peut atteindre la même vitesse de deux entraînements différents et des roues sur eux. Le robot se déplacera donc en cercle. Avec un bon calibrage - sur un très grand cercle, cela ne sera donc perceptible que lors de la conduite d'un mur à l'autre. Si c’est mauvais, cela se remarquera plus tôt. J'envisage donc de mettre un capteur plus sophistiqué dans la prochaine version. Eh bien, et des disques plus adaptés, bien sûr.
Il existe également une idée pour essayer d'organiser le refroidissement des moteurs dans de petits entraînements ; avec des vitesses réduites, cela pourrait bien suffire pour un fonctionnement correct (après tout, leur dissipation thermique est dégoûtante maintenant). Si cela fonctionne, attendez le prochain article, sur catbot v1.5, avec disques refroidis et sur FreeRTOS !

C'est tout pour moi, collectionnez des robots et amusez vos chats !

26.01.2011, 09:18
Source:

Habituellement, dans les articles, j'essaie de présenter le matériel dans l'ordre de son développement, mais je pense que ce n'est pas le cas. Par conséquent, sautons les étapes de conception des principes fondamentaux. schéma électrique, la disposition des PCB et tout le reste. Dans la figure 1, nous voyons quel genre de « honte » j’ai eu.

À première vue, cela ressemble à un simple tas de fer, d’électronique et de fils. Cela est probablement dû au fait que des morceaux de matériaux différents ont été utilisés. Voyons cela.

Maintenant, tout est en ordre. Au microcontrôleur Attiny2313 de deux capteurs infrarouges un signal d'obstacle est reçu (un logique ou zéro). Ensuite, selon le firmware, le microcontrôleur contrôle la puce pilote du moteur L293D (courant de contrôle jusqu'à 1 ampère). La figure 3 montre une photographie d'un robot inversé.

La base de la conception d'un robot fait maison est une bande métallique pliée en trapèze. L'angle de courbure est d'environ 120°. Il est fondamentalement important que le même virage soit obtenu des deux côtés, sinon le robot ne se déplacera pas en ligne droite. Bien que, d'un autre côté, ce qu'un mécanicien ou un électronicien a mal fait puisse parfois être corrigé par un programmeur, par exemple en utilisant PWM pour obtenir un mouvement linéaire du robot.

Nous savons tous grâce au cours de géométrie scolaire qu'un plan est formé soit de trois points, soit d'une droite et d'un point dans l'espace. Le troisième point est une roue à rouleaux en rotation libre.

Les récepteurs des capteurs IR et des phototransistors sont situés en bas afin de réduire l'éclairage et de minimiser les faux positifs. Les capteurs IR eux-mêmes sont montés sur des charnières mobiles, ce qui vous permet d'ajuster la zone de numérisation. Au fait, la réaction de mon chat face au robot rampant dans le couloir a-t-elle été intéressante ? Mon chat est noir. J'ai réglé les capteurs IR sur du papier peint gris, de sorte que le robot s'est retourné devant le chat presque au tout dernier moment, et le chat a reculé d'un pas avec un fort sifflement.

Le prochain modding pour le robot était des capteurs IR sur son ventre, permettant au robot de suivre une ligne noire tracée sur du papier blanc avec un marqueur. La mise en œuvre a nécessité trois capteurs et un comparateur sur la puce LM339N pour soulager le microcontrôleur. Un inconvénient important s'est avéré être le nécessaire préréglage capteurs avec résistances d'ajustement en fonction de l'éclairage de la pièce.

P.S. La récompense du temps perdu à créer un appareil inutile sera peut-être la clarté du fonctionnement et de la mémoire du microcontrôleur qui ramassera la poussière sur l'étagère jusqu'à ce que l'enfant de quelqu'un s'y intéresse.

J'ai décidé de passer en douceur aux modèles mobiles dynamiques. Il s'agit d'un projet pour un petit robot fait maison contrôlé par IR, assemblé à partir de pièces simples et facilement disponibles. Il est basé sur deux microcontrôleurs. La transmission depuis la télécommande est assurée PIC12F675, et la partie réceptrice du contrôleur de moteur est implémentée sur PIC12F629.

Circuit robot sur un microcontrôleur

Tout s'est bien passé avec la partie numérique, le seul problème était dans "l'unité de propulsion" - de petites boîtes de vitesses, qui sont très problématiques à fabriquer à la maison, j'ai donc dû développer l'idée " vibrobugs"Les micromoteurs sont contrôlés par des commutateurs à transistors amplificateurs sur le BC337. Ils sont remplaçables par tout autre petit transistors npn avec un courant collecteur de 0,5 A.

Les dimensions se sont avérées très petites - sur la photo, il y a une comparaison avec une pièce de monnaie et également à proximité d'une boîte d'allumettes. Les yeux du robot sont constitués de LED ultra lumineuses, nichées dans un boîtier de petits condensateurs électrolytiques.

Discutez de l’article PETIT ROBOT MAISON

Choisir un microcontrôleur pour créer votre robot. Vous devez d’abord comprendre le concept de ce qu’est un microcontrôleur et à quoi sert-il ?

Microcontrôleur est un appareil informatique capable d'exécuter des programmes (c'est-à-dire une séquence d'instructions).

Il est souvent appelé le « cerveau » ou le « centre de contrôle » du robot. En règle générale, le microcontrôleur est responsable de tous les calculs, prises de décision et communications.

Afin de communiquer avec le monde extérieur, le microcontrôleur dispose d'une série de broches ou de broches pour détecter électriquement le signal. Ainsi, le signal peut être réglé au maximum (1/C) ou au minimum (0/off) à l'aide d'une instruction de programmation. Ces broches peuvent également être utilisées pour lire des signaux électriques. Ils proviennent de capteurs ou d'autres appareils et déterminent si les signaux sont élevés ou faibles.

La plupart des microcontrôleurs modernes peuvent également mesurer la tension des signaux analogiques. Ce sont des signaux qui peuvent avoir une gamme complète de valeurs au lieu de deux niveaux clairement définis. Cela se produit à l’aide d’un convertisseur analogique-numérique (ADC). En conséquence, le microcontrôleur peut attribuer une valeur numérique au signal sous la forme d'une tension analogique. Cette tension n'est ni haute ni basse et se situe généralement entre 0 et 10 volts.

Que peut faire un microcontrôleur ?

Bien que les microcontrôleurs puissent sembler assez limités à première vue, de nombreuses actions complexes peuvent être effectuées à l'aide de broches de signal haut et bas pour programmer un algorithme. Cependant, la création d'algorithmes très complexes, tels qu'un comportement intelligent ou des programmes très volumineux, peut tout simplement ne pas être possible pour un microcontrôleur en raison de ressources limitées et de limitations de vitesse.

Par exemple, vous pouvez programmer une séquence répétitive pour faire clignoter les lumières. Ainsi, le microcontrôleur augmente le signal, attend une seconde, le diminue, attend encore une seconde et recommence. La lumière est connectée à la broche de sortie du microcontrôleur et clignotera sans fin dans un programme cyclique.


De même, les microcontrôleurs peuvent être utilisés pour contrôler d’autres appareils électriques. Il s'agit principalement de variateurs (lorsqu'ils sont connectés à un contrôleur de moteur), de périphériques de stockage (tels que des cartes SD), d'interfaces WiFi ou Bluetooth, etc. Grâce à cette incroyable polyvalence, les microcontrôleurs peuvent être trouvés dans la vie de tous les jours.

Dans presque tous les appareils électroménagers ou appareil électronique Au moins un microcontrôleur est utilisé. Bien que plusieurs microcontrôleurs soient souvent utilisés. Par exemple, à la télévision, machines à laver, panneaux de commande, téléphones, montres, fours à micro-ondes et bien d’autres appareils.

Contrairement aux microprocesseurs (par exemple, une unité centrale de traitement dans ordinateurs personnels), le microcontrôleur ne nécessite pas de périphériques. Comme externe BÉLIER ou un périphérique de stockage externe pour le fonctionnement. Cela signifie que même si un microcontrôleur peut être moins puissant que ses homologues PC. Il est presque toujours beaucoup plus facile et moins coûteux de développer des circuits et des produits basés sur des microcontrôleurs, car très peu de composants matériels supplémentaires sont nécessaires.

Il est important de noter que le microcontrôleur ne peut produire que très peu de données. grand nombre l'énergie électrique à travers ses contacts de sortie. Cela signifie qu'il n'est pas possible de connecter un moteur électrique puissant, un solénoïde, un grand éclairage ou toute autre charge importante directement au microcontrôleur. Tenter de le faire pourrait endommager le contrôleur.

Quelles sont les fonctions plus spécialisées d’un microcontrôleur ?

Le matériel spécial intégré aux microcontrôleurs permet à ces dispositifs de faire plus que de simples E/S numériques, des calculs de base et une prise de décision. De nombreux microcontrôleurs prennent facilement en charge les protocoles de communication les plus populaires, tels que UART (RS232 ou autre), SPI et I2C. Cette fonctionnalité est incroyablement utile lors de la communication avec d'autres appareils tels que des ordinateurs, des capteurs ou d'autres microcontrôleurs.

Bien que ces protocoles puissent être implémentés manuellement, il est toujours préférable de disposer d'un matériel embarqué dédié qui s'occupe des détails. Cela permet au microcontrôleur de se concentrer sur d'autres tâches et de maintenir le programme propre.


Les convertisseurs analogique-numérique (CAN) sont utilisés pour convertir les signaux de tension analogiques en signaux numériques. Là, la quantité est proportionnelle à l'amplitude de la tension et ce nombre peut ensuite être utilisé dans le programme du microcontrôleur. Pour rendre la production d'énergie intermédiaire différente de haute et basse, certains microcontrôleurs ont la possibilité d'utiliser la modulation de largeur d'impulsion (PWM). Par exemple, cette méthode vous permet de modifier en douceur la luminosité de la LED.

Enfin, certains microcontrôleurs disposent d'un régulateur de tension intégré. C'est très pratique car cela permet au microcontrôleur de fonctionner avec une large plage de tension. Il n’est donc pas nécessaire de fournir les valeurs de tension requises. Cela facilite également la connexion divers capteurs et d'autres appareils sans alimentation régulée externe supplémentaire.

Analogique ou numérique ?

Les signaux d'entrée et de sortie à utiliser dépendent de la tâche et des conditions. Par exemple, si votre tâche consiste simplement à allumer ou éteindre quelque chose, il vous suffit alors que le signal sur la broche d'entrée du microcontrôleur soit numérique. L'état binaire du commutateur est 0 ou 1. Le niveau haut du signal peut être de 5 volts et le niveau bas de 0. Si vous devez mesurer, par exemple, la température, vous avez besoin d'un signal d'entrée analogique. Ensuite, l'ADC du microcontrôleur interprète la tension et la convertit en valeur numérique.


Comment programmer les microcontrôleurs ?

La programmation des microcontrôleurs est devenue plus facile grâce à l'utilisation d'environnements de développement intégrés (IDE) modernes dotés de bibliothèques complètes. Ils couvrent facilement toutes les tâches les plus courantes et disposent de nombreux exemples prêts à l'emploi code.

De nos jours, les microcontrôleurs peuvent être programmés dans une variété de langages de haut niveau. Ce sont des langages tels que C, C++, C#, Java, Python, Basic et autres. Bien sûr, vous pouvez toujours écrire un programme en langage assembleur. Bien que cela soit destiné aux utilisateurs plus avancés avec des exigences particulières (avec une pointe de masochisme). En ce sens, chacun devrait pouvoir trouver un langage de programmation qui correspond le mieux à ses goûts et à son expérience de programmation antérieure.

La programmation des microcontrôleurs devient encore plus facile à mesure que les fabricants créent des environnements de programmation graphiques. Ce sont des icônes qui contiennent plusieurs lignes de code. Les pictogrammes sont reliés les uns aux autres. En conséquence, un programme est créé, visuellement simple, mais contenant une grande quantité de code. Par exemple, une image pourrait représenter le contrôle du moteur. Il suffit à l'utilisateur de placer l'icône là où cela est nécessaire et d'indiquer le sens de rotation et la vitesse.


Les cartes microcontrôleurs développées sont très pratiques à utiliser. Et ils sont plus faciles à utiliser pendant longtemps. Ils fournissent également des interfaces d’alimentation et de programmation USB pratiques. Il est donc possible de se connecter à n’importe quel ordinateur moderne.

Pourquoi ne pas utiliser un ordinateur standard ?

Évidemment, un microcontrôleur est très similaire à un processeur informatique. Si tel est le cas, pourquoi ne pas simplement utiliser un ordinateur pour contrôler le robot ? Alors faut-il choisir un ordinateur de bureau ou un microcontrôleur ?


Essentiellement, dans les robots plus avancés, en particulier ceux qui impliquent des calculs et des algorithmes complexes, le microcontrôleur est souvent remplacé (ou complété) par un ordinateur standard. Installé sur votre ordinateur de bureau carte mère, processeur, RAM de l'appareil (par exemple, disque dur), carte vidéo (intégrée ou externe).

De plus il y a périphériques, comme un moniteur, un clavier, une souris, etc. Ces systèmes sont généralement plus chers, physiquement plus grands et consomment plus d'énergie. Les principales différences sont mises en évidence dans le tableau ci-dessous. De plus, ils ont souvent plus de fonctionnalités que nécessaire.

Comment choisir le bon microcontrôleur ?

Si vous étudiez la robotique, vous aurez besoin d'un microcontrôleur pour tout projet de robotique. Pour un débutant, choisir le bon microcontrôleur peut sembler une tâche ardue. Surtout compte tenu de la gamme spécifications techniques et domaines d'application. Il existe de nombreux microcontrôleurs différents disponibles sur le marché :

  • Arduino
  • De baseATOM
  • BasiqueX
  • Légo EV3
  • et bien d'autres

Pour choisir le bon microcontrôleur, posez-vous les questions suivantes :

Quel est le microcontrôleur le plus populaire pour mon application ?

Bien entendu, la création de robots et de projets électroniques en général n’est pas un concours de popularité. C'est très bien si le microcontrôleur bénéficie d'un grand soutien de la communauté. Et il est utilisé avec succès dans des situations similaires, voire identiques. En conséquence, cela peut grandement simplifier la phase de conception. Vous pourrez ainsi bénéficier de l’expérience d’autres utilisateurs, amateurs et professionnels.

Les membres des communautés de conception de robots partagent entre eux des résultats, des codes, des images, des vidéos et parlent en détail de leurs réussites, voire de leurs échecs. Tout cela est du matériel accessible et la possibilité de recevoir des conseils d'utilisateurs plus expérimentés. Cela peut donc s’avérer très précieux.

Votre robot a-t-il des exigences particulières ?

Le microcontrôleur doit être capable d'effectuer toutes les actions spéciales de votre robot pour que les fonctions s'exécutent correctement. Certaines fonctionnalités sont communes à tous les microcontrôleurs (par exemple, la présence d'entrées et de sorties numériques, la capacité d'effectuer des opérations mathématiques simples, de comparer des valeurs et de prendre des décisions).

D'autres contrôleurs peuvent nécessiter du matériel spécifique (par exemple, prise en charge de l'ADC, du PWM et du protocole de communication). Les exigences en matière de mémoire et de vitesse ainsi que le nombre de broches doivent également être pris en compte.

Quels composants sont disponibles pour un microcontrôleur particulier ?

Peut-être que votre robot a des exigences particulières ou nécessite un capteur ou un composant spécifique. Et c’est essentiel pour votre projet. Par conséquent, le choix d’un microcontrôleur compatible est bien entendu très important.

La plupart des capteurs et composants peuvent communiquer directement avec de nombreux microcontrôleurs. Bien que certains composants soient conçus pour interagir avec un microcontrôleur spécifique. Peut-être seront-ils uniques et incompatibles avec d'autres types de microcontrôleurs.

Que nous réserve l’avenir ?

Le prix des ordinateurs est en chute libre et les progrès technologiques les rendent plus petits et plus efficaces. En conséquence, les ordinateurs monocarte sont devenus une option intéressante pour les robots. Ils peuvent travailler avec plein système opérateur(Windows et Linux sont les plus courants).

De plus, les ordinateurs peuvent se connecter à appareils externes, tels que les périphériques USB, les écrans LCD, etc. Contrairement à leurs ancêtres, ces ordinateurs monocarte ont tendance à consommer beaucoup moins d'énergie.

Partie pratique

Afin de sélectionner un microcontrôleur, faisons une liste des critères dont nous avons besoin :

  • Le coût du microcontrôleur devrait être faible
  • Il doit être facile à utiliser et bien pris en charge
  • La disponibilité d’une documentation accessible est importante
  • Il doit être programmé dans un environnement graphique
  • Il doit être populaire et avoir une communauté d'utilisateurs active
  • Puisque notre robot utilisera deux moteurs et divers capteurs, le microcontrôleur aura besoin d'au moins deux ports pour contrôler les moteurs et plusieurs ports pour connecter les capteurs. Il devrait également être possible d’augmenter le nombre d’appareils connectés à l’avenir.

Répond à ces critères Module EV3 de l'ensemble Lego Mindstorms EV3.


Présentation de la brique EV3

Dans cet article nous parlerons des robots les plus intéressants, dont le principe de construction est d'utiliser des circuits analogiques simples. Nous examinerons leurs caractéristiques et leurs principes de base, et à la fin nous essaierons de créer un robot simple.
C'est facile même pour les radioamateurs débutants !

Il est encouragé d'utiliser le moins d'éléments électroniques possible lors de la création d'un robot, et vous pouvez même utiliser des déchets électroniques.

Le principe le plus important dans la conception d’un robot BEAM est d’imiter la nature des êtres vivants.
Le robot BEAM doit avoir des propriétés inhérentes aux êtres vivants. Bien sûr, nous ne parlons pas de signes tels que la respiration, la croissance, la reproduction, car le robot n'en a pas besoin. Mais la nourriture, le mouvement et le développement de ces robots sont le principal sens de la vie.

Le mouvement est un signe intégral (propriété) de toute créature vivante. C’est la chose la plus simple qui puisse être implémentée dans un robot BEAM. À mon avis, le mouvement peut être spontané ou délibéré (intentionnel). En ce qui concerne les robots intelligents, on peut dire que seuls des mouvements délibérés leur sont demandés. Par exemple, chez une personne, les muscles du visage peuvent bouger involontairement pour transmettre des expressions faciales (par exemple, en raison d'une émotion soudaine), mais pour un robot, tout mouvement inutile entraîne un gaspillage d'énergie.

C'est une tâche difficile mais intéressante à créer intelligence artificielle Robot BEAM, car selon la philosophie de la robotique BEAM, ils n'utilisent pas de microcontrôleurs ni de microprocesseurs, mais tout se fait sur des composants discrets analogiques. L'utilisation de microcontrôleurs n'est pas interdite, mais les instincts de base du robot doivent reposer sur l'utilisation de divers modèles comportementaux associés directement à des capteurs et des capteurs avec un niveau minimum de traitement du signal.

Nutrition

Dans la plupart des cas, la source d’alimentation est une batterie. Mais si vous souhaitez créer un robot auto-alimenté, vous devez utiliser l’énergie des rayonnements (par exemple la lumière du soleil). Un appareil qui convertit l'énergie solaire en énergie directe courant électrique appelée batterie solaire composée de photocellules semi-conductrices. Panneaux solaires fournir de petites quantités d’énergie électrique en temps réel, mais uniquement en présence du soleil. Afin de ne pas « mourir » en l’absence de soleil, il est conseillé d’utiliser des piles rechargeables pour stocker l’énergie accumulée en vue d’un « jour de pluie »… ou d’un jour nuageux.

Adaptation et comportement

Un robot basé sur des circuits analogiques est plus adapté à l'environnement qu'un robot numérique, dont l'efficacité prend fin lorsqu'il rencontre une situation non spécifiée dans le programme de son cerveau numérique. En d’autres termes, les robots numériques ne peuvent pas résoudre des problèmes dont les réponses ne sont pas incluses dans leur programme.

Le concept des robots BEAM, proposé par Mark Tilden, était que la réaction à facteurs externes devrait être fourni dans un premier temps par la machine elle-même, sans la participation d'un quelconque « cerveau », comme cela s'est produit dans la nature vivante, sur le chemin du protozoaire à l'homme. L’amélioration et la création de systèmes robotiques plus complexes devraient suivre le même chemin.

Espèces

Il y a différents types Les robots BEAM, conçus pour effectuer différentes tâches.
Audiotropes- réagir aux sons.
Phototropes- réagir à la lumière.
Radiotropes- répondre aux fréquences radio.
Thermotropes- réagir au rayonnement thermique.

Les phototropes sont les plus courants, car trouver la lumière est la tâche la plus évidente pour un robot fonctionnant à l'énergie solaire.

Structure modulaire

Personnellement, j'aime l'idée de créer un robot BEAM à partir de modules fonctionnels individuels, et en suivant le principe « du simple au complexe », il sera possible de développer le robot en ajoutant de plus en plus de nouveaux modules. Chaque module lui-même peut fonctionner séparément, c'est-à-dire aucun cerveau centralisé ne sera utilisé pour traiter les informations.

Châssis

Pour que le robot puisse se déplacer, il est nécessaire de lui construire un châssis.
Ça arrive différents types: sur chenilles, sur roues et même sur pattes...
Regardons-les de plus près.

1. Chenille.

La photo montre un châssis fini, ce qui n'est pas difficile à trouver en vente. Dans la plupart des cas, il est entraîné par une paire de motoréducteurs.
Avantages : tourne bien sans utiliser les mécanismes de direction ; a augmenté sa capacité de cross-country; Il est pratique d’y monter des tableaux électriques et des composants individuels.
Inconvénients : Ce châssis est difficile à assembler à la maison et coûte en moyenne 90 $.

2. Châssis sur roues.


Avantages : le type le plus simple dans la mesure où vous pouvez l'assembler vous-même chez vous (par exemple, à partir d'un jeu de construction pour enfants, etc.) ou utiliser une petite voiture.
Inconvénients : pour effectuer un virage, un mécanisme de direction rotatif est nécessaire, ce qui signifie qu'il faudra utiliser un moteur électrique supplémentaire, ce qui entraîne une augmentation du poids de la structure et une augmentation de la consommation électrique.

3. Robot sur pattes.


C'est le type le plus difficile.
Avantages : eux apparence plus proche des êtres vivants et les mouvements semblent plus impressionnants.
Inconvénients : un grand nombre de mécanismes sont utilisés, et très souvent un tel robot a besoin d'un système qui assure l'équilibre.

NOUS LE FAISONS NOUS-MÊMES !

Vous pouvez réaliser le châssis de votre robot comme indiqué dans la figure ci-dessous.

Vous pouvez utiliser une boîte comme base. Le plastique est meilleur car c'est un matériau léger. Dans la même boîte, il est pratique de placer l’alimentation : accumulateur, piles, etc.
Gardez à l’esprit que plus les roues sont grandes, plus le robot avancera lentement (et ne pourra pas bouger).

Deuxième option. Des pinces en plastique sont utilisées ici pour fixer les moteurs.

Les moteurs électriques peuvent être récupérés sur des équipements anciens : magnétophones, jouets, lecteurs de disques, etc.

J'avais trois types de moteurs à la maison :

Le choix s'est porté sur le moteur supérieur. Il a montré bonnes caractéristiques en termes de traction et de consommation de courant.

Nous aurons également besoin d’un compartiment à piles pour fournir de l’énergie. L'alimentation électrique peut être organisée séparément : pour les moteurs (puissance) et pour le circuit logique.

Ci-dessous se trouve circuit simple un robot qui suit la lumière d'une lampe de poche.

Schéma 1. « Entrer dans la lumière ».

Ce circuit utilise des photodiodes. Nous les sélectionnons en fonction de la plage de sensibilité, c'est-à-dire compte tenu de la lumière vers laquelle le robot ira. Par exemple, à la lumière d'une lampe de poche (portée visible) ou au faisceau d'une télécommande de téléviseur (portée infrarouge). Si vous éclairez la photocellule VD1, alors le moteur 1 tournera, et si vous éclairez la photocellule VD2, alors le moteur 2 tournera. En tenant compte de cela, nous organiserons les moteurs de sorte que lorsque VD1 est allumé, le moteur 1 fasse tourner le robot vers. la lumière.

Et si les moteurs sont inversés, le robot, au contraire, se détournera de la lumière.

Passons maintenant aux photocellules.
Des photodiodes, phototransistors, photorésistances, etc. sont utilisés comme éléments sensibles à la lumière. Il existe de nombreuses informations sur ces éléments sur Internet, je vais donc les décrire brièvement.

1. Photorésistance : Dans l'obscurité, c'est une résistance à haute résistance, et lorsqu'elle est éclairée par la lumière, sa résistance diminue proportionnellement à l'intensité lumineuse, montrant une relation linéaire. Généralement, ils ne perçoivent que la lumière visible.

2. Photodiode : un dispositif semi-conducteur, tout comme une diode ordinaire, possède une anode et une cathode.
Si vous utilisez une connexion directe, la photodiode éclairée générera une tension aux bornes.
A la remise sous tension, la résistance de la photodiode irradiée chute de la même manière que celle d'une photorésistance.
En fonction de la portée de la lumière, les photodiodes sont divisées en diodes IR et en diodes à lumière visible. Les diodes IR ne perçoivent que le rayonnement infrarouge, mais réagissent également bien aux lampes à incandescence et au Soleil.

3. Phototransistor : différent de transistor ordinaire en ce que la lumière est fournie à la zone de base, qui contrôle l'amplification du courant émetteur-collecteur.

Sans grand succès, une LED peut être utilisée comme élément photosensible. Il a trop peu de sensibilité et ne peut être amélioré qu'à l'aide d'un circuit supplémentaire.

Robot BEAM que j'ai réalisé

Dans mon robot j'ai utilisé diverses photodiodes d'origine inconnue. La vidéo montre que la sensibilité de l’un d’eux est plus grande.
L'une des photodiodes réagit au faisceau de la télécommande du téléviseur.
De plus, tout le « remplissage » est rempli de colle thermofusible.
J'espère que tu vas mieux et plus beau !

Liste des radioéléments

Désignation Taper Dénomination Quantité NoteBoutiqueMon bloc-notes
VT1, VT3 Transistor bipolaire

KT3102

2 KT315 Vers le bloc-notes
VT2, VT4 Transistor bipolaire

KT361B

2 KT816