Para controlar el Motor de manera remota pueden descargar la aplicaron RC Bluetooth Control desde:
Google PLay:
Amazon:
Para realizar el control del motor mediante comando de voz pueden descargar la aplicación RC Bluetooth PRO desde :
Google Play:
Amazon:
Pueden Descargar el código para programar el PIC :
//#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen
// CONFIGURACIÓN DE LOS FUSES PAR EL ROGAMADO Y VELOCIDAD DEL CRISRTAL
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
// CONFIGURACIÒN VELOCIDAD DL RELOJ DEL MICROCONTROLADO
#use delay (clock = 20M )
#use fast_io(c)
// CONFIGURACIÓN VELOCIDAD DE TRANSMISIÓN SRAL Y OS PINESD TXXXY RX
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)
// PRIORIDAD A LAS INTERRUPCIONES
#priority rda,timer1,ad
// BIBLOTECA MODIFCADA DE LCD.H PARA QUE TRABAJE CONEL PUERTO D
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>
// CONFIGURACION DE LOS PUERTOS
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84
// VARIABLE QUE CAPTURA EL CARACTER QUE SE ENVÍA POR TRANSMISION SERIAL DESDE EL TELEFONO O TABLET
char valor='$';
// VARIABLE QUE INDICA SI SE RECIBIO UN CARACTER SW=1 Y SI NO SE RECIBIO CARACTERES SW=0
int sw=0;
// STRING DEL MENSAJE DEL PIC
char dato[30]="PIC Rx=";
// STRING DEL MENSAJE DEL PIC QUE SE TRANSMITEPOR EL PUERTO SERIAL
char mensajeTx [12];
// VARIABLE PARA LA VELOCIDAD DEL MOTOR
INT velMotor=255;
// VARIABLES SENTIDO DEL GIRO
int izqMotor=0,derMotor=0;
//INTERRUPCION SI SE RECIBE POR EL PUERTO SERIAL
#INT_RDA //RS232 receive data available
void recibido()
{
// CAPTURA EL CARATCTER QUE SE RECIBE POR TRANSMISION SERIAL
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;
}
}
void main ()
{
int i;
Setup_adc_ports(NO_ANALOGS);
lcd_init();
set_tris_a(0b00000000);
set_tris_b(0b00000000);
set_tris_c(0b10000000);
set_tris_d(0b00000000);
output_low(PIN_C2); //CCP1
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_1, 255, 1);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Modulacion PWM");
output_a(0xFF);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
// Apago los LED conevatados al Puerto A
output_a (255);
while(true)
{
switch(valor)
{
//SELECCIONAMOS LA VELOCIDAD DE GIRO DEL MOTOR
case '9': velMotor=255;
break;
case '8': velMotor=226;
break;
case '7': velMotor=199;
break;
case '6': velMotor=170;
break;
case '5': velMotor=142;
break;
case '4': velMotor=114;
break;
case '3': velMotor=85;
break;
case '2': velMotor=57;
break;
case '1': velMotor=28;
break;
case '0': velMotor=0;
break;
// SELECCIONAMOS EL SENTIDO DE GIRO
case 'R': izqMotor=0;
derMotor=velMotor;
output_bit(PIN_A1,0);
output_bit(PIN_A2,255);
output_bit(PIN_A3,255);
break;
case 'L': izqMotor=velMotor;
derMotor=0;
output_bit(PIN_A1,255);
output_bit(PIN_A2,0);
output_bit(PIN_A3,255);
break;
// SELECCIONAMOS APAGAR EL MOTOR
case 'X': izqMotor=0;
derMotor=0;
output_bit(PIN_A1,255);
output_bit(PIN_A2,255);
output_bit(PIN_A3,0);
break;
case 'x': izqMotor=0;
derMotor=0;
output_bit(PIN_A1,255);
output_bit(PIN_A2,255);
output_bit(PIN_A3,0);
break;
}
//EL MOTOE GIRA EN FUNCION DEL CARACTER RECIBIDO
set_pwm2_duty(izqMotor);
set_pwm1_duty(derMotor);
// SE IMPRIME EL CARACTER RECIBIDO EN PANTALLA Y SE TRANSMITE UN MENSAJE POR EL PUERTO SERIAL
if (sw==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"%S %c","Recibido=",valor);
sprintf(mensajeTX,"%s %c",dato,valor);
puts(mensajeTx);
sw=0;
//valor='$';
}
// SE INICIALIZA LA VARIABLE RECIBIDA
}
}
Comments