Dispositivo de entrenamiento de movilidad motorizados para niños pequeños (7 / 14 paso)

Paso 7: Electrónica: subir código

Añadir el siguiente código a la placa Arduino Uno. Puede encontrar instrucciones sobre cómo configurar su arduino aquí: https://www.arduino.cc/en/Guide/HomePage

comienzo del código

const int DIR_A = 2, pin de escudo A DIR //Motor

DIR_B = 4, pin de escudo B DIR //Motor

PWM_A = 3, pin de escudo A PWM //Motor

PWM_B = 5, pin de escudo A PWM //Motor

POT = A3, pin //Potentiometer

ADELANTE = 8, pin //Forward

REVERSO = 9, //Reverse pin

IZQUIERDA = 11, //Left pin

DERECHA = 10, pin //Right

CURRENT_A = A1, pin del Sensor A de //Current

CURRENT_B = A0; Pin actual Sensor B

int DIR, OLD_DIR; Controlador de entrada y entrada de historia

Boolean stop_all = false; Disminuir la velocidad a 0

Declarar variables

int MAX_SPEED = 230, MIN_SPEED = 60;

acc de flotador = 0;

Float LEFT_SPEED = 0;

Float RIGHT_SPEED = 0;

Float COMP_A = 0;

Float COMP_B = 0;

int LEFT_MOTOR_DIR = 0;

int RIGHT_MOTOR_DIR = 0;

doble TIME_TO_MAX_SPEED = 5000;

int retardo = 100;

void setup() {}

Definición de pines de entrada y salida

pinMode (DIR_A, salida);

pinMode (DIR_B, salida);

pinMode (PWM_A, salida);

pinMode (PWM_B, salida);

pinMode (derecha, INPUT_PULLUP);

pinMode (izquierda, INPUT_PULLUP);

pinMode (delantero, INPUT_PULLUP);

pinMode (reversa, INPUT_PULLUP);

pinMode (bote, entrada);

pinMode (CURRENT_A, entrada);

pinMode (CURRENT_B, entrada);

Inicializa el puerto serial para monitoreo si es necesario

Serial.Begin(9600);

DIR = (digitalRead(FORWARD) << 3)

+ (digitalRead(REVERSE) << 2)

+ (digitalRead(LEFT) << 1)

+ (digitalRead(RIGHT));

OLD_DIR = DIR;

Disminuir la frecuencia PWM para reducir el ruido del motor

setPwmFrequency(3,1);

setPwmFrequency(5,1);

}

void loop() {}

Lee la entrada del regulador

ADELANTE: B0111

REVERSO: B1011

IZQUIERDA: B1101

DERECHA: B1110

DIR = (digitalRead(FORWARD) << 3)

+ (digitalRead(REVERSE) << 2)

+ (digitalRead(LEFT) << 1)

+ (digitalRead(RIGHT));

LEE EL POTENCIÓMETRO Y MAPAS AL MÍNIMO Y VELOCIDAD MÁXIMA

int velocidad = map(analogRead(POT), 0, 1023, MIN_SPEED, MAX_SPEED);

LEE EL SENSOR DE CORRIENTE PARA EQUILIBRAR LA CARGA EN AMBOS MOTORES

I_A doble = (((double)analogRead(CURRENT_A)) * 5/1023.0) - 2,5) / 0,1;

I_B doble = (((double)analogRead(CURRENT_B)) * 5/1023.0) - 2,5) / 0,1;

SI NO PRESIONA NINGÚN BOTÓN, PARAR LOS MOTORES

Si (DIR == B1111) {}

stop_all = true;

}

Si (stop_all) {}

¿Left_speed = (LEFT_SPEED < = 0)? 0: LEFT_SPEED-(SPEED/TIME_TO_MAX_SPEED*DELAY*2);

¿Right_speed = (RIGHT_SPEED < = 0)? 0: RIGHT_SPEED-(SPEED/TIME_TO_MAX_SPEED*DELAY*2);

}

Si (LEFT_SPEED == 0 & & RIGHT_SPEED == 0 & & B1111) {}

stop_all = false;

OLD_DIR = DIR;

}

SI LOS MOTORES SON INACTIVOS, ESCUCHAR PARA LA ENTRADA DE CONTROLADOR

Si (stop_all == false) {}

Si (DIR! = OLD_DIR & & digitalRead(FORWARD)! = B0) {}

DIR = OLD_DIR;

}

{Switch(dir)}

B0111 del caso: //FORWARD

compensación de sensor actual

Si {} (abs(I_A-I_B) > 0.1)

Si (I_A > I_B) {}

COMP_A = (I_A-I_B) * VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

COMP_B = (I_A-I_B) *-VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

}

Else {}

COMP_A = (I_A-I_B) *-VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

COMP_B = (I_A-I_B) * VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

}

}

Else {}

COMP_A = 0;

COMP_B = 0;

}

calcular la aceleración

ACC = (velocidad-LEFT_SPEED) * 0.1;

¿ACC = (acc > = 6)? 6: acc;

¿ACC = (acc < = 1)? 1: acc;

Añadir aceleración y compensación a los motores izquierdos y derecho

LEFT_SPEED = LEFT_SPEED + acc + COMP_B;

RIGHT_SPEED = RIGHT_SPEED + acc + COMP_A;

¿Left_speed = (LEFT_SPEED > = velocidad)? VELOCIDAD: LEFT_SPEED;

¿Right_speed = (RIGHT_SPEED > = velocidad)? VELOCIDAD: RIGHT_SPEED;

Establecer direcciones de motor, 1, = -1 = marcha atrás

LEFT_MOTOR_DIR = 1;

RIGHT_MOTOR_DIR = 1;

rotura;

B0101 del caso: //steer a la izquierda cuando se mueve hacia adelante

LEFT_SPEED = LEFT_SPEED * 0,9;

RIGHT_SPEED = RIGHT_SPEED;

rotura;

caso B0110: //steer derecha cuando avanza

LEFT_SPEED = LEFT_SPEED;

RIGHT_SPEED = RIGHT_SPEED * 0,9;

rotura;

B1011 del caso: //REVERSE

compensación de sensor actual

Si {} (abs(I_A-I_B) > 0.1)

Si (I_A > I_B) {}

COMP_A = (I_A-I_B) * VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

COMP_B = (I_A-I_B) *-VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

}

Else {}

COMP_A = (I_A-I_B) *-VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

COMP_B = (I_A-I_B) * VELOCIDAD/TIME_TO_MAX_SPEED * RETRASO * 0.1;

}

}

Else {}

COMP_A = 0;

COMP_B = 0;

}

calcular la aceleración

ACC = (velocidad-LEFT_SPEED) * 0.1;

¿ACC = (acc > = 6)? 6: acc;

¿ACC = (acc < = 1)? 1: acc;

Añadir aceleración y compensación a los motores izquierdos y derecho

LEFT_SPEED = LEFT_SPEED + acc + COMP_B;

RIGHT_SPEED = RIGHT_SPEED + acc + COMP_A;

¿Left_speed = (LEFT_SPEED > = velocidad)? VELOCIDAD: LEFT_SPEED;

¿Right_speed = (RIGHT_SPEED > = velocidad)? VELOCIDAD: RIGHT_SPEED;

Establecer direcciones de motor, 1, = -1 = marcha atrás

LEFT_MOTOR_DIR = -1;

RIGHT_MOTOR_DIR = -1;

rotura;

B1101 del caso: //LEFT

calcular la aceleración

ACC = (velocidad-LEFT_SPEED) * 0.1;

¿ACC = (acc > = 15)? 8: acc;

¿ACC = (acc < = 1)? 1: acc;

Añadir aceleración y compensación a los motores izquierdos y derecho

LEFT_SPEED = LEFT_SPEED + acc;

RIGHT_SPEED = RIGHT_SPEED + acc;

¿Left_speed = (LEFT_SPEED > = velocidad)? VELOCIDAD: LEFT_SPEED;

¿Right_speed = (RIGHT_SPEED > = velocidad)? VELOCIDAD: RIGHT_SPEED;

Establecer direcciones de motor, 1, = -1 = marcha atrás

LEFT_MOTOR_DIR = -1;

RIGHT_MOTOR_DIR = 1;

rotura;

B1110 del caso: //RIGHT

calcular la aceleración

ACC = (velocidad-LEFT_SPEED) * 0.1;

¿ACC = (acc > = 15)? 8: acc;

¿ACC = (acc < = 1)? 1: acc;

Añadir aceleración y compensación a los motores izquierdos y derecho

LEFT_SPEED = LEFT_SPEED + acc;

RIGHT_SPEED = RIGHT_SPEED + acc;

¿Left_speed = (LEFT_SPEED > = velocidad)? VELOCIDAD: LEFT_SPEED;

¿Right_speed = (RIGHT_SPEED > = velocidad)? VELOCIDAD: RIGHT_SPEED;

Establecer direcciones de motor, 1, = -1 = marcha atrás

LEFT_MOTOR_DIR = 1;

RIGHT_MOTOR_DIR = -1;

rotura;

}

}

instrucciones motor ajustadas

Si (RIGHT_MOTOR_DIR > 0) {}

digitalWrite (DIR_A, LOW);

}

Else {}

digitalWrite (DIR_A, alto);

}

Si (LEFT_MOTOR_DIR > 0) {}

digitalWrite (DIR_B, bajo);

}

Else {}

digitalWrite (DIR_B, alto);

}

ajustar la velocidad del motor

¿Left_speed = LEFT_SPEED < = 0? 0: LEFT_SPEED;

¿Right_speed = RIGHT_SPEED < = 0? 0: RIGHT_SPEED;

analogWrite (PWM_A, RIGHT_SPEED);

analogWrite (PWM_B, LEFT_SPEED);

OLD_DIR = DIR;

Serial.Print(Speed);

Serial.Print("|");

Serial.Print("Left:");

Serial.Print(LEFT_SPEED);

Serial.Print("|");

Serial.Print("Right:");

Serial.println(RIGHT_SPEED);

Delay(Delay);

}

Ajusta la frecuencia del PWM

{} void setPwmFrequency (int pin, int divisor)

modo de octeto;

Si (pin == 5 || pin == 6 || pin == 9 || pin == 10) {}

{Switch(divisor)}

caso 1:

modo = 0 x 01;

rotura;

caso 8:

modo = 0 x 02;

rotura;

caso 64:

modo = 0 x 03;

rotura;

caso 256:

modo = 0 x 04;

rotura;

caso 1024:

modo = 0 x 05;

rotura;

por defecto:

retorno;

}

Si (pin == 5 || pin == 6) {}

TCCR0B = TCCR0B & 0b11111000 | modo de;

}

Else {}

TCCR1B = TCCR1B & 0b11111000 | modo de;

}

}

else if (pin == 3 || pin == 11) {}

{Switch(divisor)}

caso 1:

modo = 0 x 01;

rotura;

caso 8:

modo = 0 x 02;

rotura;

caso 32:

modo = 0 x 03;

rotura;

caso 64:

modo = 0 x 04;

rotura;

caso 128:

modo = 0 x 05;

rotura;

caso 256:

modo = 0 x 06;

rotura;

caso 1024:

modo = 0x7;

rotura;

por defecto:

retorno;

}

TCCR2B = TCCR2B & 0b11111000 | modo de;

}

}

final del código de

Artículos Relacionados

Espalda recta dispositivo de entrenamiento de lucha contra la postura. Evitar combates cae ahora!

Espalda recta dispositivo de entrenamiento de lucha contra la postura. Evitar combates cae ahora!

Ahora, el entrenador más duro del mundo acaba de conseguir más. Una postura vertical permite opciones de ataque máximo. Una postura inclinada puede aterrizar sobre su espalda para una buena pisada. Este coche ofrece cuatro niveles de formación recta
Dispositivo de retroalimentación háptica para invidentes [proyecto HALO]

Dispositivo de retroalimentación háptica para invidentes [proyecto HALO]

recientemente he visto un episodio de superhumanos de Stan Lee, que contó con un ciegohombre que utiliza una serie de clics, como un murciélago, de echo busque su entorno. Metienes que pensar en otras personas ciegas y su habilidad para navegar libre
Cómo hacer un protector de cama para niños pequeños

Cómo hacer un protector de cama para niños pequeños

nuestra situación:Mi hijo toma siestas durante el día con mi esposa, mientras que nuestra sobrina quien ve, duerme en su cuna.   Nuestro problema es que cuando duerme en nuestra cama para su siesta, tiene una tendencia a caer de la cama, a veces incl
Cuna en un Hack de cama para niños pequeños

Cuna en un Hack de cama para niños pequeños

Tengo un par de gemelos de tres años de edad y a menudo oigo decirme "tienes dos por el precio de uno" a la que siempre respondo "conseguí dos por el precio de dos". El hecho es todo costos doble así que para ahorrar dinero siempre que
Trineo de camas para niños pequeños

Trineo de camas para niños pequeños

En el otoño de 2005, al hacer mi MBA decidí no era lo suficientemente ocupado y planea comenzar un negocio de fabricación de camas para niños pequeños. Tenía una página web (Sleighbed.net pero usted tendrá que utilizar la máquina de Wayback para verl
Para requisitos particulares, pequeño juego escritorio - maximizar tu espacio.

Para requisitos particulares, pequeño juego escritorio - maximizar tu espacio.

Debido a limitaciones de espacio, sólo tengo espacio para un escritorio pequeño juego. El problema con la mayoría de escritorio pequeño es la cantidad de espacio disponible una vez que el monitor está en el lugar. Mayoría de los monitores tiene una g
Entrenamiento – consejos y trucos para orinal tren y su hijo en 1 semana

Entrenamiento – consejos y trucos para orinal tren y su hijo en 1 semana

recientemente ha que pedí a mi proceso de formación Potty y cómo pude conseguir Connor que potty entrenado en pocos días.Estaba extremadamente nervioso cuando empecé a ir al baño porque no tenía ni idea de qué esperar de la formación. Esperar a que é
Dispositivo de fuente de alimentación para las mujeres de cinta

Dispositivo de fuente de alimentación para las mujeres de cinta

dispositivo de la fuente de alimentación (Pee Standing Up) es un calmante de gran estrés para las mujeres, así como los padres de niñas.Éstos son algunos escenarios cuando viene bien:Camping: no tener que salir de su carpa a mear cuando hace fríoOrin
Dispositivos de entrenamiento de una taza de café de papel del perro

Dispositivos de entrenamiento de una taza de café de papel del perro

buscando más formas de usar una taza de café de papel (y relajarse en la escalinata frontal de la tienda) di cuenta que había un mercado de mascotas todo ahí fuera que necesitan de nuestros dispositivos.Dos de ellos aquí, detallaremos como detalles c
Temporizador tiempo lapso panorámica para GoPro o pequeña cámara dispositivo de aspersión

Temporizador tiempo lapso panorámica para GoPro o pequeña cámara dispositivo de aspersión

si te gusta la fotografía, lapso de tiempo, o las cámaras GoPro, entonces has visto un montón de hacks barridos basada en temporizador de huevo.  También flotando alrededor de las interwebs, pero no como un lugar destacado, son dispositivos similares
ArduCamSlider: un slider motorizado para cámara réflex digital

ArduCamSlider: un slider motorizado para cámara réflex digital

Clicca qui por la versione italianaCómo aquí ArduCamSlider, un resbalador de la cámara réflex digital, basado en arduino PCB y recuperar material. El motor paso a paso pequeños permite el movimiento de la cámara réflex digital por el binario y el IR
Dispositivo de aerosol nasal para niños pequeños

Dispositivo de aerosol nasal para niños pequeños

En este instructable quiero mostrarle cómo crear tu propio juguete de ayuda médica que esperemos que hagan más agradable (o al menos un poco menos traumático) a sus hijos tomar su aerosol nasal.Mi hijo recientemente comenzó a desarrollar una alergia
DIY Nerf Mega blaster para niños pequeños

DIY Nerf Mega blaster para niños pequeños

Se trata de una blaster de dart mega nerf simple, barato y hecho en casa que hice. He hecho unidades similares que dispara dardos de elite para mi de 2 años de edad, que ins't suficiente para cebar las regular nerf blasters. Éste está diseñado para d
Busy Board para niños pequeños

Busy Board para niños pequeños

Decidí hacer esta tarjeta para mi hijo. Él es muy activo y le gusta meterse en todo y cualquier cosa. Necesita estar ocupado todo el tiempo. Puesto que vivimos en un pequeño ~ 500 Sq ft casa, quería algo que podría usarse una y otra, además de ofrece