Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Pantographe Robotisé

Pantographe Robotisé

De Wikidebrouillard.

 
(5 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
 +
{{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1>http://mediaspip.ptitdeb.infini.fr/IMG/flv/travail-encoded.flv|400|300</videoflash>}}
 +
 +
=='''Présentation de l'expérience'''==
=='''Présentation de l'expérience'''==
 +
Reproduction de mouvements
== '''Matériel''' ==
== '''Matériel''' ==
Ligne 6 : Ligne 10 :
* [[Image:Computer.jpg|50px]] Un [[ordinateur]]
* [[Image:Computer.jpg|50px]] Un [[ordinateur]]
* [[Image:Plaquecablage bb.jpg|50px]] Une [[plaque Labdec]]
* [[Image:Plaquecablage bb.jpg|50px]] Une [[plaque Labdec]]
-
* [[Image:Servo-moteur.jpg|50px]] 3 [[servomoteur]]s de modélisme
+
* [[Image:Servo-moteur.jpg|50px]] 2 [[servomoteur]]s de modélisme
* [[Image:Deux fils.jpg|50px]] Du [[fil électrique]]
* [[Image:Deux fils.jpg|50px]] Du [[fil électrique]]
* [[Image:Ciseau.jpg|50px]] Une [[paire de ciseaux]]
* [[Image:Ciseau.jpg|50px]] Une [[paire de ciseaux]]
Ligne 19 : Ligne 23 :
Mettre le code suivant dans l'Arduino :
Mettre le code suivant dans l'Arduino :
 +
<pre>// code pour pentographe robotise a deux servo-moteur
 +
 +
 +
#include <Servo.h>
 +
#include <EEPROM.h>
 +
 +
#define CALIB_MAX 512
 +
#define CALIB_MIN 100
 +
#define SAMPLE_DELAY 25 // fréquence d'échantillonage
 +
 +
uint8_t recordButtonPin = 12;
 +
uint8_t playButtonPin = 7;
 +
uint8_t servoPin1 = 9;
 +
uint8_t servoPin2 = 10;
 +
uint8_t feedbackPin1 = A0;
 +
uint8_t feedbackPin2 = A1;
 +
uint8_t ledPin = 13;
 +
 +
Servo myServo1;
 +
Servo myServo2;
 +
 
 +
void setup() {
 +
  Serial.begin(9600);
 +
  pinMode(recordButtonPin, INPUT);
 +
  digitalWrite(recordButtonPin, HIGH);
 +
  pinMode(playButtonPin, INPUT);
 +
  digitalWrite(playButtonPin, HIGH);
 +
  pinMode(ledPin, OUTPUT);
 +
 
 +
  Serial.println("Servo RecordPlay");
 +
}
 +
 +
void loop() {
 +
if (! digitalRead(recordButtonPin)) {
 +
  delay(10);
 +
  // on attend que le bouton soit relaché
 +
  while (! digitalRead(recordButtonPin));
 +
  delay(20);
 +
  // le bouton est relaché
 +
  recordServo(servoPin1, servoPin2, feedbackPin1, feedbackPin2, recordButtonPin);
 +
}
 +
 +
  if (! digitalRead(playButtonPin)) {
 +
  delay(10);
 +
  // on attend que le bouton soit relaché
 +
  while (! digitalRead(playButtonPin));
 +
  delay(20);
 +
  // le bouton est relaché
 +
  playServo(servoPin1, servoPin2, playButtonPin);
 +
}
 +
}
 +
 +
void playServo(uint8_t servoPin1, uint8_t servoPin2, uint8_t buttonPin) {
 +
  uint16_t addr = 0;
 +
  Serial.println("Playing");
 +
 +
 +
  myServo1.attach(servoPin1);
 +
  myServo2.attach(servoPin2);
 +
  while (digitalRead(buttonPin)) {   
 +
    uint8_t x1 = EEPROM.read(addr);
 +
    addr++;
 +
    uint8_t x2 = EEPROM.read(addr);
 +
    addr++;
 +
    Serial.print("Read EE: servo1 = "); Serial.print(x1);
 +
    Serial.print("Read EE: servo2 = "); Serial.print(x2);
 +
    if (x1 == 255) break;
 +
    if (x2 == 255) break;
 +
    // map to 0-180 degrees
 +
    x1 = map(x1, 0, 254, 0, 180);
 +
    x2 = map(x2, 0, 254, 0, 180);
 +
    Serial.print(" -> "); Serial.println(x1);
 +
    Serial.print(" -> "); Serial.println(x2);
 +
    myServo1.write(x1);
 +
    myServo2.write(x2);
 +
    delay(SAMPLE_DELAY);
 +
    if (addr == 512) break;
 +
  }
 +
  Serial.println("Done");
 +
  myServo1.detach();
 +
  myServo2.detach();
 +
  delay(250); 
 +
}
 +
 +
void recordServo(uint8_t servoPin1, uint8_t servoPin2, uint8_t analogPin1, uint8_t analogPin2, uint8_t buttonPin) {
 +
  uint16_t addr = 0;
 +
 
 +
  Serial.println("Recording");
 +
  digitalWrite(ledPin, HIGH);
 +
  pinMode(analogPin1, INPUT);
 +
  pinMode(analogPin2, INPUT); 
 +
  while (digitalRead(buttonPin)) {
 +
    uint16_t a1 = analogRead(analogPin1);
 +
    uint16_t a2 = analogRead(analogPin2);
 +
    Serial.print("Read analog servo 1 : "); Serial.print(a1);
 +
    Serial.print("Read analog servo 2 : "); Serial.print(a2);
 +
    if (a1 < CALIB_MIN) a1 = CALIB_MIN;
 +
    if (a1 > CALIB_MAX) a1 = CALIB_MAX;
 +
    if (a2 < CALIB_MIN) a2 = CALIB_MIN;
 +
    if (a2 > CALIB_MAX) a2 = CALIB_MAX;
 +
    a1 = map(a1, CALIB_MIN, CALIB_MAX, 0, 254);
 +
    a2 = map(a2, CALIB_MIN, CALIB_MAX, 0, 254);
 +
    Serial.print(" -> "); Serial.println(a1);
 +
    Serial.print(" -> "); Serial.println(a2);
 +
    EEPROM.write(addr, a1);
 +
    addr++;
 +
    EEPROM.write(addr, a2);
 +
    addr++;
 +
    if (addr == 512) break;
 +
    delay(SAMPLE_DELAY);
 +
  }
 +
  if (addr != 512) EEPROM.write(addr, 255);
 +
 +
  digitalWrite(ledPin, LOW);
 +
 +
  Serial.println("Done");
 +
  delay(250);
 +
}
 +
</pre>
(pour plus de détail : [[Arduino]])
(pour plus de détail : [[Arduino]])
Ligne 26 : Ligne 149 :
Schéma général :
Schéma général :
 +
[[Fichier:pentographe_draft.jpg|400px]]
- Câblage des servomoteurs :
- Câblage des servomoteurs :

Version actuelle en date du 28 janvier 2014 à 14:38

Modèle:Vidéo


Sommaire

Présentation de l'expérience

Reproduction de mouvements

Matériel

L'expérience

La réalisation

  • Partie programmation

Mettre le code suivant dans l'Arduino :

// code pour pentographe robotise a deux servo-moteur


#include <Servo.h>
#include <EEPROM.h>

#define CALIB_MAX 512
#define CALIB_MIN 100
#define SAMPLE_DELAY 25 // fréquence d'échantillonage

uint8_t recordButtonPin = 12;
uint8_t playButtonPin = 7;
uint8_t servoPin1 = 9;
uint8_t servoPin2 = 10;
uint8_t feedbackPin1 = A0;
uint8_t feedbackPin2 = A1;
uint8_t ledPin = 13;

Servo myServo1;
Servo myServo2;
  
void setup() {
  Serial.begin(9600);
  pinMode(recordButtonPin, INPUT);
  digitalWrite(recordButtonPin, HIGH);
  pinMode(playButtonPin, INPUT);
  digitalWrite(playButtonPin, HIGH);
  pinMode(ledPin, OUTPUT);
  
  Serial.println("Servo RecordPlay");
}

void loop() {
 if (! digitalRead(recordButtonPin)) {
   delay(10);
   // on attend que le bouton soit relaché
   while (! digitalRead(recordButtonPin));
   delay(20);
   // le bouton est relaché
   recordServo(servoPin1, servoPin2, feedbackPin1, feedbackPin2, recordButtonPin);
 }
 
  if (! digitalRead(playButtonPin)) {
   delay(10);
   // on attend que le bouton soit relaché
   while (! digitalRead(playButtonPin));
   delay(20);
   // le bouton est relaché
   playServo(servoPin1, servoPin2, playButtonPin);
 }
}

void playServo(uint8_t servoPin1, uint8_t servoPin2, uint8_t buttonPin) {
  uint16_t addr = 0;
  Serial.println("Playing");


  myServo1.attach(servoPin1);
  myServo2.attach(servoPin2);
  while (digitalRead(buttonPin)) {    
    uint8_t x1 = EEPROM.read(addr);
    addr++;
    uint8_t x2 = EEPROM.read(addr);
    addr++;
    Serial.print("Read EE: servo1 = "); Serial.print(x1);
    Serial.print("Read EE: servo2 = "); Serial.print(x2);
    if (x1 == 255) break;
    if (x2 == 255) break;
    // map to 0-180 degrees
    x1 = map(x1, 0, 254, 0, 180);
    x2 = map(x2, 0, 254, 0, 180);
    Serial.print(" -> "); Serial.println(x1);
    Serial.print(" -> "); Serial.println(x2);
    myServo1.write(x1);
    myServo2.write(x2);
    delay(SAMPLE_DELAY);
    if (addr == 512) break;
  }
  Serial.println("Done");
  myServo1.detach();
  myServo2.detach();
  delay(250);  
}

void recordServo(uint8_t servoPin1, uint8_t servoPin2, uint8_t analogPin1, uint8_t analogPin2, uint8_t buttonPin) {
  uint16_t addr = 0;
  
  Serial.println("Recording");
  digitalWrite(ledPin, HIGH);
  pinMode(analogPin1, INPUT);
  pinMode(analogPin2, INPUT);  
  while (digitalRead(buttonPin)) {
     uint16_t a1 = analogRead(analogPin1);
     uint16_t a2 = analogRead(analogPin2);
     Serial.print("Read analog servo 1 : "); Serial.print(a1);
     Serial.print("Read analog servo 2 : "); Serial.print(a2);
     if (a1 < CALIB_MIN) a1 = CALIB_MIN;
     if (a1 > CALIB_MAX) a1 = CALIB_MAX;
     if (a2 < CALIB_MIN) a2 = CALIB_MIN;
     if (a2 > CALIB_MAX) a2 = CALIB_MAX;
     a1 = map(a1, CALIB_MIN, CALIB_MAX, 0, 254);
     a2 = map(a2, CALIB_MIN, CALIB_MAX, 0, 254);
     Serial.print(" -> "); Serial.println(a1);
     Serial.print(" -> "); Serial.println(a2);
     EEPROM.write(addr, a1);
     addr++;
     EEPROM.write(addr, a2);
     addr++;
     if (addr == 512) break;
     delay(SAMPLE_DELAY);
  }
  if (addr != 512) EEPROM.write(addr, 255);

  digitalWrite(ledPin, LOW);

  Serial.println("Done");
  delay(250);
}

(pour plus de détail : Arduino)


  • Partie électrique

Schéma général :

- Câblage des servomoteurs :

On utilisera les sorties 9, 10 et 11 de l'arduino. Brancher la borne orange ou blanche du servomoteur sur la sortie correspondante de l'arduino, la borne rouge du servomoteur sur le + et la noire ou marron sur le -.

  • Partie fabrication

- Fabriquer un socle pour le servomoteur qui fera tourner le bras sur lui-même.

On peut utiliser du carton et de la colle.

- Fixer le deuxième servomoteur sur la platine du premier.

- Fabriquer un bras qui sera fixé sur la platine du deuxième servomoteur.

On peut utiliser du carton rigide ou des pics à brochette, comme sur la vidéo.

- Fixer le troisième servomoteur sur ce bras.

- Fabriquer le dernier bras à fixer sur le dernier servomoteur.

La manipulation

/!\ Utiliser une alimentation extérieure pour l'arduino, l'alimentation par la prise USB de l'ordinateur n'étant pas suffisante.


Que voit-on ?

On obtient un bras robotisé qui enregistre d'abord les mouvements de l'utilisateur. Pour ensuite, les reproduirent automatiquement.

Explications

De manière simple

Applications : liens avec le quotidien

Robotique industrielle, exploration spatiale, opérations médicales.

Catégories

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraits
AR
CO

Pantographe Robotisé

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique