Documente Academic
Documente Profesional
Documente Cultură
Capteur ultrason:
-distance obstacle (cm)
Capteur contact:
-press (1), relch(0)
La brique EV3
Nom de la brique USB :
si connexion tablie
Etat connexion avec un priphrique
bluetooth
Charge de la batterie
1 Bouton Retour :
-Annuler
Spc. techniques : -Stopper un programme
-Eteindre la brique
- Processeur 300MHz
- Ecran 178x128 pixels
- Noyau Linux 2 Bouton Central :
- 16 Mo FLASH -Valider
- 64 Mo RAM -Allumer la brique
3 Bouton gauche,droite,
haut,bas :
-Naviguer dans les menus
La brique EV3
Code couleur (par dfaut) des leds :
Prise chargeur
de la batterie
Valeurs courantes
des codeurs,
ports A, B, C, D.
Valeurs courantes
des capteurs,
ports S1, S2, S3, S4.
Les moteurs
"$ J! = b
# Fonction de transfert :
$% = Ki
K
(s) =
U (Ls + R)(Js + b) + K 2
9V
9V
10% duty cycle
10% : Umoy=0.9V
OV
Q1
+ - - +
! 0 = Ri +U " U
# emf $ i = emf < 0
" # R
#$ Uemf = K > 0 $ = Ki<0
%
Lumire ambiante
LED inactive (en % dintensit lumineuse)
Capteur de contact:
- analogique Gyroscope, vitesse angulaire et angle 1 axe:
- ferme un interrupteur - angle par intgration de la vitesse
- 2 tats (drive au cours du temps !)
- vitesse maximale mesure: 440/s
2 =Relch
Limitations :
sourceFile1
(excutable)
librobotc.so
(bibliothque
dynamique robotC)
3. Tlchargement sourceFile1.c 1. Edition du source
(via usb)
2. Compilation
1 Liste des fonctions (avec glisser-dposer dans le source et aide contextuelle disponibles)
2 Editeur de source 3 Erreur compilation, dbogage
Configuration de RobotC
1. Menu Robot :
-la cible de compilation est le robot physique
-la plateforme est le Lego EV3
sans le natural language
Start/stop programme
Quitter le dbogage
Pause/Resume :
-pauser ou reprendre
lexcution normale
Step Into :
-dmarre et avancer en
mode une instruction par clic
Etat courant des variables locales
Note : pour afficher aussi les capteurs (menu Robot debugger windows -> sensors)
Start et dbogage
Affectation
Equivalant en C-ansi:
string a="allo!"; Char a[20]="allo!";
string b; Char b[20];
Concatenation
string c="tic-"; char c[20]="tic-";
c=a + "tac"; strcat(c,"tac");
/*c vaut "tic-tact"*/
Le type string
Test Equivalant en C-ansi:
string a="allo!"; Char a[20]="allo!";
string b; Char b[20];
if (a==b) if (!strcmp(a,b))
{/* a et b identique*/} {/*a et b idetique*/}
void display(string c)
{c="toto"; /*modifier c, modifie aussi la variable ma */
}
Le type string
Quelques fonctions :
strcat, strcmp, strlen strcpy sont dfinis pour les strings
string mesg;
int a=-1;
sprintf(mesg,"i: %d",a); mesg="i: -1";
Les fonctions math
Voir liste des fonctions disponibles.
On note cependant :
const float PI
une constante valant .
Exemple : float oneTurn =2*PI;
Structure de contrles
Identiques au C:
if (condition)
if (condition) else
for ( ; ; )
while(condition)
do while (condition);
source.c
task main()
{
int speed=30;
setMotorSpeed(motorB, speed);
}
Le multitche
On peut crer une tche infinie
(tant que lon nappuie pas sur le bouton darrt):
source.c
task main()
{
int speed=30;
setMotorSpeed(motorB, speed);
Moteurs B et C 30%
setMotorSpeed(motorC, 30);
de leur vitesse.
while (1);
task main()
{
int speed=30;
Joue un note 400Hz
while(1) pendant 20x10ms
{
playTone(400,20);
sleep(2000); Attente/stoppe lexcution
pendant 2000 ms
}
}
void stopAllTasks()
stoppe toutes les tches dont la tche principale
Stoppe le programme.
Le multitche
task beep(); /*prototype*/
les moteurs reoivent en boucle
une commande de vitesse pendant 3s,
task main()
{ startTask(beep); pendant que lautre tche met un bip
toutes les 2s.
while(time1(T1)<3000)
{ setMotorSpeed(MotorB,30);
setMotorSpeed(MotorB,30);
} Usage du CPU:
stopTask(beep);
} task main
task beep
setMotorSpeed
task beep() setMotorSpeed
{ while(1) playTone() setMotorSpeed
{ playTone(400,20); .
sleep(2000);
} }
2000 ms temps
Le multitche
Pas ncessaire de renvoyer la commande
task beep(); /*prototype*/ moteur sans rpit (et saturer le CPU):
la vitesse est maintenue tant
task main() quil ny a pas de nouvelle commande.
{ startTask(beep); un sleep() une bonne ide !
while(time1(T1)<3000)
{ setMotorSpeed(MotorB,30);
setMotorSpeed(MotorB,30); Ncessaire pour que
sleep(400); le programme se finisse
}
stopTask(beep);
} Usage du CPU:
2000 ms temps
Le multitche
Communication entre plusieurs tches :
task main()
{
int tab[2]={1,2};
int a;
a=somme(tab);
}
int somme(int*tab)
{ return tab[1]+tab[2] ;}
2.3 Linterface de programmation
16 lignes daffichage, n 0 15
128 pixels
un caractre : 6x8 pixels ( 16 lignes [015]
un Big caractre : 12x16 pixel daffichage)
Un Big caractre occupe 2 lignes
task main()
{
string msg="Bonjour!";
float f=1; Bonjour! - 1.000
displayBigTextLine(0, allo!
"%s - %f",msg, f);
displayCenteredTextLine(8,"allo!");
}
Lcran LCD
void eraseDisplay()
efface compltement lcran
clearTimer(timerID)
remet 0 le timer en argument
long time1(timerID)
-retourne le temps coul depuis le reset en millisecondes
Le temps
task main()
{
long temps;
clearTimer(T1);
sleep(1654);
sleep(1000);
temps=time1(T1);
3.Choisir le mode
de fonctionnement
Port de la brique EV3
(o est connect le capteur) 1.Choisir le type du capteur connect
ou no sensor
Les capteurs et moteurs : setup
Les modes de fonctionnement des capteurs :
ultrason : 1. distance en cm
2. distance inch
capteur de couleur:
1. reflected (lumire rflechie)
2. ambient (lumire ambiante)
3. color (mesure couleur)
Le modes raw donne des valeurs non normalises entre 0 et 100%.
Les capteurs et moteurs : setup
3. Si on veut inverser
le sens de rotation positif dun moteur
1.Choisir un nom/identifiant
Inutile: mettre None
2.Type du moteur
Source.c :
#pragma config(Sensor, S1, gyroscope, sensorEV3_Gyro, modeEV3Gyro_RateAndAngle)
#pragma config(Sensor, S2, color_sensor, sensorEV3_Color)
#pragma config(Sensor, S3, ultrason, sensorEV3_Ultrasonic)
#pragma config(Sensor, S4, touch1, sensorEV3_Touch)
PS: rien ninterdit dcrire ce code de prprocesseur sans passer par linterface graphique.
Les capteurs
float getUSDistance(tSensors capteur)
retourne la distance dans lunit correspondant au mode;
le capteur est soit le port S1,S2,S3,S4 ou le nom dalias
dfini dans le setup pour le capteur ultrason.
task main()
{
resetMotorEncoder(leftMotor);
setMotorSpeed(leftMotor,50);
setMotorSpeed(leftMotor,0);
}
Le moteur
if (getUSDistance(sonarSensor)<14)
{setMotorSpeed(leftMotor,0);
setMotorSpeed(rightMotor,0);
setMotorSpeed(leftMotor,50);
sleep(700);
}
}}
Evitement dobstacle avec robot tribot
(en mieux) task main()
{
while(1)
{ setMotorSpeed(leftMotor,50);
setMotorSpeed(rightMotor,50);
while (getUSDistance(sonarSensor)>14);
{setMotorSpeed(leftMotor,0);
setMotorSpeed(rightMotor,0);
moveMotorTarget(leftMotor,360,50);
waitUntilMotorStop(leftMotor);
}
}}
Iconographie
[techcamp] http://www.techcamp.com.au/?page_id=523
[Helix84] Vector remaked svg version by user:Helix84
[encoder]
http://www.electronicproducts.com/Electromechanical_Components/
Choosing_a_sensor_to_measure_rotation.aspx
[philo] http://www.philohome.com/nxtmotor/nxtmotor.htm
[electroiq] http://electroiq.com/blog/2010/11/introduction-to-mems-gyroscopes/
[escplanta] http://escplantagenet.org/informatique/robotique/ping1.html
[dcmotor] http://www.trainsjouets.webege.com/lesmoteurs/index.html
[dcmodel]
http://robotics.ee.uwa.edu.au/courses/embedded/tutorials/tutorials/tutorial_6/
Tutorial_6.htm
[hbridge] http://www.hassockshog.co.uk/motor_controller_description.htm
Artist Martz 90