Академический Документы
Профессиональный Документы
Культура Документы
http://ai2.appinventor.mit.edu
a : Avanzar
b : Girar Izquierda
c : Parar
d : Girar Derecha
e : Retroceder
f : Izquierda una rueda
g : Derecha una rueda
h : Aumenta velocidad (PWM)
i : Disminuye velocidad (PWM)
o : Solicita medida del Ultrasonido (cm)
En la pgina de internet https://www.youtube.com/watch?v=MiWLzbpfqr0 se
encuentra un video, el cual se apoy este trabajo en la parte de programacin a
bloques (app inventor 2).
Despus programamos las diferentes teclas restantes, las cuales cada vez que
sean oprimidas mandaran el carcter correspondiente al dispositivo bluetooth
antes seleccionado. Estos caracteres sern responsables de diversas funciones
que el programa del pic18f4550 del robot interprete.
Luego ponemos un programa para recibir un dato en este caso los centmetros
medidos del ultrasonido y ponerlo en un label para visualizarlo en la aplicacin.
El programa que manda al robot est diseado en CCS, este recibe un dato en
formato carcter para luego hacer la funcin especfica.
// Especificaciones generales del programa en CCS diseado por PEDRO ALONZO SUAREZ TUN.////////////////////
// programa que recibe del puerto serial un valor en formato carcter para realizar una funcin especifica:
// a,b,c,d,e,f,g : activa los motores de traccin.
// h : aumenta velocidad(PWM).
// i : disminuye velocidad(PWM).
// j : activa ULTRASONIDO y el valor de la distancia en cm es transmitido por puerto serial.
// ROBOT con traccin a orugas que se maneja por dispositivo bluetooht, as mismo transmite el valor del ultrasonido.
// El ultrasonido est montado en un servo para tener movilidad.
// Todo esto se controla por otro programa (APP INVENTROR 2) que se instal en un sistema ANDROID.
#include <18F4550.h>
#fuses INTRC_IO,NODEBUG,NOWRT,NOVREGEN
#fuses MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)
#define PulsoInicioUltra
PIN_C0
#define PulsoEcoUltra
PIN_C1
int16 TiempoUltra=0;
int16 Distancia=0;
int16 ValorPosicion=1500;
int1 Salir=0;
char ValorBluetooh=0;
int8 ValorPWM=90;
#int_RDA
void serial_isr()
{
ValorBluetooh=getc();
switch (ValorBluetooh)
{
case 'a':
output_B(0b10010000);
//adelante
break;
case 'b':
output_B(0b01010000);
//izquierda
break;
case 'c':
output_B(0b00000000);
//parar
break;
case 'd':
output_B(0b10100000);
break;
case 'e':
//derecha
output_B(0b01100000);
//reverza
break;
case 'f':
output_B(0b00010000);
break;
case 'g':
output_B(0b10000000);
break;
case 'h':
break;
case 'i':
break;
case 'j':
Ultrasonido ();
//
LlamarUltrasonido=1;
break;
case 'k':
output_high(PIN_B1);
delay_us(1000);
break;
case 'l':
case 'm':
if (ValorPosicion<= 700){
ValorPosicion=701;}
ValorPosicion -= (200);
break;
}
}
void main()
{
setup_oscillator(OSC_4MHZ|OSC_INTRC|OSC_PLL_OFF);
setup_timer_2(T2_DIV_BY_4,124,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(valorPWM);
setup_comparator(NC_NC_NC_NC);
setup_timer_3(T3_INTERNAL|T3_DIV_BY_1);
enable_interrupts(INT_TIMER3);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true){
Servomotor ();
}
}
delay_ms(10);
//el tiempo del pulso (pwm)que da como resultado la posicion del servo
if (input(PIN_D2)== 0){
//
delay_ms(10);
// tiempo de tecla
if (ValorPosicion<= 700){
ValorPosicion=701;}
ValorPosicion--;}
}
output_high(PulsoInicioUltra);
delay_us(20);
output_low(PulsoInicioUltra);
//////////////////// esperamos el pulso (eco) de inicio de la rafaga ultrasonica para dar marcha al timer1.
while(true){
if(input(PulsoEcoUltra)==1){
setup_timer_3(T3_INTERNAL | T3_DIV_BY_1);
set_timer3(36535);
//precarga del timer = 36535 = 65535-29000. 29000us es la duracion del sonido en ir y
regresar de un objeto a 5 metros
break;}}
salir=0;
////////////////// esperamos flanco de bajada del pulso que indica el retorno del sonido
while(salir==0){
if(input(PulsoEcoUltra)==0){salir=1;} //salimos con el retorno del ultrasonido o con la interrupcion con la bandera
salir=1.
}
/////////////// tomamos el valor del timer y aplicamos formula para la distancia
TiempoUltra=get_timer3();
setup_timer_3 ( T3_DISABLED ); // paramos al timer para que no de otra lectura
TiempoUltra -= 36535;
//obtengo la distancia en cm por medio de la formula: distancia=((duracion pulso de salida)*(1/29cm/us))/2
// velocidad de sonido=1/29cm/us=340m/s
Distancia = TiempoUltra / 29;
Distancia /= 2;
BIBLIOGRAFIA :
www.superrobotica.com
www.todopic.com.ar