En este tutorial veremos como hacer un robot controlado por servos e infrarrojos. Para ello vamos a usar los módulos ky-005 (emisor infrarrojo) el módulo ky-022 (receptor infrarrojo), y cuatro servomotores de 360 grados como el mg995. Veremos la lista de materiales, el armado del circuito impreso, el armado del robot, analizaremos el código fuente, y también probaremos el funcionamiento del robot.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Circuito emisor
Módulo ky-005 (emisor infrarrojo)
El módulo transmisor de infrarrojos KY-005 consiste en solo un LED emisor IR de 5 mm.
ESPECIFICACIONES TÉCNICAS
Emite un haz de luz infrarroja a una frecuencia de 38 KHz.
Voltaje de funcionamiento: 5 Volts
Corriente alimentación: 30 a 60 mA CD
Consumo de energía: 90 mW
Temperatura de funcionamiento: -25 °C a 80 °C [-13 °F a 176 °F]
Dimensiones: 18.5 mm x 15 mm [0.728 in x 0.5905 in]
Peso: 2 gr
Arduino nano (puede ser cualquier otro arduino)
Cuatro pulsadores
Circuito receptor (no olvidar que van cuatro servomotores)
Arduino nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Pines hembra
Módulo ky-022 (Receptor infrarrojo)
Tamaño: 6.4 * 7.4 * 5.1MM, ángulo de aceptación 90 °, voltaje de trabajo 2.7-5.5V.
Frecuencia 37.9KHZ, recibiendo la distancia 18 m.
Rechazo de luz diurna hasta 500LUX, capacidad de interferencia electromagnética, IC dedicado de infrarrojos incorporado.
Ampliamente utilizado: estéreo, TV, VCR, CD, decodificadores, marco de fotos digital, audio para el automóvil, juguetes de control remoto, receptores de satélite, disco duro, aire acondicionado, calefacción, ventiladores, iluminación y otros electrodomésticos.
Pinout:
1 …. GND (-)
2 …. + 5V
3 …. Salida (S)
Led rojo
Circuito impreso (pcb)
Archivo gerber –> MULTIPLES SERVOS
Pines macho
Resistor de 1K
Cuatro servomotores ( con accesorios)
El mg995 – 360°, es un servo de rotación continua (360°) es una variante de los servos normales, en los que la señal que enviamos al servo controla la velocidad de giro, en lugar de la posición angular como ocurre en los servos convencionales.
Este servo de rotación continua es una forma sencilla de conseguir un motor con control de velocidad, sin tener que añadir dispositivos adicionales como controladores o encoders como ocurre en el caso en el caso de motores DC o paso a paso, ya que el control está integrado en el propio servo.
Especificaciones
- Material de los engranes: Metal
- Rango de giro: 360 °
- Voltaje de operación: 3 V a 7.2 V
- Velocidad de operación sin carga : 0.17 segundos / 60 grados (4.8V); 0.13 segundos / 60 grados (6.0V)
- Torque: 15 kg / cm
- Temperatura de trabajo: -30 °C a 60 °C
- Largo del cable: 310 mm
- Peso: 55 g
- Dimensiones: 40.7 mm x 19.7 mm x 42.9 mm
Incluye:
- 1 Servomotor Tower Pro Mg995 giro continuo.
- 3 Tornillos para ensamble.
- 3 Coples (horns).
Puerto usb macho
Zócalo para el arduino nano
Archivo gerber
Código fuente (emisor)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
//En el pin número 3 debe ser conectado el emisor infrarrojo #include <IRremote.h> IRsend irsend; int led13=13; int estado2 = 0; int estado4 = 0; int estado5 = 0; int estado6 = 0; void setup() { pinMode(led13, OUTPUT);//Pin 13 como salida //Pin 2 4 5 y 6 como entradas se habilitan resistores de pullup pinMode(2, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); } void loop() { //Leemos el estado de los pulsaodres int pul2 = digitalRead(2); int pul4 = digitalRead(4); int pul5 = digitalRead(5); int pul6 = digitalRead(6); if (pul2 == LOW) {//Si se pulsó el botón 2 el estado será LOW y se cumple la condición irsend.sendRC5(10, 12); delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); } if (pul4 == LOW) {//Si se pulsó el botón 4 el estado será LOW y se cumple la condición irsend.sendRC5(11, 12); delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); } if (pul5 == LOW) {//Si se pulsó el botón 5 el estado será LOW y se cumple la condición irsend.sendRC5(12, 12); delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); } if (pul6 == LOW) {//Si se pulsó el botón 6 el estado será LOW y se cumple la condición irsend.sendRC5(13, 12); delay(50); digitalWrite(led13, HIGH); delay(50); digitalWrite(led13, LOW); } //Si ninguno de los botones se pulsó o se soltó el botón precionado se cumple esta condición, para detener la marcha de los servomotores. if(pul2 == HIGH && pul4 == HIGH && pul5 == HIGH && pul6 == HIGH){ delay(100); irsend.sendRC5(14, 12); } } |
Código fuente (receptor)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#include <Servo.h> #include <IRremote.h> #define RECV_PIN 2 //indicamos el pin por el que recibimos los datos del sensor TSOP1838 IRrecv irrecv(RECV_PIN); decode_results results; Servo servoPin9; Servo servoPin10; Servo servoPin11; Servo servoPin12; void setup() { Serial.begin(115200);//Velocidad del puerto serial servoPin9.attach(9);//Pin para el servo motor MG995 de 360 grados servoPin10.attach(10);//Pin para el servo motor MG995 de 360 grados servoPin11.attach(11);//Pin para el servo motor MG995 de 360 grados servoPin12.attach(12);//Pin para el servo motor MG995 de 360 grados irrecv.enableIRIn(); // Iniciamos el sensor infrarrojo } void loop() { //Si tenemos datos de lectura debido a que se pulsa una tecla en el mando if (irrecv.decode(&results)) { //Mostramos por puerto serie dicho codigo en decimal. Serial.print("Codigo: ") ; Serial.println(results.value,DEC) ;//Lo convertimos a un valor decimal //----Avanzar---- if(results.value==10) { servoPin9.write(180);// servoPin10.write(0);// servoPin11.write(180);// servoPin12.write(0);// } //----Atrás---- if(results.value==11) { servoPin9.write(0);// servoPin10.write(180);// servoPin11.write(0);// servoPin12.write(180);// } //----Girar a la derecha---- if(results.value==12) { servoPin9.write(180); servoPin10.write(180); servoPin11.write(180); servoPin12.write(180); } //----Girar en la izquierda---- if(results.value==13) { servoPin9.write(0); servoPin10.write(0); servoPin11.write(0); servoPin12.write(0); } if(results.value==14)//Detener { servoPin9.write(90); servoPin10.write(90); servoPin11.write(90); servoPin12.write(90); } delay(50); //retardo de 50 ms para evitar que el codigo se lea dos veces //en una pulsacion irrecv.resume(); // Recibimos el siguiente valor del sensor } } |
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]
PROYECTO RECOMENDADO