Configurer ROBOTC

Parce que nous voulons contrôler les moteurs d’entraînement, nous devons configurer le ROBOTC afin qu’il sache quelle broche contrôle quel moteur. Commencez par créer un nouveau fichier. Une fois que nous l’avons, nous pouvons dire à ROBOTC que nous utilisons l’Arduino UNO en le sélectionnant dans Type de plateforme menu ci-dessous Robot. Nous pouvons maintenant indiquer à ROBOTC où les moteurs sont connectés. Pour ce faire, nous choisissons Moteurs languette.

Onglet Moteurs dans la fenêtre d’installation Moteurs et capteurs

DANS Moteur vous trouverez une liste de toutes les sorties du moteur. Vous remarquerez que tous les noms sont sous la forme de « servo_ » suivi d’un nombre ou « motor_ » suivi d’un nombre. Tous les objets servo et motor_ peuvent contrôler les servos, mais les objets motor_ peuvent contrôler des objets supplémentaires, tels que le programme de LED à intensité variable que nous avons fait précédemment. Les nombres à la fin de l’objet moteur se réfèrent à la broche qu’il utilise. Puisque nous avons des servos de périphérique connectés aux broches 10 et 11, nous voulons des éléments qui se terminent par « _10 » et « _11 », qui se trouvent être les deux premiers éléments de la liste. Pour faciliter la référence aux servos des appareils lors de la programmation, nous les nommerons. C’est une bonne pratique et vous devez vous y habituer. Parce que le moteur d’entraînement gauche est connecté à servo_11 nous nommerons servo_11 « leftServo ». Alors bien sûr, cela signifie que nous changeons le nom du bon moteur d’entraînement (servo_10) à « rightServo ». De cette façon, nous n’avons pas à penser à la broche à laquelle ils sont connectés, nous donnons uniquement des commandes en fonction de quel côté est le moteur. Nous devons maintenant dire à ROBOTC que nous avons des serveurs à rotation continue connectés à ces ports. pour ce faire, nous cliquons sur le menu déroulant dans les lignes pour le servo et sélectionnons Servo – suite. Rotation pour les deux moteurs.

Nous devons également informer ROBOTC que l’un des moteurs tourne. Puisque nous avons deux moteurs qui tournent dans des directions opposées, ils tourneront tous les deux dans le même sens si nous disons au robot d’avancer. S’ils tournent tous les deux dans la même direction, le robot tournera en raison de l’inclinaison du moteur.

Effet d’inclinaison du moteur.

On peut résoudre le problème en cochant la case « reverse » à la fin de la ligne servo_10 – RobotC compense l’inversion.

Les serveurs de périphériques sont configurés

Lorsque tout cela est configuré, nous pouvons envoyer en cliquant D’accord. Votre fichier source doit maintenant contenir les éléments suivants en haut.

#pragma config(CircuitBoardType, typeCktBoardUNO)
#pragma config(UART_Usage, UART0, uartSystemCommPort, baudRate200000, IOPins, dgtl1, dgtl0)
#pragma config(Motor,  servo_10,        rightServo,    tmotorServoContinuousRotation, openLoop, reversed, IOPins, dgtl10, None)
#pragma config(Motor,  motor_11,        leftServo,     tmotorServoContinuousRotation, openLoop, IOPins, dgtl11, None)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

Programmation du comportement

Pour le moment, nous voulons simplement que le robot avance pendant deux secondes, s’arrête une seconde, recule pendant deux secondes, puis s’arrête une autre seconde. Nous voulons que le robot fasse cela indéfiniment afin que nous puissions commencer par en définir un while(true) slinga je task main().

#pragma config(CircuitBoardType, typeCktBoardUNO)
#pragma config(UART_Usage, UART0, uartSystemCommPort, baudRate200000, IOPins, dgtl1, dgtl0)
#pragma config(Motor,  servo_10,        rightServo,    tmotorServoContinuousRotation, openLoop, reversed, IOPins, dgtl10, None)
#pragma config(Motor,  motor_11,        leftServo,     tmotorServoContinuousRotation, openLoop, IOPins, dgtl11, None)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main() 
{
  while(true) //repeat indefinitely
  {
 
  }
}

Vérifiez le servo

Pour contrôler un moteur, dans ce cas le servo d’entraînement gauche, vous utiliseriez

motor[leftServo] = power;

Obliger est un entier (-127 à 127). Lorsqu’elle est utilisée avec un moteur (servo à rotation continue), cette commande est utilisée pour régler la vitesse (-127 à +127), où les valeurs négatives sont inversées; avant positif et zéro est arrêté. Lorsqu’elle est utilisée avec un servo standard (module servo VEX), cette commande définit la position (-127 à +127) du servo. Zéro est la « position centrale » du servo et -127 à +127 est la plage du servo. Notez que votre servo peut ne pas être en mesure de parcourir toute la plage -127 à +127, alors essayez des valeurs plus petites pour éviter de casser votre servo.

Laissez les services aller de l’avant

Pour faire avancer le robot, il faut régler les deux servos de manière à ce qu’ils avancent à la même vitesse. Pour éviter que le robot ne s’éloigne de vous, nous maintiendrons le niveau de puissance plus bas, 50. Vous pouvez l’ajuster si vous voulez que votre robot aille plus vite ou plus lentement. Commençons par régler le moteur gauche à 50, puis nous pouvons régler le moteur droit à 50. Ajoutez deux secondes de retard et nous avons terminé la première partie du programme. Pour ce faire, nous utilisons le code

motor[leftServo] = 50;   //Set the left servo to go forward at power level 50
motor[rightServo] = 50;  //Set the right servo to go forward at power level 50
wait1Msec(2000);         //pause code execution for 2000ms (2 seconds)

Si nous devions mettre ce code dans la boucle, il continuerait simplement à avancer. C’est parce que le code continuerait simplement à serpenter sur le code « avancer » sans aucun code pour l’arrêter.

Laissez les servos s’arrêter

Comme nous devons arrêter le robot pendant une seconde, nous devons mettre les deux moteurs à 0 et avoir un deuxième délai après cela. Nous pouvons le faire simplement en changeant chaque « 50 » en « 0 » et « 2000 » en « 1000 », nous obtenons le code suivant et un extrait de code pour que le robot s’arrête pendant une seconde.

motor[leftServo] = 0;    //Stop the left motor
motor[rightServo] = 0;   //Stop the right motor
wait1Msec(1000);         //pause code execution for 1000ms (1 second)

Laisser le robot reculer

Nous avons maintenant des morceaux de code pour faire avancer le robot pendant deux secondes et du code pour que le robot s’arrête pendant une seconde. Cependant, nous avons encore besoin de code pour faire reculer le robot pendant deux secondes. Pour ce faire, nous pouvons utiliser le code pour avancer, mais au lieu de définir les moteurs sur une valeur positive pour avancer, nous les définissons sur une valeur négative (dans ce cas, nous utilisons -20) pour les rendre allez dans l’ordre inverse.

motor[leftServo] = -50;  //Set the left servo to go backwards at power level -50 
motor[rightServo] = -50; //Set the right servo to go backwards at power level -50 
wait1Msec(2000);         //pause code execution for 2000ms (2 seconds)

Pour tout mettre en place

Maintenant, nous avons des blocs de code pour faire avancer le robot pendant deux secondes, s’arrêter pendant une seconde et reculer pendant deux secondes. Mais nous devons encore rassembler les blocs pour avancer, arrêter, reculer, arrêter et répéter. Par conséquent, la prochaine chose à faire est de mettre le code de conduite ci-dessus dans les programmes suivants.

#pragma config(CircuitBoardType, typeCktBoardUNO)
#pragma config(UART_Usage, UART0, uartSystemCommPort, baudRate200000, IOPins, dgtl1, dgtl0)
#pragma config(Motor,  servo_10,        rightServo,    tmotorServoContinuousRotation, openLoop, reversed, IOPins, dgtl10, None)
#pragma config(Motor,  motor_11,        leftServo,     tmotorServoContinuousRotation, openLoop, IOPins, dgtl11, None)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main() 
{
  while(true) //repeat indefinitely
  {
    // code to drive forward for 2 seconds
 
 
    // code to stop the robot for 1 second
 
 
    // code to drive backwards for 2 seconds
 
 
    // code to stop the robot for 1 second
 
 
  }
}

Quand tout est réuni, vous vous retrouvez avec quelque chose de similaire.

#pragma config(CircuitBoardType, typeCktBoardUNO)
#pragma config(UART_Usage, UART0, uartSystemCommPort, baudRate200000, IOPins, dgtl1, dgtl0)
#pragma config(Motor,  servo_10,        rightServo,    tmotorServoContinuousRotation, openLoop, reversed, IOPins, dgtl10, None)
#pragma config(Motor,  motor_11,        leftServo,     tmotorServoContinuousRotation, openLoop, IOPins, dgtl11, None)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
task main() 
{
  while(true) //repeat indefinitely
  {
    // code to drive forward for 2 seconds
    motor[leftServo] = 50;   //Set the left servo to go forward at power level 50
    motor[rightServo] = 50;  //Set the right servo to go forward at power level 50
    wait1Msec(2000);         //pause code execution for 2000ms (2 seconds)
 
 
    // code to stop the robot for 1 second
    motor[leftServo] = 0;    //Stop the left servo
    motor[rightServo] = 0;   //Stop the right servo
    wait1Msec(1000);         //pause code execution for 1000ms (1 second)    
 
 
    // code to drive backwards for 2 seconds
    motor[leftServo] = -50;  //Set the left servo to go backwards at power level -50 
    motor[rightServo] =- 50; //Set the right servo to go backwards at power level -50 
    wait1Msec(2000);         //pause code execution for 2000ms (2 seconds)
 
 
    // code to stop the robot for 1 second
    motor[leftServo] = 0;    //Stop the left servo
    motor[rightServo] = 0;   //Stop the right servo
    wait1Msec(1000);         //pause code execution for 1000ms (1 second)
  }
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *