drawing robot
ROBOT PICCOLO CON DESPLAZAMIENTO POR CUADRANTES
VIDEO PICCOLO EN FUNCIONAMIENTO
/media/uploads/miguelmstein/whatsapp_video_2017-06-08_at_9.36.19_pm.mp4
MATERIALES
- Tarjeta nucleo STM32F446RE
- Servomotores X3
- Motores paso a paso X2
- Tarjeta controladora de motor paso a paso ULN2003APG X2
- Matriz 8X8 con controlador MAX7219
- Jumpers
- PCB
- Pulsadores
- LED's
PROCEDIMIENTO
Se conecto los servomotores y los motores paso a paso a la tarjeta PCB, ésta está previamente conectada a la tarjeta Nucleo. la fuente de alimentación es externa de 12V con regulador integrado a la PCB de 5V.
Advertencia: Para alimentar el circuito se utilizó un regulador LM7805 con salida máxima de corriente de 1AMP.
El código es autoria de los desarrolladores del proyecto tomando como referencia los proyectos anteriormente publicados de funcionamiento de una matriz 8X8 con SPI, movimiento de motores por comunicación serial y además del código de protocolo de comunicación serial y el funcionamiento de los servomotores extraidos del siguiente desarrollador. https://developer.mbed.org/users/fabeltranm/
Anotaciones y explicaciones en el código mismo
<</codigo>>
- include "mbed.h" /* DIN , NC, CLK SPI max72_spi(PB_5, NC, PB_3); DigitalOut load(PA_4); LOAD
- / PwmOut servo1(PB_0); Servos Y PwmOut servo2(PA_1); Servos X PwmOut servo3(PA_0); Servos Z
DigitalOut A(PA_10); paso a paso DigitalOut B(PB_4); DigitalOut C(PB_10); DigitalOut D(PA_8);
DigitalOut E(PA_9); paso a paso DigitalOut F(PC_7); DigitalOut G(PB_6); DigitalOut H(PA_7);
DigitalOut L1(PC_1); led 1 DigitalOut L2(PB_9); led 2
DigitalIn S1(PC_0); boton 1 DigitalIn S2(PB_8); boton 2
Serial command(USBTX, USBRX); /* define registros de matriz MAX7219
- define max7219_reg_noop 0x00
- define max7219_reg_digit0 0x01
- define max7219_reg_digit1 0x02
- define max7219_reg_digit2 0x03
- define max7219_reg_digit3 0x04
- define max7219_reg_digit4 0x05
- define max7219_reg_digit5 0x06
- define max7219_reg_digit6 0x07
- define max7219_reg_digit7 0x08
- define max7219_reg_decodeMode 0x09
- define max7219_reg_intensity 0x0a
- define max7219_reg_scanLimit 0x0b
- define max7219_reg_shutdown 0x0c
- define max7219_reg_displayTest 0x0f
- define LOW 0
- define HIGH 1
void maxSingle( int reg, int col) { maxSingle es la funcion facil para usar una sola matriz max7219 load = LOW; comienza max72_spi.write(reg); especifica registro max72_spi.write(col); coloca datos load = HIGH; acegura que los datos estan cargados(en el cambio en alto de LOAD/CS) } void setup () { iniciacion de la matriz MAX7219 configuracion SPI : 8 bits, modo 0 max72_spi.format(8, 0); frecuencia MAX7219(10 MHZ) maxSingle(max7219_reg_scanLimit, 0x07); maxSingle(max7219_reg_decodeMode, 0x00); usando una matriz led (sin digitos) maxSingle(max7219_reg_shutdown, 0x01); no para modo apagado maxSingle(max7219_reg_displayTest, 0x00); no test de display for (int e=1; e<=8; e++) { registros vacios, apaga todos los LEDs maxSingle(e,0); } maxSingle(max7219_reg_intensity, 0x03 & 0x0f);intensidad luminica. rango: 0x00 a 0x0f } void M() {
maxSingle(1,0); maxSingle(2,0); maxSingle(3,0); maxSingle(4,0); maxSingle(5,0); maxSingle(6,0); maxSingle(7,0); maxSingle(8,0);
}
- / void PASO(){ // paso hacia adelante /// for(int i=0; i<170; i++){ wait_us(950); A=1; B=0; C=0; D=0;
E=1; F=0; G=0; H=0;
wait_us(950); A=1; B=1; C=0; D=0;
E=1; F=1; G=0; H=0;
wait_us(950); A=0; B=1; C=0; D=0;
E=0; F=1; G=0; H=0;
wait_us(950); A=0; B=1; C=1; D=0;
E=0; F=1; G=1; H=0;
wait_us(950); A=0; B=0; C=1; D=0;
E=0; F=0; G=1; H=0;
wait_us(950); A=0; B=0; C=1; D=1;
E=0; F=0; G=1; H=1;
wait_us(950); A=0; B=0; C=0; D=1;
E=0; F=0; G=0; H=1;
wait_us(950); A=1; B=0; C=0; D=1;
E=1; F=0; G=0; H=1; } } void REV(){ // paso hacia atras /// for(int i=0; i<170; i++){ wait_us(950); A=1; B=0; C=0; D=1;
E=1; F=0; G=0; H=1;
wait_us(950); A=0; B=0; C=0; D=1;
E=0; F=0; G=0; H=1;
wait_us(950); A=0; B=0; C=1; D=1;
E=0; F=0; G=1; H=1;
wait_us(950); A=0; B=0; C=1; D=0;
E=0; F=0; G=1; H=0;
wait_us(950); A=0; B=1; C=1; D=0;
E=0; F=1; G=1; H=0;
wait_us(950); A=0; B=1; C=0; D=0;
E=0; F=1; G=0; H=0;
wait_us(950); A=1; B=1; C=0; D=0;
E=1; F=1; G=0; H=0;
wait_us(950); A=1; B=0; C=0; D=0;
E=1; F=0; G=0; H=0; } } void RAYA(){ /// funcion raya // wait(0.5); servo1.pulsewidth_us(1500); servo3.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(650); servo3.pulsewidth_us(650); wait(0.5); }
void e(){ /// letra e /// wait(0.5); servo1.pulsewidth_us(500); servo2.pulsewidth_us(500); wait(0.2); servo3.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(1500); wait(0.5); servo1.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(500); wait(0.5); servo3.pulsewidth_us(650); wait(0.5); servo1.pulsewidth_us(800); servo2.pulsewidth_us(1500); wait(0.5); servo3.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(800); wait(0.5); servo3.pulsewidth_us(1000); } void c(){ /// letra c /// wait(0.5); servo1.pulsewidth_us(500); servo2.pulsewidth_us(500); wait(0.2); servo3.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(1500); wait(0.5); servo1.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(500); wait(0.5); servo3.pulsewidth_us(600); } void i(){ /// letra i /// wait(0.5); servo1.pulsewidth_us(500); servo2.pulsewidth_us(500); wait(0.2); servo3.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(1000); wait(0.5); servo1.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(1500); wait(0.5); servo2.pulsewidth_us(600); wait(0.5); servo3.pulsewidth_us(600); } void o(){ /// letra o /// unsigned int m=600; for (int i=0; i<100;i++){ servo2.pulsewidth_us(m); servo1.pulsewidth_us(m); m=m+10; wait(0.05); } } void CEROS(){ //// lleva los servos a la posiscion de movimiento /// servo1.pulsewidth_us(1000); servo2.pulsewidth_us(1500); servo3.pulsewidth_us(600); } void ecci(){ // funcion palabra ECCI // e(); PASO(); c(); PASO(); c(); PASO(); i(); } void letra(){ /// funcion letras por comunicacion serial /// char opcion= command.getc(); switch(opcion){
case '1': e(); break; case '2': c(); break; case '3': i(); break; case '4': o(); break; case '5': PASO(); break; default: break; } } ///////////////////////////// int z=0; int w=0; int main() {
servo1.period_ms(20); servo2.period_ms(20); servo3.period_ms(20);
while(1) { z=S1; w=S2;
if (z==1){ /// si se oprime pulsador 1 // L1=1; ecci(); CEROS(); REV(); REV(); REV(); REV(); L1=0; } else if (w==1){ /// si se oprime pulsador 2 // o(); PASO(); }
else {
} z=0; w=0; } cierra while } cierra int
Diff: mbed.bld
- Revision:
- 0:360766f47128
diff -r 000000000000 -r 360766f47128 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Jun 08 16:48:52 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/86740a56073b \ No newline at end of file