découvrir un language de programmation
les connections électroniques
programme sur 4 sessions de 2h
interface de base de Arduino IDE *
== avant toute chose bien vérifier que la carte arduino est la bonne et que le port selectionné correspond dans le menu TOOLS
==
ouverture d'un exemple simple blink
File > Exemple > 01.basic > blink
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
faire un upload sur l' arduino ( CTRL + U )
Exercice faire varier le temps de clignotement , 2x plus rapide ? 2 fois plus on que off
Exercice créer une variable pour le temps de
delay
afin de pouvoir faire des modifications facilement
solution
int delayVal = 1000 ; // creation de la variable
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(delayVal); // utilisation de la variable
digitalWrite(LED_BUILTIN, LOW);
delay(delayVal); // utilisation de la variable
}
bonus
une led 2 fois plus off
que on
int delayVal = 1000 ; // creation de la variable
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(delayVal); // utilisation de la variable
digitalWrite(LED_BUILTIN, LOW);
delay(delayVal*2); // utilisation de la variable x 2
}
faire les branchements sur la carte arduino ==UNIQUEMENT avec une carte débranchée==
prendre un potentiometre
et faire les branchements :
le code
const int potPin = A0 ; // Creation de la variable pour le pin input du potentiometre sur le port analogique 0
int potVal = 0 ; // initialisation de la vairable pour recevoir la valeur lu sur le port A0
int ledPin = 13; // Creation de la variable pour le pin output pour une led (sur le port 13 en premier car protege par une resistance)
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
potVal = analogRead(potPin);
digitalWrite(ledPin, HIGH);
delay(potval);
digitalWrite(ledPin, LOW);
delay(potVal);
}
Details
const int potPin = A0 ;
integer
, nombre entierint potVal = 0 ;
integer
, nombre entier0
la valeur sera mise a jour par la suiteint ledPin = 13;
integer
, nombre entiervoid setup()
- partie du programme executé UNE SEUL FOIS
pinMode(ledPin, OUTPUT);
- déclaration de la Led en tant que OUTPUT
void loop()
- partie du programme qui sera repetée en boucle encore et encore
potVal = analogRead(potPin); // lecture de la valeur sur le port A0 de larduino et stockage de la valeur (0-1023) dans la variable prévue
digitalWrite(ledPin, HIGH); // mise sous tension de la led (on allume)
delay(potval); // faire une pause de la durée récuperée par le capteur (potentiometre)
digitalWrite(ledPin, LOW); // mise hors tension de la led (on eteint)
delay(potVal); // faire une pause de la durée récuperée par le capteur (potentiometre)
Bravo fin du jour 1!
au programme
map()
)ouverture d'un exemple
File > Exemples > 01.basics > fade
int led = 9; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 9:
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
exercice: faire en sorte que la lumière ne s’éteigne jamais malgré les variations
on - off
)le découpage pour la variation
le but est maintenant de faire un programme de type dimmer
check list
- un potentiometre sur le pin A0 de larduino
- une led sur un port pwm de l'arduino (pin avec ~
) et une résistance adaptée
le potentiometre pour faire varier la luminosité de la led
code
todo
déclaration des variables utiles
mise en place du setup pour les entrées / sorties
branchement
code
const int potPin = A0 ;
const int ledPin = 13;
int potVal = 0 ;
int pwmOutput = 0 ;
void setup (){
pinMode(ledPin, OUTPUT);
}
void loop (){
pwmOutput = analogRead(potPin);
pwmOutput = map (pwmOutput , 0,1023,0,255);
analogWrite(ledPin,pwmOutput);
delay(100);
}
Explication et théorie
map()
map()
; l'arduino ne peut pas faire de signal analogique à proprement parler, il ne peut que être HIGH
ou LOW
, 0 ou 1 , 0V ou 5v pas 2,5v ou 3v pour compenser cette impossibilité les micros contrôleurs peuvent faire du P.W.M en savoir plus >
c’est à dire allumer ou éteindre rapidement un pin de sortie à différentes fréquences pour que la tension moyenne de sortie corresponde à une valeur d'entre deux.~source Wikipedia~
Pour le micro contrôleur de l' arduino il y a 255 valeurs possibles (micro contrôleur 8bits [11111111
]).
le signal analogique de lecture lui en a 1024 [0,1023] la fonction map()
va nous permettre de faire le calcul et de remapper ces valeurs
0 -> 0
512 -> 127
1023 -> 255
c'est un produit en croix qui s'opère dans la fonction ce qui nous permet d'exploiter l’ensemble de la course de notre protentiometre.
~nb il sera utile de comprendre la fonction map dans le cadre de la construction du bras robotique pour notre servo moteur 0-1024
-> 0-180
~
Test du servo moteur
Ouvrir l'exemple pour le
file > exemples > librarie > sweep
une fois l'exemple ouvert vous devriez avoir ce code
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
Info
un servo est un moteur un peu spécial; nous pouvons lui demander un angle précis entre 0 et 180 deg (il ne tourne pas sur lui même mais se déplace sur un demi cercle , pour la plupart d’entre eux ) le servo utilise un potentiometre pour connaître sa position
maintenant contrôlons le servo nous même
file > exemples > librarie > knob
le code suivant est charge
```
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
```
#include <Servo.h>
Chargement de la librairie servo
une *librairie * est un dictionnaire de fonctions qui va nous permettre d'augmenter les fonctions d'arduino simplement (sans avoir à écrire bcp de codes la librairie va nous permettre de gérer pleins de choses facilement)
Servo myservo
déclaration d'un objet Servo
qui va nous permettre par la suite d’interagir avec ce servo via la variable myservo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
déclaration des variables utiles pour la suite de notre code
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
Dans le setup utilisation d’outil de la librairie pour associer le servo au port de sorti numéro 9
de l'arduino pour ainsi plus facilement y avoir acces par la suite
dans l' ide
arduino aller dans sketch > include Librairie > Servo
nous pouvons maintenant utiliser les fonctions de cette librairie pour faire fonctionner notre servomoteur
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15);
dans l’ordre
map()
pour transformer notre valeur d'entre de 0-1023
en une valeur pour le servo 0-180
nous avons maintenant un servo que nous pouvons contrôler facilement
GOAL :
il nous suffira maintenant de dupliquer et modifier ce code pour avoir un servo par axes sur notre bras robot
pour faire des plans il faut des mesures
avec laide de google et d'une recherche simple nous pouvons déjà trouver les infos
vérifier tout de même avec un instrument de mesure que les mesures correspondent à notre équipement
avec ceci nous pouvons faire les premiers dessins pour les découpes de placement de servos
dans inkscape et grâce aux outils cercle et rectangle créons le dessin suivant
en ajustant les mesures dans la barre supérieure de l'application
avec cela en tête continuez le dessin pour arriver a notre dessin / design pour une partie du bras et recommencer jusqu’à obtention de toutes les pièces
après ces 3 jours de workshop nous avons maintenant tous les éléments utiles à la création de notre bras
grâce au code vu en jour 2 nous savons déplacer un servo avec un potetiometre
il suffit donc de dupliquer le code et le répeter pour chaque servo de notre bras
voici le code pour 2 servos à vous de jouer pour les autres
#include <Servo.h>
Servo Servo01;
Servo Servo02;
int potpinServo01 = A0;
int val01;
int potpinServo02 = A1;
int val02;
void setup()
{
Servo01.attach(9);
Servo02.attach(10);
}
void loop()
{
val01 = analogRead(potpinServo01);
val02 = analogRead(potpinServo02);
val01 = map(val, 0, 1023, 0, 179);
val02 = map(val, 0, 1023, 0, 179);
Servo01.write(val01);
Servo02.write(val02);
delay(15);
}
faîtes maintenant le câblage de tous les servo selon ce schéma et code
puis assembler les différentes parties du bras robot
BIEN JOUER à bientôt