Post on 07-Nov-2015
description
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.