Entrega 3er corte - sistemas embebidos

You are viewing an older revision! See the latest version

Entrega tercer corte

integrantes

Daniel Vizcaya; César Pacheco ; Angel Villanueva; Julio Fajardo;

Entrega de tercer corte

En la elaboración del robot piccolo se planteo el funcionamiento del sistema mediante una tarjeta de desarrollo la cual nos permite implementar varias técnicas de programación y diseño. En este proyecto se pudo plantear otras formas de mejorar las características del modelo de guía , com fueron la implementacion de comandos que lo que hacen es dar instrucciones de dibujo al piccolo, también se implemento un código para el uso de motores paso a paso los cuales mueven el piccolo en diferentes cuadrantes, el cual podrá dibujar en varios espacios, y de manera autónoma.

/media/uploads/Bethory/whatsapp_image_2018-05-29_at_7.08.50_pm-3-.jpeg estructura

/media/uploads/Bethory/k.jpeg

sistema de ruedas...

En esta ocacion se plantea realizar una programacion la cual tiene unos parametros los cuales deben realizar las acciones en la programacion, adicional a esto se acondiciona una pantalla de visualizacion y control, en la cual se podra contrololar el piccolo de forma que se pueda realizar unas figuras precargadas.

/media/uploads/Bethory/sin_t-tulo.jpg

pantalla de control y visualización.

En esta entrega también se dio paso al diseño, gracias al plano esquemático del robot piccolo se puede diseñar un circuito PCB, ya que con este se puede utilizar un menor cableado y ahorrar una mayor cantidad de espacio. dando un toque característico a cada robot, realizando conexiones que se adapten al sistema. El diseño de la PCB se realizo por un programa de licencia libre llamado Fritzing. este programa os permite realizar una conexión por medio de protoboard, realizar una conexión por medio de un plano esquemático y ademas diseñar de manera eficiente La PCB. en este programa también se podrá encontrar los elementos de electrónica básicos como sin resistencias, condensadores y circuitos integrados, Actuadores tales como motores de corriente continua, paso a paso, servomotores ...

/media/uploads/Bethory/captura_de_pantalla_2018-05-30_18.37.18.png

Plano esquemático.

/media/uploads/Bethory/captura_de_pantalla_2018-05-30_18.31.18.png

plano listo para impresión de PCB.

En la parte del código se formulo un reto el cual consiste en poner pausa con un comando y volver a reproducir el código. esto se realiza mediante interrupciones tal como lo veremos en el código. Para este programa se van a utilizar varios pines digitales de la tarjeta para poder configuar los diferentes actuadores. Se utilizara desde el pin D0 hasta el pin D12.

/media/uploads/Bethory/nucleo_f303re_arduino_right_2016_7_22.png

cabecera

#include "mbed.h"
#include "draw.h"
#include "stepmotor.h"
//#include<string>

#define CM_ENTER 0xF0
#define CM_PLAY 0xF6
#define CM_PAUSE 0xF7
#define CM_GIRO 0xF8
#define CM_TRASLADAR 0xF9
#define CM_STOP 0xFA
#define CM_NODRAW 0xFB
#define CM_DRAW 0XFC
#define CM_VERTEX2D 0xFD
#define CM_GUARDAR 0xFE
#define CM_EJECUTAR 0xFF

#define MEM_SIZE 100
#define MEM_TYPE uint32_t   //significa que de ahora en más donde diga MEM_TYPE será tipo uint32_t
#define PASOSxCUADRANTE 1000 //4096

en esta parte se colocan los comandos nuevos que son 0xF6 PLAY el cual nos dice que salga de la interrupción y continué, el otro es 0xF7 que es el que pausa el programa o la ejecución del código.

función pausa y reproducir

void Rx_interrupt()
{
    char raw_data;
    raw_data = command.getc();
    letrero.printf(">>>>");
    switch (raw_data)
    {
        case CM_PAUSE:
            valor=0;
            break;
        case CM_PLAY:
            valor=1;
            break;      
        default:
            break;
    }
    return;
}
//en esta parte del código se lee el dato para enviar la interrupción al código, la cual se va a ejecutar mientras dibuja es decir mientras ejecuta el código.



void ejecutar()
{
    letrero.printf("inicio de ejecutar...\n");
    int j=0;
    do
    {
        letrero.attach(&Rx_interrupt, Serial::RxIrq);
        if (buffer[j] == CM_NODRAW)
        {
            nodraw();
        }
        if (buffer[j] == CM_DRAW)
        {
            draw();
        }
        if (buffer[j] == CM_STOP)
        {
            mem_free();
            return;
        }

En el sistema de ruedas se encontró otro reto y es el de mover las ruedas al tiempo una forma de hacerlo es mediante el uso de la función BusOut en la cual se puede colocar varias salidas y estas se pueden activar al tiempo según como lo queramos. hay otra forma que es hacerlo mediante los Hilos o thread, el cual pausa el código solo por unos instantes, en esos instantes puede realizar otra cosa, por ejemplo prender un LED o apagarlo. Conociendo esta técnica se utilizo para mover los motores mediante hilos los cuales se mueven al tiempo.

Hilos

MEM_TYPE buffer[MEM_SIZE];
stepmotor smotor1(D9, D10, D11, D12);
stepmotor smotor2(D2, D6, D7, D8);
Serial command(PC_10, PC_11, 9600); //transmisión serial a 9600 baudios a través de pin PC_10 y PC_11
Serial letrero(PC_12, PD_2, 9600);

Thread hilo1; //inicia liza hilo1

void giroIzq()
{
    smotor1.step(1000, 1);
}

void stepforward()
{
    smotor1.step(cuadrantes * PASOSxCUADRANTE, !direccion);
    hilo1.join();                                                         //une el hilo 1 con el giro.
}

void giroDer()
{
    smotor1.step(1000, 0);
}

void girar(uint8_t sentido)
{
    letrero.printf(">>>> %d \n", sentido);    
    uint32_t speed = 1500;
    smotor1.set_speed(speed);
    smotor2.set_speed(speed);
    if (sentido == 1)
    {
        letrero.printf("pa la derecha!!\n");
        hilo1.start(giroIzq);                 //inicia el hilo y envía giro izquierda
        smotor2.step(1000, 1);
    }
    else
    {
        letrero.printf("pa la izquierda!\n");
        hilo1.start(giroDer);
        smotor2.step(1000, 0);
    }
    wait(2);

Como puede verse en esta parte del código se puede ver como se inicia liza los hilos como llamarlos y ejecutarlos. Aquí se utilizo para que se pueda mover las dos ruedas como un solo sistema.

Conclusiones

- A través de la programación orientada objetos es posible hacer lo que queramos, una de las formas mas fáciles de hacerlo es creer en que se puede hacer.


All wikipages