//++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++ volatile int DER=0; volatile int IZQ=0; void setup() { // put your setup code here, to run once: Serial.begin(9600); attachInterrupt(0,RUEDADER,RISING);//INT0 en pin2 attachInterrupt(1,RUEDAIZQ,FALLING);//INT1 en pin3 } void loop() { // put your main code here, to run repeatedly: delay(1000); Serial.print("Pulsos en Rueda Derecha="); Serial.println(DER); Serial.print("Pulsos en Rueda Izquierda="); Serial.println(IZQ); Serial.println("+/+/+/+/+/+/+/+/+/+/+/+"); DER=0; IZQ=0; } void RUEDADER(){ DER++; //INCREMENTAR +1 } void RUEDAIZQ(){ IZQ++; //INCREMENTAR +1 } //++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++
Hola a todos, hoy les voy a presentar como controlar la velocidad de las ruedas en el ROBOTCAR, con esto vamos a corregir el avance que tenia el robot y lograremos que lo haga en linea recta.
El codigo es el siguiente: //+++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++ int mp7=7; //CONTROL MOTOR PIN7 int PWM_mp6=6; //SALIDA PWM AL MOTOR IZQUIERDO int PWM_mp5=5; //SALIDA PWM AL MOTOR DERECHO int mp4=4; //CONTROL MOTOR PIN4 void setup() { // put your setup code here, to run once: pinMode(mp7,OUTPUT); pinMode(PWM_mp6,OUTPUT); pinMode(PWM_mp5,OUTPUT); pinMode(mp4,OUTPUT); digitalWrite(mp7,LOW); //LOW=BAJO= 0 VOLTS digitalWrite(mp4,LOW); //LOW=BAJO= 0 VOLTS } void loop() { // put your main code here, to run repeatedly: analogWrite(PWM_mp6,150); //MOTOR IZQUIERDO analogWrite(PWM_mp5,255); //MOTOR DERECHO }
Código y Vídeo Tutorial más abajo: //++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++ #define BUZZER 8 int MICROFONO=3; int GREEN=A0; int YELLOW=A1; int RED=A2; int VARX; bool SONIDO= false; unsigned long TIEMPO;
Os mostrare otro tipo de sensor de humedad y realizaremos una sencilla practica para visualizar los valores que entrega el sensor antes la presencia de humedad. El código es el siguiente:
//+++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++ int SH=A3; //SENSOR DE HUMEDAD
void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Serial.println(analogRead(SH)); delay(1000); } //+++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++
Esta practica es un reto, porque vamos a unir dos programas y manipularemos nuestro RobotCar usando un Control Remoto.
Para realizar esta practica necesitas el código del Receptor de luz Infrarroja de un Mando a Distancia(control remoto) el cual puedes descargar en este enlace: http://nbrobots.blogspot.com/2019/02/...
Nota: debes instalar la librería "IRLremote" aquí les pongo la liga para la descarga: https://drive.google.com/drive/folder...
Y también les dejo un vídeo de como pueden cargarlo si tienen algún problema: https://youtu.be/9K6lk1vWZr4
Y por último debemos copiar las funciones que creamos para poder mover las ruedas, y también configurar el registro DDRD para usar PORTD con dicho propósito(o si lo prefieren usar las instrucciones pinMode y digitalWrite): http://nbrobots.blogspot.com/2019/02/...
//++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++ #include <IRLremote.h>
int BUZZER=8;
int RED=A2; //LED ROJO
int YELLOW=A1; //LED AMARILLO
int GREEN=A0; //LED VERDE
int INTERRUPCION=1; //INT 1 colocada en PIN#3
uint8_t PROTOCOLO; //FORMATO DE INFORMACION
uint16_t DIRECCION; //DEL CONTROL REMOTO
uint32_t TECLA;
uint8_t COPIA; //ALMACENA UNA COPIA TEMPORAL DE "SREG"
void ADELANTE(){
PORTD=B10010000;
}
void DERECHA(){
PORTD=B10000000;
}
void IZQUIERDA(){
PORTD=B00010000;
}
void DETENER(){
PORTD=B00000000;
}
void REVERSA(){
PORTD=B01100000;
}
void IREvent(uint8_t protocol,uint16_t address,uint32_t command){
PROTOCOLO=protocol;
DIRECCION=address;
TECLA=command;
}
void setup() {
// put your setup code here, to run once:
IRLbegin<IR_ALL>(INTERRUPCION); //Configura receptor
Serial.begin(9600);
//PINES 7,6,5,4,3,2,1,0 = PORTD
//ENTRADA=0 Y SALIDA=1
DDRD=B11110011;
pinMode(BUZZER,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
COPIA=SREG;
cli(); //CLEAR Global Interrupt Flag
while(PROTOCOLO!=0 && TECLA!=0){
Serial.print("Protocolo=");
Serial.print(PROTOCOLO);
Serial.print(" Dirección=");
Serial.print(DIRECCION,HEX);
Serial.print(" Tecla=");
Serial.println(TECLA,HEX);
PROTOCOLO=0;
}
SREG=COPIA;
//sei(); //SET Global Interrupt Flag
while(TECLA!=0){
switch(TECLA){
case 0x49B6:
ADELANTE();
delay(1000);
DETENER();
break;
case 0xF906:
DERECHA();
delay(500);
DETENER();
break;
case 0xE916:
IZQUIERDA();
delay(500);
DETENER();
break;
case 0x1BE4:
REVERSA();
delay(2000);
DETENER();
break;
case 0xD926:
tone(BUZZER,200,200);
analogWrite(RED,0);
analogWrite(YELLOW,0);
analogWrite(GREEN,0);
break;
case 0x6897:
analogWrite(RED,255);
analogWrite(YELLOW,0);
analogWrite(GREEN,0);
break;
case 0x9867:
analogWrite(RED,0);
analogWrite(YELLOW,255);
analogWrite(GREEN,0);
break;
case 0xB04F:
analogWrite(RED,0);
analogWrite(YELLOW,0);
analogWrite(GREEN,255);
break;
}
TECLA=0;
}
} //++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++