Imágenes
Códigos
Masaylo: código de introducción. Giro a izquierda
const int mIzq1=5; const int mIzq2=6; const int enIzq=3; const int mDer1=9; const int mDer2=10; const int enDer=11; void setup(){ //En realidad, da igual si llamamos a la función en setup() o en loop(), //dado que no se realizarán más cambios a lo largo de este programa. izquierda(); } void loop(){ //No hay código disponible de momento en esta función } void izquierda(){ //Desactivamos motor izquierdo digitalWrite(enIzq,LOW); //Activamos motor derecho digitalWrite(enDer,HIGH); //No es necesario, pero desactivamos también ambas patillas del motor izquierdo digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,LOW); //Activamos las patillas del motor derecho digitalWrite(mDer1,HIGH); digitalWrite(mDer2,LOW); } //Aún no llamamos a esta función en setup() void derecha (){ digitalWrite(enIzq,HIGH); digitalWrite(enDer,LOW); digitalWrite(mIzq1,HIGH); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,LOW); digitalWrite(mDer2,LOW); }
Masaylo: uso de la setencia switch. Cinco movimientos aleatorios
//Declaración de constantes const int mIzq1=5; const int mIzq2=6; const int enIzq=3; const int mDer1=9; const int mDer2=10; const int enDer=11; //Función adelante() void adelante (){ digitalWrite(enIzq,HIGH); digitalWrite(enDer,HIGH); digitalWrite(mIzq1,HIGH); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,HIGH); digitalWrite(mDer2,LOW); } //Función izquierda() void izquierda (){ digitalWrite(enIzq,LOW); digitalWrite(enDer,HIGH); digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,HIGH); digitalWrite(mDer2,LOW); } //Función derecha() void derecha (){ digitalWrite(enIzq,HIGH); digitalWrite(enDer,LOW); digitalWrite(mIzq1,HIGH); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,LOW); digitalWrite(mDer2,LOW); } //Función atras() void atras (){ digitalWrite(enIzq,HIGH); digitalWrite(enDer,HIGH); digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,HIGH); digitalWrite(mDer1,LOW); digitalWrite(mDer2,HIGH); } //Parada de MASAYLO void alto (){ digitalWrite(enIzq,LOW); digitalWrite(enDer,LOW); digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,LOW); digitalWrite(mDer2,LOW); } //La función principal esta vez está en setup() void setup() { //"Plantamos" la semilla que garantiza aleatoriedad randomSeed(analogRead(A0)); //Declaramos las patillas de control como salidas pinMode(enIzq,OUTPUT); pinMode(enDer,OUTPUT); pinMode(mIzq1,OUTPUT); pinMode(mIzq2,OUTPUT); pinMode(mDer1,OUTPUT); pinMode(mDer2,OUTPUT); for (int i=0;i<5;i++){ //Valor aleatorio entre 0 y 3 int valor=random(4); //Tiempo en milisegundos aleatorio entre 2000 y 5000 int tiempo=random(2000,5000); //Dependiendo de valor, sucederá un case u otro switch(valor){ case 0: adelante(); delay(tiempo); break; case 1: atras(); break; case 2: izquierda(); delay(tiempo); break; case 3: derecha(); delay(tiempo); break; } } alto(); } void loop() { //En esta ocasión no hay código para loop() }
Control de velocidad en Masaylo mediante PWM
//Declaración de constantes const int mIzq1=5; const int mIzq2=6; const int enIzq=3; const int mDer1=9; const int mDer2=10; const int enDer=11; //Función adelante() void adelante (int velocidad){ analogWrite(enIzq,velocidad); analogWrite(enDer,velocidad); digitalWrite(mIzq1,HIGH); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,HIGH); digitalWrite(mDer2,LOW); } //Función izquierda() void izquierda (int velocidad){ digitalWrite(enIzq,LOW); analogWrite(enDer,velocidad); digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,HIGH); digitalWrite(mDer2,LOW); } //Función derecha() void derecha (int velocidad){ analogWrite(enIzq,velocidad); digitalWrite(enDer,LOW); digitalWrite(mIzq1,HIGH); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,LOW); digitalWrite(mDer2,LOW); } //Función atras() void atras (int velocidad){ analogWrite(enIzq,velocidad); analogWrite(enDer,velocidad); digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,HIGH); digitalWrite(mDer1,LOW); digitalWrite(mDer2,HIGH); } //Parada de MASAYLO void alto (){ digitalWrite(enIzq,LOW); digitalWrite(enDer,LOW); digitalWrite(mIzq1,LOW); digitalWrite(mIzq2,LOW); digitalWrite(mDer1,LOW); digitalWrite(mDer2,LOW); } //La función principal esta vez está en setup() void setup() { //Declaramos las patillas de control como salidas pinMode(enIzq,OUTPUT); pinMode(enDer,OUTPUT); pinMode(mIzq1,OUTPUT); pinMode(mIzq2,OUTPUT); pinMode(mDer1,OUTPUT); pinMode(mDer2,OUTPUT); //Hacia adelante en tres velocidades, 3 segundos cada una adelante(167); delay(3000); adelante(200); delay(3000); adelante(255); delay(3000); //Hacia la izquierda en tres velocidades, 3 segundos cada una izquierda(167); delay(3000); izquierda(200); delay(3000); izquierda(255); delay(3000); //Hacia atras en tres velocidades, 3 segundos cada una atras(167); delay(3000); atras(200); delay(3000); atras(255); delay(3000); //Hacia la derecha en tres velocidades, 3 segundos cada una derecha(167); delay(3000); derecha(200); delay(3000); derecha(255); delay(3000); alto(); } void loop() { //En esta ocasión no hay código para loop() }
Moviendo mi primer servomotor
//Incluimos libreria #include <Servo.h> //Declaramos un servo Servo miMotor; void setup(){ //avisamos al código de que el servo está conectado al pin 6 miMotor.attach(6); } void loop(){ //Con la instruccion write indicamos la posición deseada, de 0 a 180 miMotor.write(90); }
Paso del servomotor por tres posiciones sincronizadas
#include <Servo.h> Servo miMotor; void setup(){ miMotor.attach(6); } void loop(){ miMotor.write(0); delay(1000); miMotor.write(90); delay(1000); miMotor.write(180); delay(1000); }
Control de la posición del servomotor mediante un potenciómetro
#include <Servo.h> Servo motor; int valorLeido,valorEscrito; void setup(){ Serial.begin(9600); motor.attach(6); } void loop(){ valorLeido=analogRead(A0); valorEscrito=map(valorLeido,0,1023,0,180); Serial.print("Valor leido: "); Serial.print(valorLeido); Serial.print("\t"); Serial.print("Valor Escrito: "); Serial.println(valorEscrito); motor.write(valorEscrito); delay(50); }
Motor paso a paso o stepper: control directo de su movimiento
#define azul 2 #define rosa 3 #define amarillo 4 #define naranja 5 #define nPasos 256 void setup() { // declaramos las patillas digitales como salidas pinMode(azul,OUTPUT); pinMode(rosa,OUTPUT); pinMode(amarillo,OUTPUT); pinMode(naranja,OUTPUT); //Bucle que provoca el giro de la rueda. Se puede experimentar con nPasos for (int i=0;i<nPasos;i++){ //Fase 1 digitalWrite(azul,HIGH); digitalWrite(rosa,LOW); digitalWrite(amarillo,LOW); digitalWrite(naranja,LOW); delay(10); //Fase 2 digitalWrite(rosa,HIGH); digitalWrite(azul,LOW); digitalWrite(amarillo,LOW); digitalWrite(naranja,LOW); delay(10); //Fase 3 digitalWrite(amarillo,HIGH); digitalWrite(rosa,LOW); digitalWrite(azul,LOW); digitalWrite(naranja,LOW); delay(10); //Fase 4 digitalWrite(naranja,HIGH); digitalWrite(rosa,LOW); digitalWrite(amarillo,LOW); digitalWrite(naranja,LOW); delay(10); //Fin de ciclo } } void loop() { //Sin código }
Control de un stepper mediante la librería Stepper
#include <Stepper.h> //Hay que saber cuantos pasos por vuelta exige nuestro modelo const int pasosporVuelta = 512; Stepper miMotor(pasosporVuelta, 6,8,7,9); void setup() { // Ponemos la velocidad a 20 (velocidades superiores pueden conducir a error) miMotor.setSpeed(60); //Movemos el motor el mismo número de pasos para dar 1 vuelta miMotor.step(512); } void loop() { //Sin código para loop() }
Control de dos stepper mediante la librería Stepper
#include <Stepper.h> //Hay que saber cuantos pasos por vuelta exige nuestro modelo const int pasosporVuelta = 512; Stepper motor1(pasosporVuelta, 2,4,3,5); Stepper motor2(pasosporVuelta, 6,8,7,9); void setup() { // Ponemos la velocidad a 60 (por ejemplo<9 motor1.setSpeed(20); motor2.setSpeed(20); //Movemos el motor el mismo número de pasos para dar 1 vuelta for (int i=0;i<512;i++){ motor1.step(1); motor2.step(1); } } void loop() { //Sin código para loop() }
Uso de la librería AccelStepper
//Incluimos la libreria #include <AccelStepper.h> //Declaramos los objetos AccelStepper AccelStepper motorDerecha(4,2,4,3,5); AccelStepper motorIzquierda(4,6,8,7,9); void setup(){ //Definimos los parámetros del motor de la derecha motorDerecha.setSpeed(0); motorDerecha.setMaxSpeed(100); motorDerecha.setAcceleration(10); //Definimos los parámetros del motor de la izquierda motorIzquierda.setSpeed(0); motorIzquierda.setMaxSpeed(100); motorIzquierda.setAcceleration(10); //Establecemos el destino en pasos de ambos motores motorDerecha.moveTo(512); motorIzquierda.moveTo(-512); } void loop(){ //Los motores girarán a cada repetición de loop hasta alcanzar su destino //Después de eso, seguirán parados a cada ejecución del bucle motorDerecha.run(); motorIzquierda.run(); }