Veículo Terrestre Não Tripulado (UGV) ou Spycar

Vehículo terrestre no tripulado (UGV) o Spycar

Acerca de este proyecto

Desarrollé un vehículo terrestre no tripulado (UGV), un vehículo de 4 ruedas controlado por radio que tiene 6 movimientos diferentes. En esta plataforma de 4 ruedas podemos montar una cámara inalámbrica y, utilizando la retroalimentación de vídeo en una PC, podemos conducir el vehículo desde una ubicación distante. Podemos controlar el dispositivo a través de una atractiva GUI que se ejecuta en la PC.
Diseñé la parte del hardware de la forma más sencilla posible. ATMEGA328 en la placa Arduino pro-mini se utiliza para controlar el vehículo. La codificación se realiza en Arduino IDE y el PROCESAMIENTO se utiliza para desarrollar una GUI.
Puede usarse para trabajos de espionaje y de ahí el nombre SPY .
Características
Controlado por radio
Movimiento en 6 direcciones.
Se utiliza la placa Arduino pro-mini
Controlar una PC mediante GUI
Lo suficientemente potente como para llevar cámara inalámbrica, micrófono, etc.
HARDWARE
Diagrama de bloques:
Diagrama de bloques de vehículos terrestres no tripulados.

Motores y puente H

motores
Se utiliza un motor común de 5 V CC. En este vehículo en particular, los motores están montados en la parte trasera y cada uno impulsa una de las ruedas delanteras a través de una transmisión separada. Este sistema ayuda a girar el vehículo hacia la izquierda o hacia la derecha usando el puente H. He proporcionado una fuente de alimentación de 9 V separada para los motores.
Puente H
Se utilizan cuatro relés de 5 V y algunos otros componentes para realizar un puente H. Se requiere activar un número máximo de 3 relés en cualquier momento.
Diagrama del circuito del puente H:
Diagrama del circuito del puente H
Los cuatro relés se accionan mediante un IC de accionamiento de relé común, ULN2004.
Diagrama del circuito de accionamiento por relé:
Diagrama del circuito de accionamiento por relé

Fuente de energía

Fuente de energía
Usé más de una batería de 9V conectada en paralelo. También podemos utilizar batería separada para el motor si es necesario.
Diagrama del circuito de alimentación.

Diagrama del circuito de alimentación.

placa arduino

placa arduino
La placa Arduino pro-mini se utiliza para controlar el circuito. La placa cuenta con un controlador ATMEGA328 junto con los componentes necesarios.
placa arduino
Utilicé los pines 5, 6, 7 y 8, que son pines de E/S digitales para controlar el puente H. El pin número 13 está conectado internamente en la placa a un LED que usamos como indicador de recepción de datos. El pin RX1 se utiliza para recibir los datos en serie del receptor de RF.
Diagrama del circuito de la placa Arduino
Diagrama del circuito de la placa Arduino

Receptor RF

Receptor RF
Utilicé un par de módulos RF, en los cuales el módulo receptor es RWS 434. Funciona a 430 MHz y proporciona salida TTL en el pin 2. Se puede interconectar fácilmente con Arduino.
Diagrama del circuito del receptor
Diagrama del circuito del receptor
Convertidor USB a TTL
Utilicé el convertidor FTDI usb a ttl que viene de sparkfun. Lo mismo también se utiliza para cargar el programa en la placa Arduino.
Convertidor USB a TTL

Transmisor RF

Transmisor RF
Utilicé el módulo transmisor TWS434. Funciona a 430 MHz y permite transmitir datos en serie recibidos en el pin 2 a una distancia máxima de 30 metros. Funciona con datos serie TTL a una velocidad máxima en baudios de 1200 bps.
Transmisor RF
Diagrama del circuito del transmisor
Diagrama del circuito del transmisor

Componentes

Lista de componentes y especificaciones.
Batería ——————————————- 9V, 1 núms.
Regulador IC —————————————- 7805, 1 núms.
Condensador ——————————————- 1000 mfd, electrolito, 2 núms.
Diodo ————————————————— 1N4007, 4 núms.
Resistencia ——————————————— 1KE, 0,25 W, 1 núms.
LED ———————————————— 3 mm, rojo, 1 núms.
Relé ———————————————- 5V, tipo terrón de azúcar, 4 núms.
Motor ——————————————— 5V, motor CC, 2 núms.
Transmisor ——————————————– Módulo transmisor RF, ASK, TWS 434, 1 núms.
Receptor ——————————————— Módulo receptor de RF, ASK, RWS 434, 1 núms.
Convertidor de USB a TTL ——————————- Placa de conexión USB FTDI, Sparkfun, 1 núms.
Placa Arduino ——————————————- Arduino pro-mini, 5V, 1 núms.

Botón hecho clic e imágenes.

Botón hecho clic Carácter transmitido
Siguiente —————————– ‘8’
Hacia atrás ————————— '2'
Mover a la izquierda ———————— '7'
Mover a la derecha ———————- '9'
Atrás izquierda ———————- '1'
Atrás derecha ——————– '3'
Las siguientes imágenes deben guardarse en la misma carpeta del proyecto junto con el código.
director.jpg

avance.jpg

atrás.jpg

mover hacia la izquierda.jpg
mover a la derecha.jpg
atrás izquierda.jpg
atrás derecha.jpg
La mayoría de las veces es necesario un pequeño ajuste en el código. Como no tenemos la opción de seleccionar el número de puerto del dispositivo, debemos editar el número de puerto en el código.
println(Lista.serie); mostrar una lista de puertos serie presentes
Por ejemplo:
Si com21 es el puerto de mi dispositivo, puedo encontrarlo en el administrador de dispositivos. Ahora uso (2) en la siguiente línea de código.
Cadena portName = Serial.list (2);

Imágenes del proyecto

Imágenes del proyecto
Vehículo terrestre no tripulado (UGV) o Spycar
Vehículo terrestre no tripulado (UGV) o Spycar
Vehículo terrestre no tripulado (UGV) o Spycar
Vehículo terrestre no tripulado (UGV) o Spycar

Video

Código fuente del proyecto

###


Código Arduino

El código comprueba continuamente la recepción de cualquiera de los bytes de datos predefinidos. Si se encuentra uno, se realizarán los cambios correspondientes.

los valores lógicos de los pines de salida.

#definir Odata 13

#definirOfront8

#definir Oizquierda 7

#definir derecha 6

#definir Oback 5

int enByte = 0; //entrada byte serial

configuración nula

{

pinMode(Odata, SALIDA);

pinMode(Ofront, SALIDA);

pinMode(Oizquierda, SALIDA);

pinMode(Derecha, SALIDA);

pinMode(Oback, SALIDA);

escritura digital(Ofront, ALTA);

escritura digital (Oizquierda, ALTA);

escritura digital (derecha, ALTA);

escritura digital(Oback, ALTA);

escritura digital (Odata, BAJO); //Para indicar recepción de datos

Serie.begin(1200); //inicia el puerto serie a 9600 bps:

}

bucle vacío

{

if (Serial.available > 0) // si obtenemos un byte válido

{

inByte = Serial.read; //obtiene el byte recibido:

escritura digital (Odata, ALTA); //Para indicar recepción de datos

retraso(10);

si (enByte == '8')

{

//------- avance---------//

escritura digital (Ofront, BAJO);

escritura digital (Oizquierda, BAJA);

escritura digital (derecha, BAJA);

escritura digital(Oback, ALTA);

retraso(1000);

}

de lo contrario si (enByte == '2')

{

//------- para atrás---------//

escritura digital(Ofront, ALTA);

escritura digital (Oizquierda, BAJA);

escritura digital (derecha, BAJA);

escritura digital(Oback, ABAJO);

retraso(1000);

}

de lo contrario si (enByte == '7')

{

//-----adelante izquierda--------//

escritura digital (Ofront, BAJO);

escritura digital (Oizquierda, ALTA);

escritura digital (derecha, BAJA);

escritura digital(Oback, ALTA);

retraso(1000);

}

de lo contrario si (enByte == '9')

{

//-----adelante derecha------//

escritura digital (Ofront, BAJO);

escritura digital (Oizquierda, BAJA);

escritura digital (derecha, ALTA);

escritura digital(Oback, ALTA);

retraso(1000);

}

de lo contrario si (enByte == '1')

{

//-----hacia atrás a la izquierda-----------//

escritura digital(Ofront, ALTA);

escritura digital (Oizquierda, ALTA);

escritura digital (derecha, BAJA);

escritura digital(Oback, ABAJO);

retraso(1000);

}

de lo contrario si (enByte == '3')

{

//-----hacia atrás a la derecha------//

escritura digital(Ofront, ALTA);

escritura digital (Oizquierda, BAJA);

escritura digital (derecha, ALTA);

escritura digital(Oback, ABAJO);

retraso(1000);

}otro;

}

otro

{

//-----Sin movimiento-----//

escritura digital(Ofront, ALTA);

escritura digital (Oizquierda, ALTA);

escritura digital (derecha, ALTA);

escritura digital(Oback, ALTA);

}

}

código de procesamiento

Usé PROCESSING para desarrollar una GUI. El siguiente código identifica en qué tecla el usuario pretendía hacer clic, según la posición del puntero del mouse en el momento del clic. Luego, el código envía el byte de datos correspondiente al puerto USB a una velocidad de 1200 baudios.

procesamiento de importación.serial.*;

Serial myPort;

Imagen principal;

PImagen adelante;

PImagen al revés;

Imagen adelante izquierda;

PImagen a la derecha;

Imagen inversa a la izquierda;

Imagen invertida a la derecha;

int pulsación de bandera = 0;

configuración nula

{

tamaño(360, 204); //Definiendo el tamaño de la ventana

//-------------- Cargando imágenes -------------------//

principal = loadImage("principal.jpg");

adelante = loadImage("adelante.jpg");

hacia atrás = loadImage("hacia atrás.jpg");

forwardleft = loadImage("adelante izquierda.jpg");

forwardright = loadImage("forwardright.jpg");

reverseleft = loadImage("hacia atrás izquierda.jpg");

invertright = loadImage("backright.jpg");

//------------------------------------------------ ----//

println(Lista.serie); //Listar los puertos serie actuales

//----------- Configurando detalles del puerto --------------- //

Cadena portName = Serial.list (2);

myPort = new Serial(this, portName, 1200);

//------------------------------------------------ ----//

}

empate nulo

{

imagen(principal, 0, 0); // Muestra la imagen "main.jpg"

if(mousePressed) // Comprobando si hay un clic del mouse

{

if( ( (141 < ratónX ) && (ratónX < 182) ) && ( (24 < ratónY ) && (ratónY < 41) ) )

// Comprobando las coordenadas del puntero del ratón

{

imagen(siguiente, 0, 0); // Muestra la imagen "forward.jpg"

si(presionar bandera == 0)

miPuerto.write('8'); //Envía el carácter '8' al puerto USB

presionar bandera = 1;

}

if( ( (141 < ratónX ) && (ratónX < 182) ) && ( (117 < ratónY ) && (ratónY < 133) ) )

// Comprobando las coordenadas del puntero del ratón

{

imagen(hacia atrás, 0, 0); // Muestra la imagen "hacia atrás.jpg"

si(presionar bandera == 0)

miPuerto.write('2'); //Envía el carácter '2' al puerto USB

presionar bandera = 1;

}

if( ( (74 < ratónX ) && (ratónX < 116) ) && ( (24 < ratónY ) && (ratónY < 41) ) )

// Comprobando las coordenadas del puntero del ratón

{

imagen(adelante izquierda, 0, 0); // Muestra la imagen "forwardleft.jpg"

si(presionar bandera == 0)

miPuerto.write('7'); //Envía el carácter '7' al puerto USB

presionar bandera = 1;

}

if( ( (204 < ratónX ) && (ratónX < 246) ) && ( (24 < ratónY ) && (ratónY < 41) ) )

// Comprobando las coordenadas del puntero del ratón

{

imagen(adelantederecha, 0, 0); // Muestra la imagen "forwardright.jpg"

si(presionar bandera == 0)

miPuerto.write('9'); // Envía el carácter '9' al puerto USB

presionar bandera = 1;

}

if( ( (74 < ratónX ) && (ratónX < 116) ) && ( (117 < ratónY ) && (ratónY < 133) ) )

// Comprobando las coordenadas del puntero del ratón

{

imagen (reverso a la izquierda, 0, 0); // Muestra la imagen "reverseleft.jpg"

si(presionar bandera == 0)

miPuerto.write('1'); //Envía el carácter '1' al puerto USB

presionar bandera = 1;

}

if( ( (204 < ratónX ) && (ratónX < 246) ) && ( (117 < ratónY ) && (ratónY < 133) ) )

// Comprobando las coordenadas del puntero del ratón

{

imagen (reverso a la derecha, 0, 0); // Muestra la imagen "reverseright.jpg"

si(presionar bandera == 0)

miPuerto.write('3'); //Envía el carácter '3' al puerto USB

presionar bandera = 1;

}

}

otro

{

pulsación de bandera = 0;

}

}

###

Conteúdo Relacionado

En cada vehículo hay una red de sensores integrada...
El controlador del motor es uno de los componentes...
ESP32-CAM es un módulo de cámara compacto que combina...
La evolución de los estándares USB ha sido fundamental...
SCHURTER anuncia una mejora de su popular serie SWZ...
Visual Communications Company (VCC) ha anunciado sus nuevos tubos...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Probablemente se haya encontrado con el término " resistencia...
Probablemente tenga un aislante de soporte si ha notado...
Probablemente haya visto un aislante colocado en postes de...
Probablemente hayas visto aisladores de grillete entronizados en postes...
Probablemente hayas experimentado situaciones en las que controlar un...
Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.