Вы находитесь на странице: 1из 12

APP INVENTOR 2 :

http://ai2.appinventor.mit.edu

Buscamos y diseamos imgenes en Paint, para que lo utilicemos como botones.

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).

Configuramos bluetooth con un antes de haber oprimido la tecla listPicker (tecla


conetar) para fijar los elementos bluetooth cliente con direcciones y nombre; luego
con un despus donde se llama al bluetooth para la conexin a la direccin que
hayamos seleccionado.

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.

PROGRAMA DEL MICROCONTROLADOR :

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

#define servo PIN_B2

int16 TiempoUltra=0;
int16 Distancia=0;
int16 ValorPosicion=1500;
int1 Salir=0;
char ValorBluetooh=0;
int8 ValorPWM=90;

void Ultrasonido (void);


void Servomotor (void);
/////////esta interrupcion se activa si el sensor ultrasonico no encuentra obstaculos de reflexin sonar a 5 metros.///////////////
#int_TIMER3
void TIMER3_isr(void)
{
setup_timer_3 ( T3_DISABLED );
printf ( " no hay medida ");
Salir=1;

//mando al dispositivo bluetooh el mensaje por medio del puerto serial.

// salgo de la interrupcion y obligamos a salir de la espera de retorno del ultrasonido.

#int_RDA
void serial_isr()
{
ValorBluetooh=getc();

//recibe dato del bluetooh y lo guarda en ValorBluetooh

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);

//derecha un solo motor

break;

case 'g':
output_B(0b10000000);

//izquierda un solo motor

break;

case 'h':

//aumenta velocidad al motor (pwm)

if (ValorPWM <= 40){


ValorPWM=41;}
ValorPWM--;
set_pwm1_duty(valorPWM);

//carga Duty de PWM

break;

case 'i':

//disminuye velocidad a los motores (pwm

if (ValorPWM >= 124){


ValorPWM=123;}
ValorPWM++;
set_pwm1_duty(valorPWM);

//carga Duty de PWM

break;

case 'j':
Ultrasonido ();
//

LlamarUltrasonido=1;

break;

case 'k':
output_high(PIN_B1);
delay_us(1000);
break;

//activamos al dispositivo ultrasonico

case 'l':

//disminuye velocidad a los motores (pwm)

if (ValorPosicion >= 2200){


ValorPosicion=2150;}
ValorPosicion += (200);
break;

case 'm':

//disminuye velocidad a los motores (pwm)

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);

//500 us de INT aproximadamente para PWM.

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);

// activamos INT SERIAL.

enable_interrupts(GLOBAL);

while(true){

Servomotor ();
}
}

///llamamos la funcion servomotor

void Servomotor (void){


output_high(PIN_B2);
delay_us(ValorPosicion);
output_low(PIN_B2);
delay_ms(19);
/////////////////////////////////////////
if (input(PIN_D1)== 0){
//

// cada ves que se tenga oprimido tecla D1 incrementa

delay_ms(10);

//el tiempo del pulso (pwm)que da como resultado la posicion del servo

if (ValorPosicion >= 2200){


ValorPosicion=2199;}
ValorPosicion++; }

if (input(PIN_D2)== 0){
//

// cada ves que se tenga oprimido tecla D2 decrementa

delay_ms(10);

// tiempo de tecla

if (ValorPosicion<= 700){
ValorPosicion=701;}
ValorPosicion--;}
}

////////Funcion que Activa el ultrasonido y manda por bluetooth su medida ////////////////////////////////

void Ultrasonido (void){

output_high(PulsoInicioUltra);

//mandamos un pulso de 10us min. para activar al sensor

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;

printf ( "%04lu \r ", Distancia); //mandamos datos al bluetooht.


delay_ms(200);

DISEO FISICO DEL ROBOT :

BIBLIOGRAFIA :

www.superrobotica.com
www.todopic.com.ar

Вам также может понравиться