Go Down

Topic: digital out serial (Read 3195 times) previous topic - next topic

V3-architech

Bonjours à tous,

Je suis débutant en arduino et j'espère trouver un petit coup de main ici.
Voici mon problème:
Je travail actuellement sur la projection vidéo sur objet en mouvement et pour cela j'utilise un logiciel de composition appelé Quartz Composer dans lequel je recrée mon objet 3D.
Ensuite je met mon objet reel sur un servo que je control avec un arduino.
Pour un premier test j'ai réussi a manipuler mon objet avec un potentiomètre et renvoyer les données de celui-ci via le port série et ainsi asservir mon objet virtuel dans QC.
Pour un second test je souhaiterais interpréter les données de sortie digitales aux lieu de celle de l'entrée analogique.
(en quelque sorte que ce soit le servo qui donne sa position et non le potar) 
Est ce possible?
ci-joint le sketch de mon premier test

Merci par avance

nulentout

À mon avis, pour lire la position actuelle d'un servomoteur standard il "suffit" de mesurer la durée de l'impulsion issue de l'électronique qui le pilote.

V3-architech

Tout d'abord merci

Ensuite étant débutant pourriez vous m'indiquer la marche à suivre?

Merci

B@tto

Pour comprendre étudie le pilotage d'un servo : http://jean-louis.pascal.perso.neuf.fr/mot/moteur.htm
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Artouste


...
Pour un premier test j'ai réussi a manipuler mon objet avec un potentiomètre et renvoyer les données de celui-ci via le port série et ainsi asservir mon objet virtuel dans QC.
Pour un second test je souhaiterais interpréter les données de sortie digitales aux lieu de celle de l'entrée analogique.
(en quelque sorte que ce soit le servo qui donne sa position et non le potar) 


bonjour
un servo basique est un asservissement en boucle ouverte
je ne comprend pas bien ton probleme/souhait
le programme test ne fait que transformer une valeur analogique issue d'un potentiometre lue entre 0 et 1023  en angle entre 0 et 180°
Code: [Select]
angle_servo=map(mesure_brute,0,1023,0,180);
// convertit la valeur mesurée comprise entre 0 et 1023 en un angle entre 0 et 180


si maintenant tu veux "refermer" la boucle , il faut reprendre l'info au plus pres du capteur de position = recuperer l'info directement sur le potentiometre de recopie su servo.

un pu plus d'explications ?  8)


V3-architech

merci,

alors j'ai peut être pas été super clair.
En fait dans mon premier projet j'ai bien réussi a récupérer les donner du potentiomètre maintenant je voudrais enlever ce potentiomètre et que le servo bouge en autonome mais je voudrais quand meme savoir si je peux récupérer ces données?
En tout cas encore merci de prendre le temps de réfléchir a mon probleme 

Artouste


merci,

alors j'ai peut être pas été super clair.
En fait dans mon premier projet j'ai bien réussi a récupérer les donner du potentiomètre maintenant je voudrais enlever ce potentiomètre et que le servo bouge en autonome mais je voudrais quand meme savoir si je peux récupérer ces données?
En tout cas encore merci de prendre le temps de réfléchir a mon probleme   

ok mais pour que ton servo bouge, il faut bien que cet ordre de bouger vienne de quelque part ?  quel sera  le dispositif que tu souhaite utiliser pour lui donner les ordres de mouvement  ?
l'arduino avec un programme "dédié" ?
autre ?

V3-architech

Dans un premier temps j'execute le sketch ci-joint qui execute une rotation de 180 dans un sens puis dans l'autre en boucle

Artouste


Dans un premier temps j'execute le sketch ci-joint qui execute une rotation de 180 dans un sens puis dans l'autre en boucle


ok
donc tu connais "à chaque instant/iteration "  l'angle que tu impose au servo par la variable pos
qu'est ce qui t'empeche d'envoyer cette valeur d'angle vers ton logiciel QC ?

Code: [Select]
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(30);                       // 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(30);                       // waits 15ms for the servo to reach the position
  }

V3-architech

justement dans mon premier test avec potentiomètre j'arrivais a récuperer les données de celui-ci avec "serial.print"
et j'ai bien compris que c'etait la valeur analogique d'entree que j'utilisait seulement la j'ai essayé plein de trucs et je trouve pas comment faire

Artouste


justement dans mon premier test avec potentiomètre j'arrivais a récuperer les données de celui-ci avec "serial.print"
et j'ai bien compris que c'etait la valeur analogique d'entree que j'utilisait seulement la j'ai essayé plein de trucs et je trouve pas comment faire

Normal = dans ton programme de test 2 , tu ne declare pas  d'utilisation de "serial"
bon , comme je suis de bonne humeur aujourd'hui  :smiley-mr-green:
essaye ça  (NB juste testé compil ok)
Code: [Select]
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.


#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
  Serial.begin(9600);
}


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'
    Serial.println(pos);
    delay(30);                       // 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'
    Serial.println(pos);
    delay(30);                       // waits 15ms for the servo to reach the position
 
}
}

V3-architech

Merci beaucoup je vais tester ca

Go Up