28
Profesor: Dr. Alberto Luviano Juárez Estudiante: Hayari Lizet Cruz González CONTROL DE ROBOTS REPORTE DE ACTIVIDADES INSTITUTO POLITÉCNICO NACIONAL Unidad Profesional Interdisciplinaria en Ingeniería y Tecnologías Avanzadas MAESTRÍA EN TECNOLOGÍA AVANZADA

Módulo de wiffi con PICS

Embed Size (px)

DESCRIPTION

El presente proyecto emplea un modulo wifi para la comunicación entre microcontroladores-servidor por medio de una aplicación Android.

Citation preview

  • Profesor: Dr. Alberto Luviano Jurez Estudiante: Hayari Lizet Cruz Gonzlez

    CONTROL DE ROBOTS

    REPORTE DE ACTIVIDADES

    INSTITUTO POLITCNICO NACIONAL

    Unidad Profesional Interdisciplinaria en

    Ingeniera y Tecnologas Avanzadas

    MAESTRA EN TECNOLOGA AVANZADA

  • 1

    MODULO DE COMUNICACIN INALMBRICA PARA

    MICROCONTROLADORES PIC POR MEDIO DE WIFI

    NDICE

    1. Introduccin 2

    2. Objetivos 2

    3. Material 2

    4. Desarrollo Del Trabajo

    4.1 Modalidades De La Comunicacin Wifi 3

    4.2 Dispositivo Wifi 3

    4.3 Caractersticas Del Mdulo Wifi 3

    4.3.1 Configuracin De Terminales 4

    4.3.2 Esquemtico Del Mdulo Wifi 4

    4.4 Diagrama A Bloques General Del Proyecto 5

    4.5 Software De Obtencin De Informacin GPS 5

    4.6 Esquemtico Del Mdulo Wifi De Prueba 7

    4.7 Pruebas y Configuracin 8

    4.8 Programa de Prueba en lenguaje C 9

    5. Conclusiones 27

  • 2

    1. INTRODUCCIN

    El aumento de la capacidad de los microprocesadores, cada vez ms potentes,

    aunado a la capacidad de comunicacin entre ellos ha producido una gran pululacin de

    aplicaciones. En ste punto donde las comunicaciones inalmbricas juegan un papel

    importante que aumenta un sinfn de posibilidades. El uso de este tipo de tecnologas

    implica una mayor movilidad y flexibilidad a la hora de conectarse, haciendo posible casi

    cualquier tarea.

    El proyecto consiste en dotar de una comunicacin inalmbrica al control de un

    robot mvil el cul ser capaz de seguir una trayectoria dada, para que dicha trayectoria

    pueda calcularse en necesario obtener 2 parmetros importantes para el control: la

    posicin deseada o posicin de referencia y la posicin medida mediante un sensor. Cabe

    mencionar que los lmites de dicho proyecto slo se enfocan a la obtencin de la posicin

    de referencia. Para ello se desarrollar una aplicacin en ANDROID que obtenga la

    informacin del GPS de un telfono celular, calculando y visualizando en pantalla la

    longitud y latitud para posteriormente bajar esa informacin a un microcontrolador

    dotado con mdulo wifi; sta informacin ser ingresada al sistema principal del robot

    mvil para clculos propios del control de trayectorias.

    2. OBJETIVOS Realizacin de interfaz con el usuario en un Smartphone con sistema Android para

    obtener la informacin del GPS (longitud y latitud).

    Integrar la comunicacin wifi a microcontroladores PIC, mediante el mdulo wifi plus

    click de MikroElektronika a un circuito sencillo de encendido de leds.

    Dar de alta un servidor local para el desplegado de informacin, en un navegador web

    comn, de la informacin.

    Transmitir longitud y latitud del dispositivo Smartphone del GPS al servidor y

    posteriormente mandarlos va puerto para su procesamiento en la tarjeta principal del

    robot mvil.

    3. MATERIAL Protoboard o tablilla de pruebas

    1 microcontrolador PIC18F45K22

    Modulo wifi para PICs wifi plus click

    4 push button

    5 resistencias de 10K y 1 resistencia variable de 1k

    1 display de LCD

  • 3

    4. DESARROLLO DEL TRABAJO

    4.1 MODALIDADES DE LA COMUNICACIN WIFI

    Cuando hablamos de WIFI nos referimos a una de las tecnologas de comunicacin

    inalmbrica mediante ondas ms utilizada hoy en da. WIFI, tambin llamada WLAN

    (wireless lan, red inalmbrica) o estndar IEEE 802.11. WIFI no es una abreviatura de

    Wireless Fidelity, simplemente es un nombre comercial.

    En la actualidad podemos encontrarnos con dos tipos de comunicacin WIFI:

    802.11b, que emite a 11 Mb/seg, y

    802.11g, ms rapida, a 54 MB/seg.

    De hecho, son su velocidad y alcance (unos 100-150 metros en hardaware asequible) lo

    convierten en una frmula perfecta para el acceso a internet sin cables.

    4.2 DISPOSITIVO WIFI

    El modulo WiFi PLUS Click es una solucin compacta para

    agregar comunicacin WiFi. Viene con el mdulo MRF24WB0MA

    (2.4 GHz, compatible con el IEEE std. 802.11) as como el

    controlador MCW1001 con el stack TCP/IP integrado y

    manejador de conexin 802.11. WiFi PLUS Click se comunica con

    el dipositivo deseado va una interface UART. La tarjeta es

    diseada para usar un suministro de potencia de 3.3 V en bajo

    consumo de energa.

    4.3 CARACTERSTICAS DEL MDULO WIFI

    Las caractersticas incluyen:

    Interface de comunicacin UART simple.

    Antena PCB integrada con rango de hasta 400 m.

    El Satck TCP/IP integrado ahorra memoria del microcontrolador

    a usar.

  • 4

    4.3.1 CONFIGURACIN DE TERMINALES

    MikroElektronika creo un nuevo sistema de

    comunicacin llamado mikroBus el cual cada conector

    consta de dos conectores hembras 1x8. Hay tres grupos

    de pines de comunicacin: SPI, UART y la comunicacin

    I2C. Tambin hay pines individuales para PWM,

    interrupcin, entrada analgica, Reset y Seleccin de

    chip. Se tienen 2 voltajes de alimentacin: + 5V y GND

    en una cabecera y + 3,3 V y GND en la otra. mikroBUS

    encaja perfectamente en placas de desarrollo de

    proyectos.

    AN - Analog pin PWM - PWM output line RST - Reset pin INT - Hardware Interrupt line CS - SPI Chip Select line RX - UART Receive line SCK - SPI Clock line TX - UART Transmit line MISO - SPI Slave Output line SCL - I2C Clock line MOSI - SPI Slave Input line SDA - I2C Data line +3.3V - VCC-3.3V power line +5V - VCC-5V power line GND - Reference Ground GND - Reference Ground

    4.3.2 ESQUEMTICO DEL MDULO WIFI

  • 5

    4.4 DIAGRAMA A BLOQUES GENERAL DEL PROYECTO En un principio la idea fue de utilizar una laptop ya que el proyecto estaba previsto

    para controlar una silla de ruedas de tamao real, pero debido a que las pilas no eran las

    adecuadas para hacer funcionar los motores, se descart la opcin.

    Diagrama a bloques general del proyecto

    4.5 SOFTWARE DE OBTENCIN DE INFORMACIN GPS

    El sistema Android es la plataforma de comunicaciones para cmputo inalmbrico y

    mvil de Google. La aplicacin de obtencin de latitud y longitud del GPS del smartPhone

    se realiz en el poderoso entorno Eclipse para desarrollar aplicaciones con el plug-in de

    Android; tambin conocido como Android Development Tools (ADT).

    4.5.1 CDIGO FUENTE

    package com.example.hayari.gpsx; //Importa las libreras que se ocuparn import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Indica el archivo xml que

    contendr la interfaz

  • 6

    LocationManager milocManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);

    //Activa los servicios de localizacin GPS LocationListener milocListener = new MiLocationListener();

    milocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, milocListener);

    //Funcin que controla la actualizacin de los datos durante la ejecucin } public class MiLocationListener implements LocationListener { public void onLocationChanged(Location loc) { //Si la ubicacin cambia, obtiene loc.getLatitude(); // latitud loc.getLongitude(); // longitud TextView tv1 = (TextView)findViewById(R.id.latitud); //Define la

    etiqueta donde se mostrar la latitud TextView tv2 = (TextView)findViewById(R.id.longitud); //Define la otra

    etiqueta donde se mostrar la longitud tv1.setText("" + loc.getLatitude()); //Imprime la latitude en la etiqueta tv2.setText("" + loc.getLongitude()); //Imprime la longitude en la

    etiqueta } public void onProviderDisabled(String provider) { //Funcion para indicar

    si el gps est //deshabilitado Toast.makeText(getApplicationContext(), "Gps Desactivado",

    Toast.LENGTH_SHORT).show(); } public void onProviderEnabled(String provider) {//Funcion para indicar si

    el gps est //habilitado Toast.makeText(getApplicationContext(), "Gps Activo",

    Toast.LENGTH_SHORT).show(); } public void onStatusChanged(String provider, int status, Bundle extras) { } } }

  • 7

    4.6 ESQUEMTICO DEL MDULO WIFI DE PRUEBA DEL

    PROYECTO

    Para llevar a cabo la comunicacin inalmbrica se realiz el siguiente circuito en una

    tablilla de pruebas (protoboard).

    Funcionamiento:

    El ejemplo es un servidor web que sirve una pgina web, donde se monitorea el

    estado de 4 push, y el resultado de un canal del ADC del microcontrolador, adems desde

    la misma pgina se puede controlar el estado de 4 LEDs, mismo que puede verse en el

    hardware.

    El mdulo wifi se comunica con el microcontrolador a traves de la comunicacin UART por

    dos pines que son RX y TX que son Recepcin y transmisin respectivamente.

  • 8

    4.7 PRUEBAS Y CONFIGURACIN Primero se intent levantar el servidor con un router inalmbrico casero de

    Telmex, pero para dotar al robot mvil de libre movimiento en el campo se opt por

    descartar ste dispositivo.

    Para realizar pruebas primero se tuvieron que encontrar datos importantes como

    son la direccin mac, la direccin IP del dispositivo la IP Gateway del router y la mscara

    de red:

    unsigned char myMacAddr[6] = {0x22, 0x33, 0x44, 0x55, 0x66, 0x28};

    // mi direccin mac

    unsigned char myIpAddr[4] = {192, 168, 43, 10 } ; // mi direccin IP

    unsigned char gwIpAddr[4] = {192, 168, 43, 1 } ; // direccin IP gateway (router)

    unsigned char ipMask[4] = {255, 255, 255, 0 } ; // mascara de red

    Posteriormente se encontr la solucin de implementar el Smartphone como

    router y servidor de rea local sin necesidad de conexin a internet, para eso se necesitan

    los datos del telfono que son:

    char strSSID[16] = "SGH-I337M1038";

    char wpaPassword[12] = "earh9068";

    Para encontrar los datos anteriores se entr a ajustes del smarphone: conexiones, ms

    redes, zona porttil y anclaje a red, activar zona wifi porttil y ah viene el strSSID y el

    pasword. Con la anterior configuracin podemos anclar nuestro servidor al telfono y

    poder acceder por un navegador a la pgina de prueba del proyecto. Como se muestra en

    la siguiente imagen, donde desde la pgina se pueden manipular remotamente los leds

    conectados al PIC.

  • 9

    4.8 CODIGO FUENTE EN LENGUAJE C DEL MODULO WIFI

    El cdigo fuente se implement en el software microC pro for PIC versin 6.0.0, ste

    software ya no es necesario incluir las libreras. Para programar las libreras a utilizar en

    Library manager slo palomeando se eligen las siguientes: de ADC, convertidores,

    C_string, C_type, LCD, LCD_constants, sound, UART y Net_wireless_MCW1001_18.

    sbit Net_Wireless_MCW1001_Chip_RST at LATE2_bit;

    sbit Net_Wireless_MCW1001_Chip_RST_Direction at TRISE2_bit;

    #define OFFSET 4

    // conecciones del modulo LCD

    /*sbit LCD_RS at LATB4_bit;

    sbit LCD_EN at LATB5_bit;

    sbit LCD_D4 at LATB0_bit;

    sbit LCD_D5 at LATB1_bit;

  • 10

    sbit LCD_D6 at LATB2_bit;

    sbit LCD_D7 at LATB3_bit;

    sbit LCD_RS_Direction at TRISB4_bit;

    sbit LCD_EN_Direction at TRISB5_bit;

    sbit LCD_D4_Direction at TRISB0_bit;

    sbit LCD_D5_Direction at TRISB1_bit;

    sbit LCD_D6_Direction at TRISB2_bit;

    sbit LCD_D7_Direction at TRISB3_bit; */

    // Lcd module connections

    sbit LCD_RS at LATB2_bit;

    sbit LCD_EN at LATB3_bit;

    sbit LCD_D4 at LATB4_bit;

    sbit LCD_D5 at LATB5_bit;

    sbit LCD_D6 at LATB6_bit;

    sbit LCD_D7 at LATB7_bit;

    sbit LCD_RS_Direction at TRISB2_bit;

    sbit LCD_EN_Direction at TRISB3_bit;

    sbit LCD_D4_Direction at TRISB4_bit;

    sbit LCD_D5_Direction at TRISB5_bit;

    sbit LCD_D6_Direction at TRISB6_bit;

    sbit LCD_D7_Direction at TRISB7_bit;

  • 11

    char txt1[] = "Control de Robots";

    char txt2[] = "Demostracion WiFi_HTTP";

    char txt3[] = "ejemplo";

    char txt4[] = "Initializando";

    char txt5[] = "WiFi Modulo...";

    char txt6[] = "Conectando a";

    char txt7[] = "AccessPoint";

    char txt8[] = "HTTP Server es";

    char txt9[] = "corriendo";

    // Const MAX_SIZE_OF_DATA se refiere a la funcin

    //Net_Wireless_MCW1001_TCP_SendBytes. No es posible slo para transmitir mensajes

    //a la MCW1001A en paquetes de tamao mximo 500 bytes.

    // Tamao de: encabezado AP + Trailer = 11bytes (por funcin

    //Net_Wireless_MCW1001_TCP_SendBytes), y debido a que el tamao mximo de TCP

    // datos es 500 - 11 = 489

    const unsigned int MAX_SIZE_OF_DATA = 489;

    char txBuffer[MAX_SIZE_OF_DATA];

    unsigned int bufferIndex = 0;

    char channels[11] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};

    char strSSID[16] = "SGH-I337M1038";

    char wpaPassword[12] = "earh9068";

    char response, wifiStatus, connInProgressMark = 0;

    char bindResponse, listenResponse, socketHandle, backLog, socketChild;

  • 12

    unsigned int remotePort, localPort;

    char remoteIpAdd[4];

    unsigned char myMacAddr[6] = {0x22, 0x33, 0x44, 0x55, 0x66, 0x28}; // mi MAC

    address

    unsigned char myIpAddr[4] = {192, 168, 43, 10 } ; // mi direccin IP

    unsigned char gwIpAddr[4] = {192, 168, 43, 1 } ;// direccin IP del gateway (router)

    unsigned char ipMask[4] = {255, 255, 255, 0 } ; // marcara de red

    unsigned char getRequest[15] ; // HTTP request buffer

    unsigned char dyna[29] ; // buffer for dynamic response

    unsigned long httpCounter = 0 ; // counter of HTTP requests

    /************************************************************

    * ROM constant strings

    */

    const code char httpHeader[] = "HTTP/1.1 200 OK\nContent-type: " ; // cabecera

    HTTP

    const code char httpMimeTypeHTML[] = "text/html\n\n"

    const code char httpMimeTypeScript[] = "text/plain\n\n" ;

    unsigned char httpMethod[] = "GET /";

    /*

    La pgina web, se divide en 2 partes:

    * Cuando viene corto de ROM, los datos fragmentados se maneja de manera ms

    eficiente por enlazador

    * Esta pgina HTML llama a los tableros para obtener su estatus, y se construye

    con javascript */

  • 13

    const code char *indexPage =// cambia la direccion IP para refrescar la pgina

    "\

    \

    WiFi Mini Web Server\

    Reload\

    \

    \

    ADC\

    AN4document.write(AN4)\

    \

    PORTD\

    \

    var str,i;\

    str=\"\";\

    for(i=0;i

  • 14

    PORTA\

    \

    var str,i;\

    str=\"\";\

    for(i=0;i

  • 15

    rfIconMark = 0;

    }

    else {

    switch(rfIconMark) {

    case 1: {

    ch = character1;

    break;

    }

    case 2: {

    ch = character2;

    break;

    }

    case 3: {

    ch = character3;

    break;

    }

    }

    }

    rfIconMark++;

    Lcd_Cmd(64);

    for (i = 0; i

  • 16

    // Interrumpir rutina de incremento de variable Net_Wireless_MCW1001_Time cada

    //segundo.

    unsigned int wifiTmr = 0; // timer prescaler

    void interrupt() {

    if (TMR0IF_bit) {

    wifiTmr++;

    if(wifiTmr >= 122) {

    Net_Wireless_MCW1001_Time++ ;

    wifiTmr = 0;

    }

    TMR0IF_bit = 0; // clear TMR0IF

    TMR0L = 0; // set TMR0 for aproximetly 1 sec

    }

    }

    // Initializacin de MCU modulos

    void InitMcu() {

    IRCF0_bit = 0; //reloj de 8 Mhz

    IRCF1_bit = 1;

    IRCF2_bit = 1;

    PLLEN_bit = 1; //habilita PLL

    ANSELA = 0x20; // Convertido ADC se usar con el AN4

    ANSELB = 0;

    ANSELC = 0;

    ANSELD = 0;

  • 17

    ANSELE = 0;

    LATA = 0 ;

    TRISA = 0b11110000 ; // se pone RA5 como entrada del ADC, y RA0..RA3 como

    //salida

    TRISD |= 0b00001111; // se pone PORTD como entrada para botones

    SLRCON = 0; // Ajuste la velocidad de respuesta de salida en todos los puertos

    // Inicializacin del timer..............

    TMR0L = 0; // Timer0 valor inicial

    T0CON = 0xC7; // poner TMR0 de modo 8bit y pre escala de 256

    GIE_bit = 1; // habilitacin de interrupcin global

    TMR0IE_bit = 1; // habilitacin de interrupcin Timer0

    Lcd_Init(); // Initializar Lcd

    Lcd_Cmd(_LCD_CLEAR); // limpiar display

    Lcd_Cmd(_LCD_CURSOR_OFF);// Cursor off

    Lcd_Out(1,1+OFFSET,txt1); //Escribir texto en primera fila

    Delay_ms(2000);

    Lcd_Cmd(_LCD_CLEAR); // Clear display

    Lcd_Out(1,2+OFFSET,txt2); // escribir texto en primera fila

    Lcd_Out(2,5+OFFSET,txt3); // escribir texto en segunda fila

    Delay_ms(2000);

    Sound_Init(&PORTE, 1);

    Net_Wireless_MCW1001_HwReset();

  • 18

    }

    // Inicializacin de modulo WiFi

    void InitWiFi() {

    char response;

    Lcd_Cmd(_LCD_CLEAR); // Clear display

    Lcd_Out(1,1+OFFSET,txt4); // escribir texto en primera fila

    Lcd_Out(2,1+OFFSET,txt5); // escribir texto en segunda fila

    Delay_ms(2000);

    Net_Wireless_MCW1001_TimeToWait = 1;

    response = 1;

    while(response != 0)

    response =

    Net_Wireless_MCW1001_SetMode(_NET_WIRELESS_MCW1001_CP_1,

    _NET_WIRELESS_MCW1001_MODE_INFRASTRUCTURE);

    Net_Wireless_MCW1001_TimeToWait = 5;

    Net_Wireless_MCW1001_SetChannelList(11, channels);

    Net_Wireless_MCW1001_SetSecurity_WPA(_NET_WIRELESS_MCW1001_CP_1,

    _NET_WIRELESS_MCW1001_WPA_PSK2, wpaPassword);// Establezca la seguridad

    //WPA_PSK2

    Net_Wireless_MCW1001_SetSSID(_NET_WIRELESS_MCW1001_CP_1, strSSID);

    // Ajuste SSID de la red

    // Establezca los parmetros de red

    Net_Wireless_MCW1001_SetNetworkMask(ipMask);

    Net_Wireless_MCW1001_SetGatewayIP(gwIpAddr);

    Net_Wireless_MCW1001_SetMAC(myMacAddr);

  • 19

    Net_Wireless_MCW1001_SetIP(myIpAddr);

    Net_Wireless_MCW1001_SetArpTime(1); // Ajuste la regulacin de ARP gratuito

    Net_Wireless_MCW1001_SetRetryCount(5, 0); // Establecer el nmero de

    //reintentos para la conexin

    Net_Wireless_MCW1001_SocketAllocate(2, 0, 2048, 2048, 0, 0); // Allocate

    byffers for sockets

    }

    // Rellene bfer local con los datos constantes. Cuando el desbordamiento de bfer,

    //enviarlo a mdulo WiFi

    unsigned int PutConstString(const code char *s) {

    unsigned int numOfSentBytes;

    while(*s) {

    txBuffer[bufferIndex++] = *s++;

    if(bufferIndex == MAX_SIZE_OF_DATA) {

    Net_Wireless_MCW1001_TCP_SendBytes(socketChild, txBuffer,

    MAX_SIZE_OF_DATA, &numOfSentBytes);

    bufferIndex = 0;

    }

    }

    return(bufferIndex) ;

    }

    // Rellene bfer local con datos. Cuando el desbordamiento de bfer, enviarlo a

    //mdulo WiFi

    unsigned int PutString(char *s) {

    unsigned int numOfSentBytes;

  • 20

    while(*s) {

    txBuffer[bufferIndex++] = *s++;

    if(bufferIndex == MAX_SIZE_OF_DATA) {

    Net_Wireless_MCW1001_TCP_SendBytes(socketChild, txBuffer,

    MAX_SIZE_OF_DATA, &numOfSentBytes);

    bufferIndex = 0;

    }

    }

    return(bufferIndex) ;

    }

    void SendHttpResponse() {

    char response, i;

    unsigned int numOfReceiveBytes = 0, numOfSentBytes;

    unsigned int length; // el largo de mi respuesta

    length = 0;

    Net_Wireless_MCW1001_TCP_ReadBytes(&socketChild, 10, getRequest,

    &numOfReceiveBytes);

    getRequest[10] = 0;

    if(memcmp(getRequest, httpMethod, 5)) {

    return;

    }

  • 21

    httpCounter++ ;

    if(getRequest[5] == 's') {

    // la cadena de texto contestado por esta solicitud puede interpretarse como

    //declaraciones de Javascript de navegadores

    bufferIndex = 0;

    PutConstString(httpHeader) ; // HTTP header

    PutConstString(httpMimeTypeScript) ;

    WordToStr(ADC_Read(4), dyna) ;

    PutConstString("var AN4=") ;

    PutString(dyna) ;

    PutConstString(";") ;

    // agregar valor PORTD (botones) para responder

    PutConstString("var PORTD=") ;

    WordToStr(PORTD, dyna) ;

    PutString(dyna) ;

    PutConstString(";") ;

    // agregar valor PORTA (botones) para responder

    PutConstString("var PORTA=") ;

    WordToStr(PORTA, dyna) ;

    PutString(dyna) ;

    PutConstString(";") ;

    WordToStr(httpCounter, dyna) ;

  • 22

    PutConstString("var REQ=") ;

    PutString(dyna) ;

    length = PutConstString(";") ;

    if(length != 0) // Si hay algunos datos (en txBuffer) que no se enva

    Net_Wireless_MCW1001_TCP_SendBytes(socketChild, txBuffer, length,

    &numOfSentBytes);

    }

    else if(getRequest[5] == 't') { // if request path name starts with t, toggle

    PORTA (LED) bit number that comes after

    unsigned char bitMask = 0 ; // for bit mask

    Sound_Play(800, 40); // Play sound at 800Hz for 40ms

    if(isdigit(getRequest[6])) { // if 0

  • 23

    if(length != 0) // Si hay algunos datos (en txBuffer) que no se enva

    Net_Wireless_MCW1001_TCP_SendBytes(socketChild, txBuffer, length,

    &numOfSentBytes);

    }

    }

    void RunHttpServer() {

    Lcd_Cmd(_LCD_CLEAR);

    Lcd_Out(1,1+OFFSET,txt8);

    Lcd_Out(2,1+OFFSET,txt9);

    rfIconMark = 3;

    DrawRfIcon();

    while(1) {

    socketHandle = 0;

    backLog = 1;

    localPort = 80;

    Net_Wireless_MCW1001_SocketCreate(&socketHandle,

    _NET_WIRELESS_MCW1001_SOCKET_TYPE_TCP); // Crear socket TCP

    Net_Wireless_MCW1001_SocketBind(socketHandle, &localPort, &bindResponse);

    Net_Wireless_MCW1001_TCP_Listen(socketHandle, &backLog, &listenResponse);

    while(1) {

    socketChild = socketHandle;

    Net_Wireless_MCW1001_TCP_Accept(&socketChild, &remotePort,

    remoteIpAdd); // acepta coneccin entrante

    if (socketChild != 254) {

    socketChild.

  • 24

    break; }

    }

    SendHttpResponse();

    Net_Wireless_MCW1001_SocketClose(socketChild); // Cerrando sockets

    Net_Wireless_MCW1001_SocketClose(socketHandle);

    }

    }

    void SearchSSID() {

    char markFound, numOfScanRes, response, i;

    char strTmp[33];

    Lcd_Cmd(_LCD_CLEAR);

    Lcd_Out(1,1+OFFSET,"Search SSID...");

    Delay_ms(2000);

    markFound = 0;

    while(markFound != 1) {

    while(1) {

    response = Net_Wireless_MCW1001_ScanStart(255, &numOfScanRes);

    // Scaneo de red

    if(response == 0) // checando scanner satisfactorio

    break;

    Delay_ms(500);

    }

    for(i = 1; i

  • 25

    strncpy(strTmp, Net_Wireless_MCW1001_ScanResult.SSID,

    Net_Wireless_MCW1001_ScanResult.SSIDLength);

    if(Net_Wireless_MCW1001_ScanResult.SSIDLength > 13) {

    strTmp[14] = '\0';

    strTmp[13] = '.';

    strTmp[12] = '.';

    strTmp[11] = '.';

    }

    else

    strTmp[Net_Wireless_MCW1001_ScanResult.SSIDLength] = '\0';

    Lcd_Cmd(_LCD_CLEAR);

    Lcd_Out(1,1+OFFSET,"SSIDs Found:");

    Lcd_Out(2,1+OFFSET,strTmp);

    if(strncmp(Net_Wireless_MCW1001_ScanResult.SSID, strSSID,

    Net_Wireless_MCW1001_ScanResult.SSIDLength) == 0) {

    markFound = 1;

    Delay_ms(700);

    break;

    }

    Delay_ms(700);

    }

    }

    }

    void ConnectToAp() {

    Lcd_Cmd(_LCD_CLEAR);

  • 26

    Lcd_Out(1,1+OFFSET,txt6);

    Lcd_Out(2,1+OFFSET,txt7);

    Net_Wireless_MCW1001_TimeToWait = 1;

    Net_Wireless_MCW1001_Connect(_NET_WIRELESS_MCW1001_CP_1,

    &wifiStatus);

    Net_Wireless_MCW1001_Properties.networkStatus =

    _NET_WIRELESS_MCW1001_STATUS_NOTCONN_STATIC_IP;

    while(1) {

    Net_Wireless_MCW1001_GetNetworkStatus();

    if(Net_Wireless_MCW1001_Properties.networkStatus ==

    _NET_WIRELESS_MCW1001_STATUS_CONN_STATIC_IP)

    break;

    DrawRfIcon();

    Delay_ms(1000);

    }

    Net_Wireless_MCW1001_TimeToWait = 5;

    Sound_Play(800, 40); // suena sonido de 800Hz por 40ms

    Delay_ms(50);

    Sound_Play(800, 40); // suena sonido de 800Hz por 40ms

    }

    void main() {

    InitMcu();

    UART1_Init(19200);

    Delay_ms(1000);

    InitWiFi();

  • 27

    SearchSSID();

    ConnectToAp();

    RunHttpServer();

    }

    5 CONCLUSIONES

    Se cumplieron con los objetivos de lograr implementar el mdulo wifi a un

    microcontrolador con un simple ejemplo de prender y apagar leds por medio de una

    pgina web de un servidor local. Para esta funcin el Smartphone sirvi de router

    inalmbrico logrando con esto tener ms movilidad del robot en el campo. Pero los datos

    almacenados en la aplicacin de Android (longitud y latitud) no pudieron obtenerse

    debido a la complejidad de las libreras del mdulo que no permitieron un fcil manejo. Es

    por esa razn que se decidi utilizar otras alternativas para la obtencin de los datos de

    referencia y medicin de localizacin por medio de una cmara.

    Al robot mvil se le dot de dos crculos blancos de sealizacin, los cuales por

    medio de un programa en Matlab se obtena la imagen de 2 circulos, bajo previo

    procesamiento de imgenes, se calculaban los centroides y as obtener la posicin x, y, y

    para los clculos de las trayectorias.