Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Cusco Per
2017 - I
CONTROL POR BLUETOOTH
I. Diseo de circuito
En el presente trabajo daremos a conocer cmo se realiza el armado del carrito y tambin
cmo est hecho el cdigo para su funcionamiento para el manejo.
Materiales
Una estructura para dar forma al carrito
Arduino
4 motores
Un controlador de motores L298N
1 Bluetooth
Cables
4 ruedas (llantas)
1 Protoboard
1 sensor de proximidad
1. Colocamos las 4 ruedas en los 4 lugares conocidos del carro en la estructura escogida
para hacer el trabajo.
2. Luego hacemos las conexiones de las ruedas con cada uno de los 4 motores de
preferencia lo soldamos para un mejor funcionamiento.
3. Una vez acopladas las ruedas conectamos los cables de cada par de motores al driver
o controlador, el primer par al controlador Motor A y el segundo par al controlador
motor B.
4. Una vez hecha las conexiones de los motores hacemos las conexiones de las bateras
la cual estar conectado al controlador de motores L298N para suministrar energa.
Alimentar con la batera a la entrada de 6-12V y GND, despus sacar cables de las
entradas GND y 5V para alimentar al Protoboard.
5. El controlador de suministros es muy importante, puesto es quien dar y har las
instrucciones a los motores tanto para la velocidad como para los giros que pueden ser
a la derecha, izquierda, adelante y atrs.
6. El Controlador L298N a su vez de hacer las conexiones tambin se hace conexiones
de los pines de este controlador que van hacia el arduino como son ENA, IN1, IN2,
que son para el manejo del primer par de motores, tambin el del segundo para de
motores que son ENB, IN3,IN4.
7. Luego de hacer la conexiones del controlador de al arduino en los pines escogidos nos
vamos a realizar la conexin del bluetooth y para ello tenemos tener muy en cuenta
los 4 pines de conexin que tiene nuestro bluetooth como son RX, TX, y los ms
conocido que son VCC, GND.
a. Para un mejor manejo del bluetooth se puede configurar cambiar el nombre y
poder as ubicar entre muchos el nuestro.
8. Colocar el sensor de proximidad en la parte Fontal del carrito, y conectar el ping trig
al puerto 8 y el echo al puerto 9
9. Por ltimo tener en cuenta las conexiones del arduino como son el de 5V y el GND
(tierra).
#include <Ultrasonic.h>
#define trigPin 8
#define echoPin 9
int message = 'g';
int motor1Pin1 = 2; // pin 2 on L293B
int motor1Pin2 = 3; // pin 7 on L293B
int motor1Pin3 = 4; // pin 10 on L293B
int motor2Pin1 = 5; // pin 15 on L293B
int motor2Pin2 = 6; // pin 10 on L293B
int motor2Pin3 = 7; // pin 15 on L293B
Ultrasonic ultrasonido(trigPin,echoPin);
void setup() {
//pinMode(13, OUTPUT); // Declaramos que utilizaremos el pin 13 como salida
Serial.begin(9600); //Se inicia la comunicacin serie
pinMode(motor1Pin1,OUTPUT);
pinMode(motor1Pin2,OUTPUT);
pinMode(motor1Pin3,OUTPUT);
pinMode(motor2Pin1,OUTPUT);
pinMode(motor2Pin2,OUTPUT);
pinMode(motor2Pin3,OUTPUT);
}
void loop() {
message = Serial.read();
int d=ultrasonido.Ranging(CM);
if(d>50){
seguir(message);
}
else{
parar();
atras();
}
}
//ADELANTE
void seguir(int message){
if(message=='w'){
digitalWrite(motor1Pin2,LOW);
digitalWrite(motor1Pin1,HIGH);
digitalWrite(motor1Pin3,HIGH);
digitalWrite(motor2Pin1,HIGH);
digitalWrite(motor2Pin2,LOW);
digitalWrite(motor2Pin3,HIGH);
}
//ATRAS
if(message=='s'){
digitalWrite(motor1Pin2,HIGH);
digitalWrite(motor1Pin1,LOW);
digitalWrite(motor1Pin3,HIGH);
digitalWrite(motor2Pin1,HIGH);
digitalWrite(motor2Pin2,HIGH);
digitalWrite(motor2Pin3,LOW);
}
//ADELANTE Izq
if(message=='a'){
digitalWrite(motor1Pin2,LOW);
digitalWrite(motor1Pin1,HIGH);
digitalWrite(motor1Pin3,HIGH);
digitalWrite(motor2Pin1,HIGH);
digitalWrite(motor2Pin2,HIGH);
digitalWrite(motor2Pin3,LOW);
delay(250);
parar();
}
//ADELANTE der
if(message=='d'){
digitalWrite(motor1Pin2,HIGH);
digitalWrite(motor1Pin1,LOW);
digitalWrite(motor1Pin3,HIGH);
digitalWrite(motor2Pin1,HIGH);
digitalWrite(motor2Pin2,LOW);
digitalWrite(motor2Pin3,HIGH);
delay(250);
parar();
}
if(message=='p'){ // Boton Parar
digitalWrite(motor1Pin2,LOW);
digitalWrite(motor1Pin1,LOW);
digitalWrite(motor1Pin3,LOW);
digitalWrite(motor2Pin1,LOW);
digitalWrite(motor2Pin2,LOW);
digitalWrite(motor2Pin3,LOW);
}
}
void parar()
{
int d1=0;
int d2=0;
digitalWrite(motor1Pin2,LOW);
digitalWrite(motor1Pin1,LOW);
digitalWrite(motor1Pin3,LOW);
digitalWrite(motor2Pin1,LOW);
digitalWrite(motor2Pin2,LOW);
digitalWrite(motor2Pin3,LOW);
}
void atras()
{
digitalWrite(motor1Pin2,HIGH);
digitalWrite(motor1Pin1,LOW);
digitalWrite(motor1Pin3,HIGH);
digitalWrite(motor2Pin1,HIGH);
digitalWrite(motor2Pin2,HIGH);
digitalWrite(motor2Pin3,LOW);
delay(100);
parar();
}
CODIGO PYTHON
# import serial
# define los lmites inferior y superior de los colores en el espacio de color HSV
inf3 = {'rojo': (166, 84, 141)}
sup3 = {'rojo': (186, 255, 255)}
# pts = deque(maxlen=args["buffer"])
def distancia_camara_objeto(aTamFotoPix, aTamObjPix):
longitud_focal = 4.235 # en mm
tam_real_obj = 7 * 10 # tamao real del objeto en mm( 7cm pelota *10=70mm)
alto_sensor = 3.52 # altura del sensor en px
tam_foto = aTamFotoPix # tamao de la imagen en pixeles
# calcula y retorna la distancia desde la imagen a la camara
distancia = (longitud_focal * tam_real_obj * tam_foto) / (aTamObjPix * alto_sensor)
return distancia
# Dispositivo - Camara
camara = cv2.VideoCapture(rutaIP)
# sigue ejecutando el bucle
dispBLUE = conectar_blue()
cont_uno = 0
dist_avance1 = 0
dist = 0
while True:
# toma el frame actual
(tomado, frame) = camara.read()
# tomala la captura
# cv2.imwrite('cap_robo.jpg', frame)
else:
cmd_blue('w', 2)
# cmd_blue('w', 2)
# cmd_blue('a', 3)
if cont_uno > 4:
print('Dist', dist)
print('Cont_uno', cont_uno)
numerador = dist * (math.cos((cont_uno * 7)*math.pi/180))
print(numerador)
dist_avance1 = int((numerador / 4.3) + 10)
print('B1', dist_avance1)
cont_uno = 0
if dist_avance1 > 0:
cmd_blue('w', dist_avance1)
print('B2', dist_avance1)
cmd_blue('a', 15)
cmd_blue('w', 18)
# -----------------------------------------------------------------------------------------
# ----------------------------- PELOTA 2---------------------------------------------------
for key, value in sup2.items():
# construye una mascara para los colores del diccionario luego realiza
# una serie de delataciones y erosiones para eliminar las pequeas
# manchas(ruido) dejadas en la mascara
kernel = np.ones((9, 9), np.uint8)
mascara = cv2.inRange(hsv, inf2[key], sup2[key])
mascara = cv2.morphologyEx(mascara, cv2.MORPH_OPEN, kernel)
mascara = cv2.morphologyEx(mascara, cv2.MORPH_CLOSE, kernel)
IV. Imagenes
V. Link del video
https://youtu.be/bHZzKxbRoZo