Proyecto MAX – Módulo de motorización

santinge2Proyecto MAX – Módulo de motorización

El equipo 1 de ingenieros ya ha entregado el primer prototipo de módulo de motorización.

El módulo entregado incluye funciones básicas de movimiento (avance, retroceso y giros a izquierda y derecha) y un control básico de tres led para indicar y acompañar al movimiento. En el módulo se ha contemplado también el esqueleto de programación sobre el que se encajará el resto de módulos software del proyecto.

Las primeras pruebas se han realizado sobre el prototipo “Bob” y han servido también para evaluar el sistema de alimentación. La alimentación en este caso la aporta una batería externa de móvil tipo “power bank”, conectada por cable USB a la placa Arduino.

A continuación añadimos los vídeos de las primeras pruebas y el código de programación.

Módulo de motorización. Elementos hardware (Puente H para controlar dos motores) y software (funciones de avance, retroceso y giros a izquierda y derecha; así como programa de test general)

Código de programa: MAX-2

// +----------------------------------------------------------+
// ! ** A R D U I N O ** !
// ! PROGRAMA : MAX - 2 !
// ! AUTOR : DAVID SANTAOLALLA !
// ! FECHA : 17-01-2017 !
// ! DESCRIPCION : !
// ! Control de robot con dos motores DC. !
// ! Modulo de motorizacion. !
// ! -Funciones avance, retroceso, izquierda y derecha. !
// ! -Modo test con ejecucion secuencial de funciones. !
// ! -Juego de LEDs para indicar el estado del robot. !
// ! !
// +----------------------------------------------------------+

// ————————————————————–
// ———————— WORKING STORAGE ———————
// ————————————————————–

// ——————- Constantes ———————-
const int pinENA = 6; // enable motor A – pin 1 bridge
const int pinIN1 = 7; // pata motor A – pin 7 bridge
const int pinIN2 = 8; // pata motor A – pin 2 bridge
const int pinIN3 = 9; // pata motor B – pin 15 bridge
const int pinIN4 = 10; // pata motor B – pin 10 bridge
const int pinENB = 11; // enable motor B – pin 9 bridge

const int Rojo = 3; // LED
const int Ambar = 4; // LED
const int Verde = 5; // LED
const int SysLED = 13; // LED

const int waitTime = 1000; //espera entre fases
const int ledTime = 100;

const int REPOSO = 0;
const int TEST = 1;
const int ACTIVO = 2;

// ——————- Variables globales ————–
int pinMotorA[3] = { pinENA, pinIN1, pinIN2 };
int pinMotorB[3] = { pinENB, pinIN3, pinIN4 };

int speed = 254; //velocidad de giro
int estado = REPOSO;
int testmode = 1;

// ————————————————————–
// ———————- INICIALIZACIONES ———————-
// ————————————————————–
void setup() {

// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// Declaracion de pines entrada

// Declaracion de pines de salida
pinMode(pinIN1, OUTPUT); // Motor A
pinMode(pinIN2, OUTPUT);
pinMode(pinENA, OUTPUT);

pinMode(pinIN3, OUTPUT); // Motor B
pinMode(pinIN4, OUTPUT);
pinMode(pinENB, OUTPUT);

pinMode(Rojo, OUTPUT); // LED
pinMode(Ambar, OUTPUT); // LED
pinMode(Verde, OUTPUT); // LED

digitalWrite(Verde, LOW);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, LOW);

}
// ————————————————————–
// ——————— PROGRAMA PRINCIPAL ———————
// ————————————————————–
void loop() {
// main code, to run repeatedly:

// — Leer mando infrarrojos –
// — Valores posibles *case*
// — Tecla x – estado = REPOSO
// — Tecla y – estado = TEST
// — Tecla z – estado = ACTIVO

// switch (estado) {
// case TEST:
// testloop();
// break;
// case ACTIVO:
// controlMando();
// break;
// case REPOSO:
// Parada();
// break;
if (testmode) {
testloop();

delay(60000); // ******* eliminar con el uso de estados *************

}
else {
// — Leer mando infrarrojos –
// — Valores posibles *case*
// — Flecha arriba – Avance()
// — Flecha abajo – Retroceso()
// — Flecha derecha – Derecha()
// — Flecha izquierda – Izquierda()
// — Resto – Parada()

}
}

// ————————————————————–
// ———————— RUTINAS —————————–
// ————————————————————–

// ————– FEEDBACK INICIO —————-

void inicio()
{
Izquierda();
delay(waitTime);

Parada();
delay(waitTime);

Derecha();
delay(waitTime);

Parada();
juegoLEDS();

}

// ————– JUEGO DE LEDS —————-

void juegoLEDS()
{
digitalWrite(Verde, LOW);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, LOW);

for (int i=0; i <= 5; i++){
digitalWrite(Verde, HIGH);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, LOW);
delay(ledTime);
digitalWrite(Verde, LOW);
digitalWrite(Ambar, HIGH);
digitalWrite(Rojo, LOW);
delay(ledTime);
digitalWrite(Verde, LOW);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, HIGH);
delay(ledTime);
}
for (int i=0; i <= 5; i++){
digitalWrite(Verde, HIGH);
digitalWrite(Ambar, HIGH);
digitalWrite(Rojo, HIGH);
delay(ledTime);
digitalWrite(Verde, LOW);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, LOW);
delay(ledTime);
}
}

// ————– TEST LOOP —————-

void testloop()
{
juegoLEDS();

Avance();
delay(waitTime);

Parada();
juegoLEDS();
delay(waitTime/2);

Retroceso();
delay(waitTime);

Parada();
juegoLEDS();
delay(waitTime/2);

Izquierda();
delay(waitTime);

Parada();
juegoLEDS();
delay(waitTime/2);

Derecha();
delay(waitTime);

Parada();
juegoLEDS();
delay(waitTime/2);
}

// ————————————————————–
// – RUTINAS DE MOVIMIENTO Y GIRO
// ————————————————————–

void Avance()
{
mForw(pinMotorA);
mForw(pinMotorB);

digitalWrite(Verde, HIGH);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, LOW);

Serial.print(“Avance: “);
Serial.println(speed);
}

void Retroceso()
{
mBack(pinMotorA);
mBack(pinMotorB);

digitalWrite(Verde, LOW);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, HIGH);

Serial.print(“Retroceso: “);
Serial.println(speed);
}
void Izquierda()
{
mForw(pinMotorA);
mBack(pinMotorB);

digitalWrite(Verde, LOW);
digitalWrite(Ambar, HIGH);
digitalWrite(Rojo, HIGH);

Serial.print(“Izquierda: “);
Serial.println(speed);
}

void Derecha()
{
mBack(pinMotorA);
mForw(pinMotorB);

digitalWrite(Verde, HIGH);
digitalWrite(Ambar, HIGH);
digitalWrite(Rojo, LOW);

Serial.print(“Derecha: “);
Serial.println(speed);
}

void Parada()
{
fStop(pinMotorA);
fStop(pinMotorB);

digitalWrite(Verde, LOW);
digitalWrite(Ambar, LOW);
digitalWrite(Rojo, LOW);

Serial.print(“Parada: “);
Serial.println(speed);
}

// ————————————————————–
// – RUTINAS BASICAS DE MOVIMIENTO
// ————————————————————–

void mForw(int pinMotor[3])
{
digitalWrite(pinMotor[1], HIGH);
digitalWrite(pinMotor[2], LOW);

analogWrite(pinMotor[0], speed);
}

void mBack(int pinMotor[3])
{
digitalWrite(pinMotor[1], LOW);
digitalWrite(pinMotor[2], HIGH);

analogWrite(pinMotor[0], speed);
}

void fStop(int pinMotor[3])
{
digitalWrite(pinMotor[1], LOW);
digitalWrite(pinMotor[2], LOW);

analogWrite(pinMotor[0], 0);
}

// ————————————————————–
// ————————— F I N —————————-
// ————————————————————–

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s