Vous êtes sur la page 1sur 10

UNIVERSIDAD NACIONAL DE

SAN ANTONIO ABAD DEL CUSCO


FACULTAD DE CIENCIAS QUMICAS, FSICAS Y MATEMTICAS

CARRERA PROFESIONAL DE INGENIERA INFORMTICA Y DE


SISTEMAS

Informe de Laboratorio N6

Controlar un auto de juguete con voz desde el


computador mediante un dispositivo bluetooth y el pic
18f4550

Asignatura: Robtica y Procesamiento


de Seal
Alumnos: Cdigo:

- Gutirrez Lezama Karla.


103146
- Lavilla Alvarez Vanesa.
113558
- Paniagua Lpez Yanira.
103173
- Muiz Huaman Omar Alexander.
103645

Semestre 2014-II
CUSCO PER

Controlar un auto de juguete desde el computador por


medio del puerto USB y el PIC 18f4550

1.- Diagrama de Simulacin:

Diagrama en Proteus: En el cual comprobamos el funcionamiento del


cdigo y luego con esto procedemos a gravar el cdigo.

2.- Materiales:

Dispositivo Bluetooth: El estndar Bluetooth se basa en el


modo de operacin maestro/esclavo. El trmino "piconet" se
utiliza para hacer referencia a la red formada por un dispositivo
y todos los dispositivos que se encuentran dentro de su rango.
Pueden coexistir hasta 10 piconets dentro de una sola rea de
cobertura. Un dispositivo maestro se puede conectar
simultneamente con hasta 7 dispositivos esclavos activos (255
cuando se encuentran en modo en espera). Los dispositivos en
una piconet poseen una direccin lgica de 3 bits, para un
mximo de 8 dispositivos. Los dispositivos que se encuentran
en el modo en espera se sincronizan, pero no tienen su propia
direccin fsica en la piconet.

Su uso consiste en consiste en dividir la banda de frecuencia de


2.402 - 2.480 GHz en 79 canales (denominados saltos) de 1
MHz de ancho cada uno y, despus, transmitir la seal
utilizando una secuencia de canales que sea conocida tanto
para la estacin emisora como para la receptora. Por lo tanto, al
cambiar de canales con una frecuencia de 1600 veces por
segundo, el estndar Bluetooth puede evitar la interferencia con
otras seales de radio.

El presente mdulo Bluetooh se puede configurar tanto como


un dispositivo esclavo o un dispositivo maestro, a diferencia de
los modulos que vienen por defecto en modo esclavo o en modo
maestro, este mdulo tendra una ligera diferencia a la hora de
enviar los comandoas AT. El mdulo viene por defecto en modo
esclavo, asi que tanto el nombre como la contrasea estan
definidas. Por otro lado, si se desea el modo maestro, lo primero
sera ingresar a modo AT y para comprobar que se encuentra en
dicho modo se usara el comando "AT\r\n", comando que nos
indica que hay comunicacin entre pic y el mdulo bluetooth.

3.- Presupuesto:

COSTOS DE MATERIALES

Materiales Cantida C/Unitar C/Total


d io
Grabador de PIC 1 S/. 80.00 S/. 80.00
Carro 1 S/. 25.00 S/ 25.00
Cable USB 1 S/. 3.00 S/. 3.00
PIC18F4550 1 S/. 24.00 S/. 24.00
Protoboard 1 S/. 11.00 S/. 11.00
Cristal 4MHz 1 S/. 0.50 S/. 0.50
Condensador 220nf 2 S/. 0.30 S/. 0.60
Condensador 100nf 1 S/. 0.20 S/. 0.20
Condensador 22pf 2 S/. 0.20 S/. 0.40
Pulsador 1 S/. 0.30 S/. 0.30
Resistencia 10k 1 S/. 0.10 S/. 0.10
Integrado LM293B 1 S/. 5.00 S/. 5.00
Bateria Recargable 1 S/. 48.00 S/. 48.00
Cables 3m S/ 1.00 S/ 3.00
Dispositivo Bluetooth 1 S/.45.00 S/45.00
TOTAL: S/.
246,1

4.- Codigo Fuente Del Programa:

#include <18F4550.h>
#use delay(clock=48M)
#fuses NOPROTECT,NOWDT,NOLVP,NOBROWNOUT,XTPLL,PLL1,CPUDIV1
#use rs232(baud=9600, bits=8, parity=N, xmit=pin_c6, rcv=pin_c7)

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

//////////////ASIGNACION DE SALIDAS///////////////
#define IN_1 PIN_B0 //IN_1 IN_2 comandos de motor de direccion
#define IN_2 PIN_B1 //
#define EN_1_2 PIN_B2
#define IN_3 PIN_B3 //IN_3 IN_4 comandos de motor de empuje
#define IN_4 PIN_B4

////////////FUNCIONES/////////////////////
void on_go(void) ///ADELANTE
{
output_high(EN_1_2);
output_high(IN_1);
output_high(IN_2);
output_low(IN_3);
output_high(IN_4);
}
void on_back(void) //ATRAS
{
output_high(EN_1_2);
output_high(IN_1);
output_high(IN_2);
output_high(IN_3);
output_low(IN_4);
}
void on_i(void) //izquierda
{
output_high(EN_1_2);
output_high(IN_1);
output_low(IN_2);
output_low(IN_3);
output_high(IN_4);
}
void on_d(void) //derecha
{
output_high(EN_1_2);
output_low(IN_1);
output_high(IN_2);
output_low(IN_3);
output_high(IN_4);
}
void off_all (void)//parado
{
output_high(EN_1_2);
output_high(IN_1);
output_high(IN_2);
output_high(IN_3);
output_high(IN_4);
}

char valor1;
char dato;
int8 q;
#INT_RDA

void rda_isr(void)
{
valor1=GETC(); //comando para capturar el dato de la PC
dato=valor1; //lo vamos a guardar el dato
delay_us(10); //pausa para no saturar el micro
}
void main()
{ set_tris_b(0b00000000);
set_tris_c(0b10000010);
set_tris_d(0b00000000);
output_b(0x00);
output_d(0x00);
q=4;
enable_interrupts(int_rda);
enable_interrupts(global);
while(true)
{
rda_isr();
if (dato=='W')
{
q=0;
}
if (dato=='D')
{
q=1;
}
if (dato=='A')
{
q=2;
}
if (dato=='S')
{
q=3;
}
if ((dato!='W')&&(dato!='D')&&(dato!='A')&&(dato!='S'))
{
q=4;
}
if (q==0)
{
output_d(0b00000001);
on_go();
}
if (q==1)
{
output_d(0b00000010);
on_d();
}
if (q==2)
{
output_d(0b00000100);
on_i();
}
if (q==3)
{
output_d(0b00001000);
on_back();
}
if (q==4)
{
output_d(0b00001111);
off_all();
}
}
}

5.- Codigo Fuente de la Interfaz de C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PuertoSerial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//buscando los puertos conectados a la PC
Control.CheckForIllegalCrossThreadCalls = false;
//listamos en el combox todos los puertos exitentes que se conectraon
foreach (string s in SerialPort.GetPortNames())
{
cmbListaPuertos.Items.Add(s);
}
}
private void button1_Click(object sender, System.EventArgs e)
{
//enviamos al puerto lo que escribimos en el textbox
puertoSerial.Write(txtDatosEnviar.Text.ToString());
}
//este procedimiento es para no crear comflictos con otros puertos
//modulo para verificar si el puerto es valido y ademas lo deshalitara para no crear
conflictos
private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs
e)
{
puertoSerial.PortName = cmbListaPuertos.Text;
try
{
puertoSerial.Open();
}
catch
{
MessageBox.Show("Puerto no vlido");
return;
}
cmbListaPuertos.Enabled = false;
}
//evento para recibir los datos que nos envia el micro mediante el puerto
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs
e)
{
string dato_recibido = puertoSerial.ReadExisting();
MENSAJE_USB.Items.Clear();
MENSAJE_USB.Items.Add(dato_recibido);
}
private void button2_Click(object sender, EventArgs e)
{
//enviamos al puerto el valor 1 del teclado
puertoSerial.Write("1");
}

private void button3_Click(object sender, EventArgs e)


{
//enviamos al puerto el valor 2 del teclado
puertoSerial.Write("2");
}

private void button5_Click(object sender, EventArgs e)


{
//enviamos al puerto el valor 3 del teclado
puertoSerial.Write("3");
}

private void button4_Click(object sender, EventArgs e)


{
//enviamos al puerto el valor 2 del teclado
puertoSerial.Write("4");
}
}}

SE DESARROLLO EN APP INVENTOR


6.- Conexin Exitosa:
LINK VIDEO: https://www.youtube.com/watch?
v=AQDKVM6E_lk

7.- Conclusin:

- Al inicio tuvimos complicaciones con la fuente, ya que lo motores


consuman mucha energa, por la cual tuvimos que comprar una
batera exclusivamente para los motores.
- Tuvimos la necesidad de incluir un controlador de motor LM293B
para los motores, para que funcionen correctamente.

Vous aimerez peut-être aussi