Theo Jansen

Integrantes:
Ingrid Herrera
Luis Ortiz
Sebastian Rivera

Ingeniería mecatronica

Muestra theo Jansen

http://https://www.youtube.com/watch?v=CufN43By79s

https://www.youtube.com/watch?v=buep2Z6bsyY

https://www.youtube.com/watch?v=nrirsaIhzI4

Resumen
El mecanismo Theo Jansen consiste en un grupo de barras unidas de manera estratégica, de tal manera que el movimiento es similar a las patas de algunos animales. El diseño a realizar tendrá cuatro patas, un motor conectado a un interruptor y una batería el cual controlará y proporcionará el movimiento a todo el sistema para moverse correctamente. El movimiento permitirá desplazarse aproximadamente 500 m/h en línea recta

Palabras claves
Mecanismo, Theo Jansen, replicar patas animales, interruptor.

INTRODUCCION
EL mecanismo Theo Jansen simula el movimiento de la pata de un animal como se observa en la figura N° 1. Theo Jansen nació el 14 de marzo de 1948 en Scheveningen al sur de Holanda. Actualmente reside en Holanda, donde además, él ha trabajado durante los últimos 10 años. Centrándose, en el diseño y perfeccionando de las máquinas, las cuales han evolucionado con un algoritmo evolutivo; donde el criterio principal es el rendimiento de los elementos a la tarea encomendada. Haciendo de los errores de cada generación, la siguiente algo mejor. Este diseño proporcionará una forma sencilla de simular el andar de una pata real controlados por un solo elemento que podría ser un motor o el viento. Entre los mecanismo que ha creado Theo Jansen destacan: Geneticus, Rinoceronte, Sabulosa y Ventosa en las que el viento ha sido utilizado como motor.

research-7.jpg

DEFINICIÓN DEL PROBLEMA.
En el mercado de juguetería actual no se han evidenciado cambios en los tipos de juguetes o una gran innovación, por lo cual, se halla un mercado saturado de los mismos productos con diferentes nombres, marcas y aspectos; haciendo que el mercado de juguetes actualmente sea monótono y poco atractivo para las activas mentes de los niños.

JUSTIFICACIÓN.
Es un juguete didáctico, raro y poco común que hace que se interese más por la analogía mecánica, aportando también diferentes usos e hipótesis para futuros proyectos que también posean como base el mecanismo de Theo Jansen; aparte de implementar la tecnología en modelo digital para su fácil manejo y control, lo cual despierta la curiosidad de niños y adultos.

ESTADO DEL ARTE.

*Caballo-robot: Utilizando el mismo mecanismo de Theo Jansen, en Perú fue creado caballo –robot como un juguete didáctico, el cual es un juguete desarmable, pero el cual no posee control alguno e implementado en un material desechable y poco resistente, como lo es la cartulina,

*Criaturas de Theo Jansen: Theo Jansen fue la persona quien comenzó a crear este tipo de estructuras, sus diseños son lo que él denomina “criaturas” las cuales están diseñadas para sobrevivir en el ambiente de las playas, estas criaturas en su mayoría son hechos de tubos eléctricos y son impulsadas por el viento de la playa, lo cual permite que se muevan de forma casi que constante.

Mecanismo Theo Jansen UA: Fue un proyecto llevado a cabo en la universidad del atlántico, donde se realizó una maquina basada en los dispositivos de Theo Jansen, pero la cual era impulsada por la acción del cuerpo al pedalear; el vehículo hexápodo está diseñado para transportar a una sola persona, aunque posee un diseño bastante ingenioso, también tiene el inconveniente de que no puede dar dirección lo cual hace que su uso no sea algo viable.

LIMITACIONES

*Uno de los factores principales influye en el material aplicado para el mecanismo, debido a que la fuerza de fricción es algo con lo que nos topamos en todo momento.
*El equilibrio y relación de pesos es importante para la estabilidad y buen funcionamiento del mismo.
*Entre ensayo y error del dispositivo, se ha invertido en materiales mucho más de lo esperado.

MARCO TEÓRICO.

El LCD (Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo electrónico utilizado para la visualización e impresión de contenidos o información de una forma visual, mediante caracteres, símbolos o pequeñas figuras. La LCD de 16x2, posee 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían según el modelo.

lcd162b-ghb.jpg

http://www.engineersgarage.com/sites/default/files/Lcd_0.jpg

Existen tres formas de controlar los puertos. Como se describe a continuación:

El DDR Para obtener que el puerto seleccionado se comporte como entrada, como salida o ambos, es necesario indicarle esto en el DDR, este registro no activará ni desactivará ningún pin del microcontrolador, simplemente le indicará al puerto si está será entrada o salida. El PORT controla la salida del puerto, este se usa en caso de que el DDR haya sido seleccionado como salida, un 1 en el PORT indica un nivel alto en el puerto como salida, un 0 indica que el pin esta en nivel bajo. El PIN es un registro de lectura, este registro nos da un 1 si a un pin del microcontrolador se le está alimentando externamente, y un cero si esta en nivel bajo de voltaje. Los convertidores analógicos / digitales o (A/D) convierten una señal análoga a una señal digital, cambiando su tamaño y amplitud que varía constantemente en cierto rango discreto de niveles.

Interrupciones:
Es un aviso provocado por un módulo del microcontrolador, por un cambio en el estado de un pin o un recordatorio de que ha pasado un cierto tiempo. Este aviso interrumpe la tarea que se esté haciendo en ese momento y pasara a ejecutar una instrucción específica.

EL usap utilizado se observa a continuación con el datasheet

updating-firmware-on-usbasp-bought-from-ebay
https://mikrotechnica.files.wordpress.com/2012/01/idc.png

Puente H integrado
El puente H implementado es el L298N diseñado para aceptar niveles lógicos TTL estándar y unidad cargas inductivas tales como relés, solenoides, DC y motores paso a paso. Tiene dos entradas de habilitación (para habilitar o deshabilitar el dispositivo) independientemente de la entrada señales.

l298.jpg

*Ley de Grashof: La ley de Grashof afirma que para un mecanismo de 4 barras, la suma de las longitudes más corta y más larga de los eslabones, no puede ser mayor que la suma de las longitudes de los dos restantes sí se desea que exista una relación de rotación continua entre dos elementos, de tal forma como se ve en las imagen y está relacionado por la formula dada en la imagen , donde, "s" es el eslabón más pequeño, es el más largo, "p y q" son los eslabones intermedios; además de "q" ser un eslabón estático.

Diapositiva2.JPG
Diapositiva3.JPG

Velocidad Relativa.
Es un método utilizado para calcular la velocidad de un punto a partir de su velocidad relativa a otro punto de velocidad conocida. Se calcula como se ve en la ecuación _, donde Va es la velocidad del punto a con un punto referencial dado, Vb es la velocidad del punto b con respect al mismo punto de referencia de a, y Vab es la velocidad de a con respect a el punto b.

Va=Vb+Vab

Microcontrolador.

Un microcontrolador es un dispositivo integrado el cual está diseñado para el control de diferentes procesos basados en dispositivos electrónicos.
Los microprocesadores poseen una CPU (unidad central de procesamiento), la cual realiza las operaciones lógicas de forma interna; Memoria RAM, la cual almacena los datos en ejecución temporalmente para su procesamiento; memoria flash, donde se guarda de forma permanente los comandos y configuraciones a ejecutar y diferentes módulos los cuales efectúan las operaciones del microcontrolador.

Los microcontroladores pueden poseer diferentes características especiales, fuera del tamaño de memoria RAM y flash o velocidad de procesamiento, estas son denominadas módulos algunos de ellos son, los módulos ADC( Analogic to Digital Converter), USART(Universal Synchronous/Asynchronous Reciver/Transmiter), Puertos IO (puertos Input/Output), módulo de interrupciones, UART(Universal Asynchronous Reciver/Transmiter), entre otros; de la cantidad de módulos y de las características mínimas depende el precio del microcontrolador, la familia y la referencia según cada marca; por ende a la hora de comprar un micro se debe tener en cuenta de antemano que tipo de módulos y requerimientos se ha de necesitar.

Definición de alternativas.
*Se pensó en la construcción de un dispositivo de 4 piernas, el cual usaría un motor que moverá de forma asíncrona cada par de patas, las medidas de las patas se estableció para que su paso aproximado le permitirá andar a una velocidad promedio de 300m/h, ver diseño del mecanismo, y seria capas de avanzar en línea recta de forma autónoma; aunque una vez se plantea la opción del sistema de control para el dispositivo, se replantea con dos motores y un dispositivo de control remoto.
*Por segunda propuesta se plantea realizar un dispositivo Theo Jansen de 3 pares de patas, un hexápodo, para poder controlar de mejor manera su curvatura, este debería poseer un motor por cada pata para permitir configurar los tiempos de paso, además se busca que sea controlado de forma remota al igual que en el planteamiento anterior para permitirle cierta libertad de movimiento.
*La ultima alternarían planteada es el diseño de un octópodo, animal de 8 patas, como los cefalópodos, el cual tendría dos motores los cuales controlaran de forma síncrona una pata intermedio y para poder girar se limitara la velocidad de un par de patas, sean las derechas o las izquierdas, igualmente el sistema de control ha sido pensado para ser realizado a control remoto, y el tamaño sigue constante desde la primer alternativa,

Cada uno de las anteriores alternativas está ligada a la cantidad de motores usados, pero, las siguientes alternativas van referidas al diseño electrónico y de comunicación, por lo que van ligadas entre sí sin importar la cantidad de patas.

*Implementación de módulos Xbee, para la comunicación control-dispositivo, y microcontrolador atmega16, usando los módulos PWM presentes en el microcontrolador para la velocidad de un motor DC y un puente H para el control del sentido del giro.
*Implementación de un módulo xbee, para la comunicación control-dispositivo, y microcontrolador atmega16 para el control de ángulo de giro de un motor paso a paso.
*Implementación de módulo Zigbit, para la comunicación control-dispositivo, y microcontrolador atmega16 para el controlar el ángulo de giro de un motor paso a paso.
*Implementación de un módulo Zigbit para la comunicación control-dispositivo y un atmega16 para el control de velocidad de giro por medio de PWM y sentido de giro por medio de puente

Puente H para el control de motor DC.

*Con respecto a el control remoto se encuentran las alternativas, vale la aclaración de que el sistema de comunicación va ligado a las opciones anteriormente citadas, y que las siguientes especificaciones son para cuestiones estáticas y técnicas con respecto a la forma y diseño del control.
*Uso de un joystick resistivo para el control de velocidades por medio diferencial de señal análoga de las posiciones x/y.
*Implementación de un sistema de dos joystick para el control individual de las patas teniendo en cuenta la señal de la posición y en cada joystick.
*Uso de sistema de flechas para el control de las patas, siendo cada flecha independiente y obteniendo las velocidades de giros limitadas a la cantidad de botones.

Metodología.
Se trabajaron diferentes propuestas debido a que la funcionalidad de los motores y el número de “patas” del mecanismo, al no ser adecuados interferirían con el trabajo del mismo; problema aclarado con la investigación necesaria de momentos y velocidades relativas de cada uno de los puntos del mecanismo, junto con los micro controladores y las señales necesarias para su adecuado funcionamiento, lo cual facilito el análisis de componentes y su estudio en comportamiento con el mecanismo presentado.

Para este tipo de mecanismo surgieron diferentes tipos de materiales entre los cuales encontramos acrílico, acetal, acero, aluminio, entre otros; los cuales nos daban la suficiente resistencia a la intemperie y al desgaste, generando dudas sobre la facilidad de adquisición de los materiales y su costo en el mercado.

En comparación con lo investigado, se debe tener en cuenta el entorno del funcionamiento del dispositivo y la capacidad que tiene este para adaptarse, en cuanto a la programación, se debe acoplar el controlar adquirido para que siga el funcionamiento adecuado, lo cual varia según el micro-controlador adquirido y su diversidad de programarse en diferentes lenguajes.

Infiriendo sobre la investigación, se debe tomar en cuenta el peso del dispositivo, debido a que las velocidades son diferentes a lo investigado y el solo peso ya le agrega una exigencia mayor a los motores, los cuales actúan dependiendo del control que se les maneje.

Selección de alternativas.
Entre todas las alternativas planteadas, seleccionamos la que posee 8 patas con dos motores, ya que es mucho más sencillo de maquinar y hacer; en la parte mecánica nos favorece al momento del tamaño ocupado y la estabilidad es alta; incluyendo los dos motores para su respectiva movilidad en diferentes direcciones.

Con respecto a la el diseño de la comunicación y la programación se escogió el uso de los dispositivos zigbit-900-b, ya que su costo inferior, su entorno de desarrollo, capacidad y módulos ADC, UART,USART e IO hacen de ellos la opción más viable.

Con respecto al control remoto se escogió el usar el módulo Zigbit, dos joystick resistivos; los joystick permitirán el control de cada pata de forma independiente lo que permitirá que el dispositivo se mueva de múltiples formas dependiendo de la relación de velocidades dispuestas en las patas.

Por ultimo para el control de velocidad y dirección de movimiento se escogió usar dos módulos PWM conectados a un puente H, los cuales controlaran motores DC acoplados al punto establecido en las patas. El PWM del atmega16 será controlado por la información obtenida por el Zigbit atreves del módulo inalámbrico.
Requisitos de diseño.

Debido a que el diseño está pensado para moverse con cierta agilidad y por medio de un sistema de control remoto, es necesario que los motores tengan la suficiente potencia para cargar con la fuerza propia del movimiento de las patas, sumado con el consumo de energía propio de los dispositivos de control, nuestra primer preocupación a la hora del planteamiento electrónico es el consumo de energía, ya que cada motor implementado consume una cantidad considerable al igual que los dispositivos y mecanismos electrónicos.

El control del robot, presenta la problemática del control de la velocidad de los motores a usar, por lo que teniendo en cuenta el uso del micro, el cual solo envía pulsos o señales digitales, limita las opciones a usar a las siguientes dos posibilidades: motor paso a paso o motor dc controlado por medio de un pwm (Pulse Width Modulation), el cual nos permitirá usar el motor la cantidad de tiempo requerida por medio de pulsos suministrados.

La fricción, la fricción debida al continuo movimiento de las piezas rotatorias, puede generar fallos como desgasten calentamiento o deterioro del modelo, por lo tanto el material que se use debe poseer una superficie idónea para tal fricción o se deberá usar un mecanismo especial para la rotación el cual valla fijo y evite el desgaste.

El material usado para la estructura ha de ser liviano, resistente y poco costoso; ya que debe aguantar lo suficiente para su “ilimitado” uso.

Las medidas de las patas deben ser todas simétricas y prácticamente idénticas o, a escala, del modelo planteado por Jansen, a razón de que la movilidad está directamente sujeta a su construcción, medidas y ángulos.

Diseño
El mecanismo está formado por 7 barras, de los cuales 5 articulaciones y 2 áreas fijas, como se puede observar en la figura N° 2. El punta A puede estar unido a la circunferencia mediante una barra o también puede ir en alguna región del círculo lo que genera el movimiento de las extremidades hasta que el punto inferior G de la pata describa un movimiento similar al de la figura N° 3 variando según las medidas del diseño. Una de las ventajas es que tendrá menores problemas en superficies irregulares ya que es posible graduar la altura a levantar el mecanismo haciendo unas menores modificaciones; y al realizar cambios grandes en comparación con los modelos originales el mecanismo puede dejar de funcionar correctamente.
Este diseño tendrá como actuador un motor que proporcionará una velocidad angular en el punto O de la Figura N°2 ocasionando todo el movimiento de las cuatro piernas del mecanismo. El motor está conectado a un interruptor que estará conectado a una batería que será soportada por todo el mecanismo. Los eslabones de este mecanismo serán hechos en acrílico teniendo en cuenta que es un material muy liviano y resistente, el grosor de las piezas se piensa usar láminas de calibre 7 y 8.

beest.gif
Imagen1.jpg
tumblr_m2y9knsz7N1rsz0ajo1_500.gif

Para el proceso de construcción para cada pata se realizó el procedimiento observado en la figura N° 4. Para el diseño a utilizar se seleccionaron las medidas de la figura N° 5.

research-5.jpg

Por último el planteamiento del sistema de control está dado por los siguientes diagramas de flujo, en los cuales se encentra las operaciones que llevaran a cabo los microcontroladores.

Los diagramas de bloques de las figuras 6 y 7 nos permiten ver cómo interactúan los diferentes dispositivos electrónicos en el dispositivo y en el control respectivamente.

hqdefault.jpg
10951086_10204563399579660_2078952366_n.jpg

Figura N° 7. Representación diagrama del animal

En la siguiente figura se observa el diagrama para la programación con 5 intervalos para la velocidad que sera controlada con los joystick

11304466_818204388265457_847273465_n.jpg

La siguiente imagen representa la forma en que se cortaron las piezas, para que fuera lo mas optimo posible

Diapositiva1.JPG
11255467_10205540472863358_1239184167_o.jpg

El sistema cuenta con 2 circuitos uno para el control y otro para el Theo Jansen.

El circuito del control requiere 2 joystic con pulsador, el microcontrolador ATMEGA16a, 1 Xvee, 1 LCD 2x16, 1 LM7805 y un sistema de regulación de 3.3 Voltios

El circuito del Theo Jansen utiliza 2 motores DC, 1 Puente H integrado L298N, El uso de 2 Pwm del microcontrolador, 1 Xvee, 1 la bateria, 1 LM7805 y 1 LM7812

Para regular los 3.3 voltios se utiliza el siguiente circuito

post-12291-1230705782.jpg

En el siguiente video se observa el corecto funcionamiento del PWM siendo comprobado por un Led, e donde se ven los cambios de rango y ya no titilan

CONCLUSIONES
• El mecanismo Theo Jansen debe mantener ciertas relaciones para funcionar correctamente
• En este informe no se tuvo en cuenta la parte dinámica del movimiento del mecanismo por tanto no se halló el torque del motor.
• se mantenido la relación adecuada entre las medidas de los eslabones para tener un paso considerable.

REFERENCES
[1] Kai (2006, Nov. 3) Study of Jansen’s Beach Animals [Online]. Available: http://s88921297.onlinehome.us/Photography/blog/2006/11/06/jansens-beach-animals/
[2] M. Salazar, E. Idalgo, O. Villar, E. Guerrero (2011, Oct. 26). Diseño y ergonomia [Online]. Available: http://productouni.wikispaces.com/2.DISE%C3%91O+Y+ERGONOM%C3%8DA
[3] N. Khamashta (2009, Sept.) Estudio de una plataforma móvil para desplazarse sobre superficies irregulares. [Online]. Available: http://productouni.wikispaces.com/file/view/Theo%20Jansen.PDF/279871334/Theo%20Jansen.PDF
[4] Kai (2006, Nov. 7) Geometry and Mechanism. [Online]. Available: http://s88921297.onlinehome.us/Photography/blog/2006/11/07/geometry-and-mechanism-of-jansens-work/

Los datasheet de los microcontroladores y el xvee, se encuentra en los siguientes links

http://www.atmel.com/Images/8048S.pdf
http://www.atmel.com/Images/8048S.pdf

El código utilizado hasta el momento para el control es el siguiente :

#define F_CPU 1000000
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
 
    int va,cont1=0,cont2=0,in1=0,in2=0;
    /*
    Cuando se lleva a cabo la conversión el valor del registro alto del adc se lleva a la variable va
    */
    ISR(ADC_vect)
    {
        va=ADCH;
    }
    /*
    cuando se obtiene la interrupción0, compara:
                                                *si el numero de veces impar manda la variable in en 1.
                                                *si es par la resetea la variable in a 0.
    Para saber si es par o impar se usa el contador, lo que permite resetearlo cuando es 1 y volverlo 1 si es 0
    */
    ISR(INT0_vect)
    {
        cont1++;
        if(cont1==1)
        {
            in1=1;    
        }
        else
        {
            in1=0;
            cont1=0;
        }
 
    }
    /*
    cuando se obtiene la interrupción0, compara:
                                                *si el numero de veces impar manda la variable in en 1.
                                                *si es par la devuelve a 0.
    Para saber si es par o impar se usa el contador, lo que permite resetearlo cuando es 1 y volverlo 1 si es 0
    */
    ISR(INT1_vect)
    {
        cont2++;
        if(cont2==1)
        {
            in2=1;
        }
        else
        {
            in2=0;
            cont2=0;
        }
 
    }
 
int main (void)
{
    in1=1;//las conversiones inician bloqueadas
    in2=1;//las conversiones inician bloqueadas
    DDRC=0xFF;//PC como entradas, en fisico no serviria por el JTAG, pero es la función para proteus.
    DDRB=0xFF;//PB como salidas.
    sei();// Habilita interrupciones globales
    ADCSRA=(1<<ADIE)|(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);//Habilita la interrupción del ADC, Habilita ADC y prescalado a 8
    GICR|=(1<<INT1)|(1<<INT0);// habilita el pin de la interrupcion 0 y 1
    MCUCR|=(1<<ISC11)|(1<<ISC10)|(1<<ISC00)|(1<<ISC01);// configura las interrupciones para llevarse a cabo 
    //con una cresta ascendente tanto para int1 como para int0
    while(1)
    {  
 
        /*
        Si el contador de la interrupción es 0 entonces se ejecuta la conversión
        y se lleva a cabo la comparación para enviar el dato, este programa es el de prueba
        de funciones, por ende en vez del envió de datos se muestra el cambio en la salida enviando los dato
        a un puerto visible.
 
        cuando el contador cambia deja de llevarse a cabo la funcion, enviando siempre el mismo valor.
        */
        if(in1==0)
        {
            ADCSRA|=(1<<ADSC);
            ADMUX=0x60; //escoje el ADC chanel0 y AREF.
            while(ADCSRA & (1<<ADSC)); // espera a que se ejecute la conversion
 
            if (va<=0x24)
            {
                PORTC=0xf0;
            }else
            {
                if (va<=0x25 && va>=0x48)
                {
                    PORTC=0xff;
                }else
                {
                    if (va>=0x49 && va<=0x6c)
                    {
                        PORTC=0x0f;
                        }else{
                        if(va>=0x6d && va<=0x90)
                        {
                            PORTC=0xc1;
                        }
                        else
                        {
                            if (va>=0x91 && va<=0xb4)
                            {
                                PORTC=0x48;
                            }
                            else
                            {
                                if (va>=0xb5 && va<=0xd6)
                                {
                                    PORTC=0x30;
                                }
                                else
                                {
                                    PORTC=0x66;
                                }
                            }
                        }
                    }
                }
            }
        }
/*
Si el contador de la interrupción es 0 entonces se ejecuta la conversión
y se lleva a cabo la comparación para enviar el dato, este programa es el de prueba
de funciones, por ende en vez del envio de datos se muestra el cambio de salidas enviando los dato
a un puerto visible.
 
cuando el contador cambia deja de llevarse a cabo la función, enviando siempre el mismo valor.
*/
 
    if (in2==0)
    {
        ADMUX=0x61;//escoje el ADC chanel1 y AREF.
        ADCSRA|=(1<<ADSC);
        while(ADCSRA & (1<<ADSC)); // espera a que se ejecute la conversion
        if (va<=0x24)
        {
            PORTB=0xf0;
        }
        else
        {
            if (va<=0x25 && va>=0x48)
            {
                PORTB=0xff;
            }
            else
            {
                if (va>=0x49 && va<=0x6c)
                {
                    PORTB=0x0f;
                }
                else
                {
                    if(va>=0x6d && va<=0x90)
                    {
                        PORTB=0xc1;
                    }
                    else
                    {
                        if (va>=0x91 && va<=0xb4)
                        {
                            PORTB=0x48;
                        }
                        else
                        {
                            if (va>=0xb5 && va<=0xd6)
                            {
                                PORTB=0x30;
                            }
                            else
                            {
                                PORTB=0x66;
                            }
                        }
                    }
 
                }
            }
        }
    } 
 
    }
}

El código utilizado para el pwm es el siguiente:

#define F
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned int in1,in2,val,val1;
 
/*
    Si la interrupcion 0 sucede se lleva a cavo el contador para las posibles 4 opciones:
                    *el que sea la primera, entonces se envía el PWM de tamaño 1, no arranca el motor.
                    *el que sea la segunda. entonces se envía un pulso de un tercio del tiempo.
                    *que sea la tercera, entonces se envía un PWM de 2/3 del tiempo.
                    *que sea la cuarta, entonces se envía un PWM de la totalidad del tiempo.
    El valor es enviado a la variable que constantemente maneja la salida del PWM en oc1.
*/    
ISR(INT0_vect)
    {
        in1++;
        if(in1==1)
        {
            val=0x1;
        }
        if(in1==2)
        {
            val=0x13;
        }
        if(in1==3)
        {
            val=0x26;
        }
        if(in1==4)
        {
            val=0x39;
            in1=0;
        }
    }
 
/*
    Si la interrupcion 1 sucede se lleva a cabo el contador para las posibles 4 opciones:
                    *el que sea la primera, entonces se envía el PWM de tamaño 1, no arranca el motor.
                    *el que sea la segunda. entonces se envía un pulso de un tercio del tiempo.
                    *que sea la tercera, entonces se envía un PWM de 2/3 del tiempo.
                    *que sea la cuarta, entonces se envía un PWM de la totalidad del tiempo.
    El valor es enviado a la variable que constantemente maneja la salida del PWM en oc2.
*/    
ISR(INT1_vect)
    {
        in2++;
        if(in2==1)
        {
            val1=1;
        }
        if(in2==2)
        {
            val1=13;
        }
        if(in2==3)
        {
            val1=26;
        }
        if(in2==4)
        {
            val1=39;
            in2=0;
        }
    }
 
int main(void)
{
    TCCR0|=(1<<WGM00)|(1<<COM01)|(3<<CS00);//TIMER 0 CON MODO PWM FAST NO INVERTIDO,I/O CLOCK SIN PREESCALAR.
    TCCR2|=(1<<WGM00)|(1<<COM01)|(3<<CS00);//TIMER 2 CON MODO PWM FAST NO INVERTIDO, I/0 CLOCK SIN PREESCALAR.
    DDRB|=(1<<PINB4)|(1<<PINB0)|(1<<PINB1);//HABILITA LA SALIDAS DEL PB EN PWM(OC0), PIN 0 Y 1.
    DDRD|=(1<<PIND7)|(1<<PIND6)|(1<<PIND5);//HABILITA LA SALIDAS DEL PD EN PWM(OC2), PIN 0 Y 1.
    sei();
    GICR|=(1<<INT1)|(1<<INT0);// habilita el pin de la interrupcion 0 y 1
    MCUCR|=(1<<ISC11)|(1<<ISC10)|(1<<ISC00)|(1<<ISC01);// configura las interrupciones para llevarse a cabo    
    val=0x01;//valor inicial del la variable para que no ande el motor.
    val1=0x01;// valor inicial de la variable para que no ande el motor.
 
    /* 
    en el loop solo se enviara el valor a los PWM, el valor se sobre escribe según la interrupcion.
    En este documento el cual solo fue utilizado para comprender el uso del PWM, se controla de esta forma
    pero en la versión final se utilizara el control según la multiplexacion de la señal que llegue del control.
 
    De tal forma que en la señal se determinara la velocidad del giro, conservando las 4 posibilidades de ese test,
    y la inversión del giro, que sera usado por dos puertos I/O controlando un puente H para cada motor.
    */
    while(1)
    {
        OCR0=val;
        OCR2=val1;
 
    }
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License