stepper knob

Un shield de pilotage pour 4 moteurs à courant continu ou 2 moteurs pas à pas, qui permet une alimentation sur 12V et qui n'utilise que 4 sorties Pwm (sur 6) et 2 entrées analogiques (sur 6) de l'Arduino

stepper knob

Message non lude Xav83 » Ven 12 Avr 2013 18:16

Bonjour,
Est ce qu'une bonne âme pourrais me dire comment adapter
le programme "motor knob" pour l'utilisation avec "rotoshield" ?

Code: Tout sélectionner
/*
 * MotorKnob
 *
 * A stepper motor follows the turns of a potentiometer
 * (or other sensor) on analog input 0.
 *
 * http://www.arduino.cc/en/Reference/Stepper
 * This example code is in the public domain.
 */

#include <Stepper.h>

// change this to the number of steps on your motor
#define STEPS 100

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);

// the previous reading from the analog input
int previous = 0;

void setup()
{
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(30);
}

void loop()
{
  // get the sensor value
  int val = analogRead(0);

  // move a number of steps equal to the change in the
  // sensor reading
  stepper.step(val - previous);

  // remember the previous value of the sensor
  previous = val;
}
/


Merci à bientôt
Xav83
 
Messages: 18
Inscription: Ven 2 Nov 2012 01:27

Re: stepper knob

Message non lude Xav83 » Ven 1 Nov 2013 00:33

Bonsoir à tous,
Je reposte sur ce topic, car j'ai plus ou moins le même soucis, que je n'ai pas réglé pour le "stepper knob" ....
Cette fois ci c'est sur le code suivant: (code Rotoshield)

Code: Tout sélectionner
#include <Wire.h>
#include <Snootor.h>

SnootorStep M;
int forward = 2;
int reverse = 3;

M.init(750,48,1,MOTOR_MODE_HALFSTEP);            

void setup() {
  pinMode(forward,INPUT);
  pinMode(reverse,INPUT);
    Serial.begin(9600);
}

void loop() {
  int Speed = analogRead(A0);
  int RPM = map(Speed, 0, 1023, 0, 100);
  int f = digitalRead(forward);
  int r = digitalRead(reverse);
  if(f == 1 && r == 0 && RPM > 1){
  M.step(1);
  M.setSpeed(RPM);
    delay(.01);
  }
  if(r == 1 && f== 0  && RPM > 1){
 M.step(-1);
M.setSpeed(RPM);
    delay(.01);
  }
  delay(5);
    Serial.println(RPM);
}


Messages d'erreur:
Code: Tout sélectionner
sketch_oct31b:4: error: 'SnootorStep' does not name a type
sketch_oct31b:8: error: expected constructor, destructor, or type conversion before '.' token
sketch_oct31b.cpp: In function 'void loop()':
sketch_oct31b:24: error: 'M' was not declared in this scope
sketch_oct31b:29: error: 'M' was not declared in this scope


le liens vers le code d'origine: http://jonandnine.blogspot.fr/search/label/Stepper%20motor%20control%20using%20Arduino%20and%20L293

je suis un peu désespéré, voir même beaucoup ^^.
Si quelqu'un peut m'aider ce serait sympa.

Je trouve pas mal d'exemples pour d'autres "Shield moteurs", mais impossible de les adapter a la "rotoshield".
J'en profite pour re-demander des "mises en oeuvres" comme pour les "starters kits".

HELP

Xavier
Xav83
 
Messages: 18
Inscription: Ven 2 Nov 2012 01:27

Re: stepper knob

Message non lude phil » Ven 1 Nov 2013 10:51

A première vue c'est un problème d'installation de la librairie snootor

Elle est dispo ici :
https://github.com/Snootlab/Snootor (bouton download zip) en bas a droite
Il faut l'installer dans le sketchbook comme d'ab... puis redémarrer l'IDE arduino.

Est ce que tu as les exemples rotoshield dans IDE arduino ? Si ce n'est pas le cas, ta librairie est mal installée.
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: stepper knob

Message non lude Xav83 » Ven 1 Nov 2013 18:56

Bonsoir,
la librairie est bien installée ...

Xavier
Xav83
 
Messages: 18
Inscription: Ven 2 Nov 2012 01:27

Re: stepper knob

Message non lude Xav83 » Sam 2 Nov 2013 11:32

j'ai fait quelques modifications et corrections mais j'ai encore des soucis.

le nouveau code :
Code: Tout sélectionner
#include <Wire.h>
#include <snootor.h>

SnootorStep M;
int forward = 2;
int reverse = 3;



void setup() {
  pinMode(forward,INPUT);
  pinMode(reverse,INPUT);
    Serial.begin(9600);
    M.init(750,48,1,MOTOR_MODE_HALFSTEP);
}

void loop() {
  int Speed = analogRead(A0);
  int RPM = map(Speed, 0, 1023, 0, 100);
  int f = digitalRead(forward);
  int r = digitalRead(reverse);
  if(f == 1 && r == 0 && RPM > 1){
  M.step(1);
  M.setSpeed(RPM);
    delay(.01);
  }
  if(r == 1 && f== 0  && RPM > 1){
 M.step(-1);
M.setSpeed(RPM);
    delay(.01);
  }
  delay(5);
    Serial.println(RPM);
}


Et les nouveaux messages d'erreur:
Code: Tout sélectionner
sketch_nov02a.ino: In function 'void loop()':
sketch_nov02a:23: error: 'class SnootorStep' has no member named 'step'
sketch_nov02a:24: error: 'class SnootorStep' has no member named 'setSpeed'
sketch_nov02a:28: error: 'class SnootorStep' has no member named 'step'
sketch_nov02a:29: error: 'class SnootorStep' has no member named 'setSpeed'


je ne vois pas l’équivalent de "step" et "setspeed" pour la rotoshield ...

j'ai oublié de préciser que je suis débutant mais vous l'aurais compris.

Par avance merci
Xavier
Xav83
 
Messages: 18
Inscription: Ven 2 Nov 2012 01:27

Re: stepper knob

Message non lude phil » Sam 2 Nov 2013 21:46

'
L'équivariant de step est la méthode forward pour un déplacement dans un sens et back dans l'autre sens

tu as aussi la methode goTo qui peut t’intéresser


J'ai regardé vite fait et j'ai pas vu d’équivalemment sur la méthode speed (à part de faire l'init en half, full step...) ou bien de mettre des delays entre chaque pas ...

Du coup le code suivant devait marcher :

Code: Tout sélectionner
    #include <Wire.h>
    #include <snootor.h>

    SnootorStep M;
    int forward = 2;
    int reverse = 3;



    void setup() {
      pinMode(forward,INPUT);
      pinMode(reverse,INPUT);
        Serial.begin(9600);
        M.init(750,48,1,MOTOR_MODE_HALFSTEP);
    }

    void loop() {
      int Speed = analogRead(A0);
      int RPM = map(Speed, 0, 1023, 0, 100);
      int f = digitalRead(forward);
      int r = digitalRead(reverse);
      if(f == 1 && r == 0 && RPM > 1){
      M.forward(1);
//      M.setSpeed(RPM);
        delay(.01);
      }
      if(r == 1 && f== 0  && RPM > 1){
     M.back(1);
//    M.setSpeed(RPM);
        delay(.01);
      }
      delay(5);
        Serial.println(RPM);
    }
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19


Retourner vers Rotoshield

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité