//++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++ 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;
}
} //++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++ #define BUZZER 8 //PIN #8 PARA BUZZER int GREEN=A0; //PUERTO ANALOGICO int YELLOW=A1; int RED=A2; char TECLA; void APAGAR(){ analogWrite(RED,0); analogWrite(YELLOW,0); analogWrite(GREEN,0); } void setup() { // put your setup code here, to run once: pinMode(BUZZER,OUTPUT); Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: while(Serial.available()==0){}//espera sino hay datos TECLA=Serial.read(); if(TECLA=='\n'){} else{ APAGAR(); //Turn OFF Leds switch(TECLA){ case 'R': Serial.println("Turn On RED Led"); analogWrite(RED,255); break; case 'Y': Serial.println("Turn On YELLOW Led"); analogWrite(YELLOW,255); break; case 'G': Serial.println("Turn On GREEN Led"); analogWrite(GREEN,255); break; default: Serial.println("Key Wrong"); tone(BUZZER,200,300); break; } } } //+++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++
Aquí el código para poder usar el Sensor de Humedad.
//+++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++ #define LED 13 //LED EN PLACA ARDUINO & SHIELD #define BUZZER 8 //ZUMBADOR EN EL PIN #8 int RED=A2; //LED ROJO int YELLOW=A1; //LED AMARILLO int GREEN=A0; //LED VERDE int HUMEDAD=A3; //SENSOR DE HUMEDAD int VALOR; //GUARDA EL VALOR DEL SENSOR void APAGAR() { //APAGAR LOS TRES LEDS analogWrite(RED,0); analogWrite(YELLOW,0); analogWrite(GREEN,0); } void setup() { // put your setup code here, to run once: pinMode(LED,OUTPUT); //LED PLACA ARDUINO pinMode(BUZZER,OUTPUT); //PIN TO BUZZER Serial.begin(9600); //VELOCIDAD DE PUERTO SERIE digitalWrite(LED,HIGH); //LED SYSTEM "TURN ON" } void loop() { // put your main code here, to run repeatedly: APAGAR(); //APAGAR TODOS LOS LEDS VALOR=analogRead(HUMEDAD);//LEER EL VALOR DE HUMEDAD Serial.print(VALOR); //ESCRIBIR EN LA COMPUTADORA if(VALOR>0 & VALOR<500){//INTENSAMENTE HUMED0 analogWrite(GREEN,255); } if(VALOR>500 & VALOR<800){//POCA HUMEDAD analogWrite(YELLOW,255); } if(VALOR>800 & VALOR<1024){//AMBIENTE SECO analogWrite(RED,255); tone(BUZZER,1000,500); } delay(3000); } //+++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++
Hola a todos, aquí les dejo el código y el vídeo para conectar el Modulo Buzzer que es una pequeña bocina para emitir zumbidos. El modulo lo conectaremos al pin #8 de nuestro Arduino UNO para dejarlo conectado y utilizarlo también en las futuras practicas.
// +++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++ // Declaración de las variables const int BUZZER=8; // pin del BUZZER pasivo void setup(){ pinMode(BUZZER,OUTPUT); }
void loop() { //La frecuencia MÍNIMA que puede producir el Arduino es 31Hz. //La frecuencia MÁXIMA que puede producir el Arduino es 65,525Hz. //tone(BUZZER, 250, 250); //(PIN, HZ ,TIEMPO NOTA) //tone(BUZZER, 450, 250); //(PIN, HZ ,TIEMPO NOTA) tone(BUZZER, 660, 250); //(PIN, HZ ,TIEMPO NOTA) delay(3000); //Silenciar por un tiempo }
Debido a que cada vez crece nuestros componentes que colocamos en el NBROBOT CAR nos vemos en la necesidad de cambiar los LEDs de semaforo y colocarlos en el puerto analogico, aquí les dejo el video y el codigo explicando su funcionamiento.
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #define LED 13 const int GREEN = A0; // LED OUTPUT ANALOG const int YELLOW = A1; // LED OUTPUT ANALOG const int RED = A2; // LED OUTPUT ANALOG int VARX; void setup() { // put your setup code here, to run once: pinMode(LED,OUTPUT); } void loop() { // put your main code here, to run repeatedl y: for(VARX=155;VARX<255;VARX++){ //VARIAR LA INTENSIDAD LUMINOSA analogWrite(GREEN,VARX); //255=HIGH analogWrite(YELLOW,VARX); //0=LOW analogWrite(RED,VARX); // delay(100); } for(VARX=0;VARX<10;VARX++){ digitalWrite(LED,HIGH); //ON LED analogWrite(GREEN,255); //ON LED analogWrite(YELLOW,255); //ON LED analogWrite(RED,255); //ON LED delay(1000); digitalWrite(LED,LOW); analogWrite(GREEN,0); //OFF LED analogWrite(YELLOW,0); //OFF LED analogWrite(RED,0); //OFF LED delay(1000); } }
Aquí les dejo el código para su NBRobot usándolo con sensor de Ultrasonido Recuerden colocar cada cable en su respectivo lugar, ok. Copiar y pegar en un nuevo archivo, ojo no vayan a duplicar la función SETUP y LOOP solo debe existir una, y ya están incluidas en este código. //+++++++++++++++++++++++++++++++++++++++++++++ #define ECO 12 //Pin eco del Sensor #define TRIGER 11 //Pin de disparo del Sensor #define RED 10 #define YELLOW 9 #define GREEN 8 long DURACION, DISTANCIA; void setup() { // put your setup code here, to run once: pinMode(ECO,INPUT); //ENTRADA DE ULTRASONIDO=ECO pinMode(TRIGER,OUTPUT); //PIN DE DISPARO digitalWrite(TRIGER,LOW); //DISPARO =LOW =0 VOLTS pinMode(RED,OUTPUT); //LED RED pinMode(YELLOW,OUTPUT); //LED YELLOW pinMode(GREEN,OUTPUT); //LED GREEN Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly:
//+++++++++++++++++++++++++++++++++++++++++++++ OJO: si dan click en la pantalla del Software Arduino donde dice Monitor Serie y dejan conectado el cable USB a su placa podrán ver la "medida de la distancias en centímetros" de los objetos que estén frente al sensor. Ok. :)