Primera aproximación. Motor alimentado por Arduino

agosto 16th, 2022 Categories: Arduino

Con el tema del transistor PN2222A solucionado pude por fin empezar a programar, que es lo que buscaba desde el principio. Le puse una rueda al motor y analicé su voltaje (4.54V máximo con una resistencia de 1KOhm). Va muy lento, esto no mueve los 500g del kit de coche entero.

Seguí el esquema del proyecto 17 del pdf del Arduino starter kit de aliexpress que ya cité en la anterior iteración, pero esta vez cambiando el orden de la base, colector y emisor para adaptarse a mi transistor especial. Como más o menos funcionaba, le puse también otra rueda y otro circuito con otro transistor para moverla.

Con una sola rueda empezaba a moverse a partir de 1.5V, que equivalía al valor 100-110 por PWM, pero al poner dos ruedas necesitaba el doble de voltaje, así que probé con 200. Si movía las dos ruedas a la vez no tenía suficiente fuerza, así que creé este programa para alternar primero una rueda y luego otra. El funcionamiento exacto sería el siguiente: empieza la primera rueda a moverse desde el valor 120 hasta el máximo (254) tardando 5 segundos en este proceso, los siguientes 2 segundos continuará a máxima velocidad, luego se parará esta rueda y repetirá el proceso la siguiente rueda, repitiéndose el proceso completo cuando esta segunda rueda acabe.

//Global variables
const int motor1Pin = 3;
const int motor2Pin = 5;
const int maxSpeed = 254;

//Initial setup
void setup()
{
  //Initializing output
  pinMode(motor1Pin, OUTPUT);
  pinMode(motor2Pin, OUTPUT);
}

//Main loop
void loop()
{
  accelerate(motor1Pin, 120, maxSpeed, 5); //Accelerate the motor 1, from 120 to maxSpeed in 5 seconds
  delay(2000);
  analogWrite(motor1Pin, 0);
  
  accelerate(motor2Pin, 120, maxSpeed, 5); //Accelerate the motor 2, from 120 to maxSpeed in 5 seconds
  delay(2000);
  analogWrite(motor2Pin, 0);
}

//Accelerate the motor from currentSpeed to maxSpeed in n seconds
void accelerate(int motor, int fromSpeed, int toSpeed, int sec)
{
  int initialFromSpeed = fromSpeed;
  for (; fromSpeed <= toSpeed; fromSpeed++)
  {
      analogWrite(motor, fromSpeed);
      delay((sec * 1000)/(toSpeed - initialFromSpeed));
  }  
}

Bueno, funciona, sí, pero no, en la siguiente iteración alimentaré los motores por separado y el Arduino sólo variará las bases de los transistores.


Tags: ,
No comments yet.

Leave a Comment

Solve this *