Go Down

Topic: Motor como "servo" (Read 155 times) previous topic - next topic

almogu

Feb 11, 2019, 08:29 pm Last Edit: Feb 11, 2019, 08:47 pm by almogu
Hola buenas noches,
llevo dias dando vueltas, preguntando a gente y probando distintos programas pero no doy con ello.

quiero usar un actuador lineal a modo de Servo para un coche RC escala 1:4, tengo el ultimo programa que no va mal del todo pero no consigo que se quede en el centro del actuador, sino que va a un lado o al otro depende de la señal pwm que le meta a través de un receptor de RC.
consigo leer todo, pwm de entrada, potenciometro para saber donde se encuentra el servo, pero como he dicho no consigo que se quede en el centro.
La salida va conectado a un vesc el cual sabe que cero es izquierda y 255 derecha y 0 es parado por eso si potenciometro no esta a 120 tiene que girar a un lado u otro

adjunto código:

Code: [Select]
int pwmentrada;
int pwmsalida = 11;
int pot = A0;

void setup()
{
 Serial.begin(9600);
  pinMode(pwmsalida,OUTPUT);
  pinMode(pot, INPUT);
 
}
 
void loop() {

pwmentrada = pulseIn (A1, HIGH);
int pot= analogRead(A0) / 4; //leemos potenciometro y dividimos en 4

 Serial.print("PWM Entrada:");
 Serial.print(pwmentrada);
 Serial.print("Estado potenciometro:");
 Serial.println(pot);
 
  // pot girado a la izquierda  //entre 1490 y 1506         //girando a la derecha
if ((pot < 119 && pwmentrada >=1490 && pwmentrada <=1506) or (pwmentrada >=1506))

  digitalWrite (pwmsalida, 255);          //giro maximo derecha
 
          // pot girado a la derecha  //entre 1490 y 1506         //girando a la izquierda
   else if ((pot > 120 && pwmentrada >=1490 && pwmentrada <=1506) or (pwmentrada<=1490))
   
     digitalWrite(pwmsalida, 0);          //giro maximo izquierda
     
         else
             digitalWrite(pwmsalida, 127);//centro
       
  delay(100);
}


la pwm de entrada para que gire a la izquierda seria 1000 y para la derecha seria 2000, por tanto centro 1500.
en el potenciometro, centro 120.

a ver si alguien puede echarme un cable, y así tengo un cochecito para poder pasear al niño o darme un pasito XD

gracias de ante mano

P.d.: me fui por lo facil, pero me gustaria que la pwm de entrada regulara el giro como un servo y cuando no toques volviera pero me fui a lo facil.

almogu

solucionado era un...maldito paréntesis. os dejo el código
Code: [Select]
// Codigo creado por Almogu. Usar salida para controlar un actuador lineal o lo que sea necesario
//utilizando arduino y en este caso un VESC para mover el actuador lineal.
//version 1

int pwmentrada;
int pwmsalida = 9;
int pot = A0;

void setup()
{
Serial.begin(9600);
  pinMode(pwmsalida,OUTPUT);
  pinMode(pot, INPUT);
 
}
 
void loop() {

pwmentrada = pulseIn (12, HIGH);
int pot= analogRead(A0) / 4; //leemos potenciometro y dividimos en 4

Serial.print("PWM Entrada:");
Serial.print(pwmentrada);
Serial.print("Estado potenciometro:");
Serial.println(pot);
 
     //pot girado a la izquierda  //entre 1490 y 1506         //girando a la derecha
if ((pot < 119 && (pwmentrada >=1490 && pwmentrada <=1506)) or (pwmentrada >=1506))

  analogWrite (pwmsalida, 255);         //giro maximo derecha
 
          // pot girado a la derecha  //entre 1490 y 1506         //girando a la izquierda
  else if ((pot > 120 && (pwmentrada >=1490 && pwmentrada <=1506)) or (pwmentrada<=1490))
   
    analogWrite(pwmsalida, 0);          //giro maximo izquierda
     
        else
           analogWrite(pwmsalida, 127);//centro
       
  delay(100);
}

Go Up