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
[ Wikidébrouillard ] Pantographe Robotisé

Pantographe Robotisé

De Wikidebrouillard.

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

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