http://relojcalendariotemyhum.blogspot.com/ Página 0
http://automodeloip.blogspot.com/
1-5-2015
Por: Byron Ganazhapa
ARDUINO
Y
LABVIEW
AUTOMODELO
IP
http://automodeloip.blogspot.com/ Página 1
CONTENIDO INTRODUCCIÓN .................................................................................................................. 1
¿QUÉ NECESITAMOS? ........................................................................................................ 1
DESARROLLO.................................................................................................................... 4
CONFIGURACIÓN DE EQUIPOS ...................................................................................... 4
TRASMISIÓN Y RECEPCIÓN DE DATOS............................................................................ 9
ACONDICIONAMIENTO DE VOLTAJES PARA LECTURA DE BATERÍAS ............................... 13
CONEXIÓN DE PINES DE ENTRADAS Y SALIDAS DEL ARDUINO.......................................... 2
ESQUEMÁTICOS .................................................................................................................. 1
DISEÑO DE PCB ................................................................................................................. 1
CODIGO EN ARDUIN O ................................................................................................ 1
CODIGO EN LABVIEW................................................................................................... 1
IMÁGENES DEL PROYECTO CONCLUIDO ....................................................................... 2
http://relojcalendariotemyhum.blogspot.com/ Página 1
INTRODUCCIÓN
Un Automodelo IP, es un vehículo a escala desarrollado en Arduino y
controlado desde LabVIEW a través de comunicaciones inalámbricas
wifi, también llamada WLAN o estándares IEEE 802.11.
Este proyecto consiste en el diseño y construcción de un vehículo a
escala en la plataforma Arduino y control en la plataforma LabVIEW
2012 desde cero incluida la tarjeta Arduino, con funcionalidades
similares a un auto a escala mecánica y electrónicamente.
La tarjeta Arduino recibe y transmite la información necesaria para el
cálculo y control respectivo, como por ejemplo: control de velocidades
desde la 1ra hasta la 5ta marcha y reversa, control de direcciones
(izquierda y derecha) con luces intermitentes, control de ventiladores
para los circuitos electrónicos y motor, control de luces delanteras y
traseras, medida de niveles de energía de batería(s), y cálculo de
revoluciones por minuto (RPM).
El programa desarrollado en LabVIEW dispone de una interfaz idéntica a
un tacómetro vehicular, donde visualiza la velocidad actual del
vehículo, RPM, nivel de voltaje de la batería, etc.
http://relojcalendariotemyhum.blogspot.com/ Página 1
¿QUÉ NECESITAMOS?
Para este proyecto es muy indispensable disponer de un conjunto de
herramientas básicas de un laboratorio de electrónica: un soldador,
alambre de estaño, unos alicates de punta de aguja y cables.
Para el desarrollo de nuestro proyecto dispondremos de los siguientes
materiales:
1x Arduino UNO (o si prefieres puedes desarrollarla desde cero
para que el proyecto sea 100% original)
Un motor DC de 12 o 24 Volt ios
1x WIZnet Serial-to-Ethernet Gateway - WIZ110SR (o por
preferencia se puede usar un Módulo Ethernet de Arduino).
1x servomotor
1x Router
1x Batería t ipo Lipo de 11.1 Volt ios a 4000 o 5000 mA
2x Kit de llantas
2x ventiladores de 5 Volt ios
2x transitores TIP32, y 4 x TIP31
2x transitores 2N2222, 1 x BC548, 1 X 2N3906
1x transistor Mosfet IRF630
5x diodos 1N4007
2x diodos BY206
1x diodo Zener 1N4733A (5.1 Volt ios)
2x Resistencias de 27 Ohms, y 1x 2.2Ohms. 2Watts C/U
4x Resistencias de 1KOhms, 1 x 100Ohms, 1 x 100KOhms, 3 x
4.7KOhms, 2 x 10KOhms, 2 x 220 Ohms, y 6 x 330Ohms. ¼ Watts C/U
http://automodeloip.blogspot.com/ Página 2
2x potenciómetros lineales de 50KOhms.
2x condensadores electrolít icos de 470uF,
1x condensador poliéster de 470 nF, 3 x 100uF, y 2 x 10uF
3x condensadores cerámicos de 100nF, 2 x 10nF, y 4 x 20nF
2x reguladores de voltaje 7805, y 1 x 7808
2x Leds de alto brillo blanco de 10mm, 2 Rojos de bajo brillo
10mm, y 4 amarillos de bajo brillo de 5mm,
1x Buzzer.
Regletas de espadines hembra y macho
3x Plugs DC
Moles de 3 y 4 pines (lo que sean necesarios)
Placa PCB (simple placa y doble)
Cable de red
Arduino UNO
WIZnet WIZ110SR
Router
Batería de Lipo
Kit de llantas
Ventilador de 5V
http://automodeloip.blogspot.com/ Página 3
Transistores Resistencias Potenciómetro lineal
Transistores
Diodos
Condensadores
cerámicos
Condensadores
electrolít icos
Reguladores de
voltaje
Diodos LED
Buzzer
Espadines hembra y
macho
Plugs DC
motor DC
Molex
PCB
http://automodeloip.blogspot.com/ Página 4
Servomotor
Cable de red
DESARROLLO
CONFIGURACIÓN DE EQUIPOS
Con el objet ivo de realizar la comunicación entre el protot ipo y una
Laptop es necesario disponer de un módulo convert idor Serial a Ethernet
o Wifi. En este proyecto de usa una configuración entre la tarjeta Wiznet
WIZ110SR y un router para la comunicación entre la PC y la placa
Arduino. Es decir se crea una red LAN para dicha tarea.
A. CONFIGURACIÓN DEL MÓDULO WIZNET
Para realizar la tarea de transmisión de datos es necesario configurar
el módulo WIZ110SR como servidor, de tal manera que, permita a un
cliente conectarse a su red para el intercambiar de información
respectiva y que permita visualizarlos.
Los parámetros de configuración del servidor WIZ110SR son:
Dirección IP: 192.168.11.2
Máscara de Subred: 255.255.255.0
Puerta de enlace: 192.168.11.1
Dirección MAC: 0x00.0x08.0xDC.0x17.0xCF.0x3F
http://automodeloip.blogspot.com/ Página 5
Puerto local: 5000
Configuración serial del servidor WIZ110SR:
Velocidad de transmisión serial: 9600
Tamaño de bits de datos: 8 bits
Paridad: ninguna
Bit de parada: 1 bit
http://automodeloip.blogspot.com/ Página 6
B. CONFIGURACIÓN DEL ROUTER
Se puede usar cualquier router, basta que se pueda configurar para
diseñar la red, en m i caso dispongo de un router Trendnet TEW-6528Rp
de 300Mbps.
El router es configurado como un punto de acceso a la red, de tal
modo que ofrezca direcciones IP dinámicamente para que cualquier
host que pueda conectarse a él.
Tanto para User Name y Password es admin.
Para Wireless la configura es básica: canal, ancho de banda del
canal, y estándar 802.11 b/g/n. Se escoge el canal uno para evitar
interferencias entre otros redes y canales.
http://automodeloip.blogspot.com/ Página 7
Para la red LAN definimos las direcciones IP dinámicamente para que
las entregue a los equipos que se conecten ya sea por cable o por wifi.
http://automodeloip.blogspot.com/ Página 8
C. CONFIGURACIÓN DE LA PC
Ingresamos al Centro de redes y recursos compart idos de la PC para
configurar el adaptador de red inalámbrico
Configuramos en propiedades el protocolo de internet versión 4
(TCP/IPv4).
De tal manera que ingresamos una dirección IP a la PC dist inta a las
IP ya ocupadas (192.168.11.3), puerta de enlace que es la dirección IP
http://automodeloip.blogspot.com/ Página 9
del router (192.168.11.1) y la máscara de subred (225.225.225.0) para
estar en la misma red.
Si todo salió excelente podemos verificar la conectividad haciendo
ping desde la PC al módulo Wiznet
TRASMISIÓN Y RECEPCIÓN DE DATOS
Arduino trasmite y recibe información de la red LAN a través del
puerto serial del micro-controlador de para ser visualizada en un host las
variables de RPM y niveles de energía de la(s) batera(s), etc.
Un host se conecta a la red para trasmit ir los datos de control al
protot ipo como velocidades, direcciones, luces y buzzer mediante un
programa desarrollado en LabVIEW en protocolos TCP/IP disponibles en
las herramientas de la plataforma LabVIEW.
A. TRANSMISIÓN DE DATOS DESDE ARDUINO HACIA UN HOST
Arduino transmite su información por el puerto serial a una velocidad
de 9600 Baudios/s. Ojo es importante configurar el Modulo Wiznet y
Arduino a la misma velocidad, tamaño de datos, paridad, etc.
La trasmisión se la realiza durante cada 500 mili-seg. En una sola
trama de longitud estát ica como lo indica en la siguiente imagen:
http://automodeloip.blogspot.com/ Página 10
RPM en un tamaño de 3 digitos.
V1 y V2 trasmite el valor de voltaje en las baterías 1 y 2
respectivamente. Batería 1 es usada para energizar los circuitos, y
Bateria 2 es para el motor. Si prefieres puedes usar una sola batería para
conectar todo el proyecto y leer el nivel de voltaje en un solo punto de
la batería. V1 es conectado al puerto analógico 4 del Arduino y V2 al
puerto analógico 5 del Arduino.
V1 y V2 son t rasmit idos en tamaños de 4 dígitos.
En importante trasmit ir en tamaños de 21 caracteres toda la
información, de tal manera que no exista inestabilidad, desplazamiento
y lectura de datos erróneos al momento de recibir toda la información
en la plataforma LabVIEW.
B. RECEPCIÓN EN ARDUINO
Arduino recibe información desde cualquier host conectado a la red
para el control respectivo del protot ipo:
Recibe el carácter ‘W’ para dar marcha al motor hacia
delante
Recibe el carácter ‘V’ para neutralizar marchas
Recibe el carácter ‘S’ para dar marcha al motor hacia tras
(giro reverso del motor).
http://automodeloip.blogspot.com/ Página 11
Recibe el carácter ‘0’ para realizar el cambio cero o neutral (el
motor no realizara la marcha hacia delante si este está en
cero)
Recibe el carácter ‘1’ para realizar el primer cambio (el motor
realizara la marcha hacia detente si la 1ra o hasta la 5ta están
activas)
Recibe el carácter ‘2’ para realizar el segundo cambio para
aumentar la velocidad.
Recibe el carácter ‘3’ para realizar el tercer cambio para
aumentar a velocidad media.
Recibe el carácter ‘4’ para realizar el cuarto cambio
Recibe el carácter ‘5’ para realizar el quinto cambio para
aumentar la velocidad máxima.
Recibe el carácter ‘A’ para dar giro a la izquierda, este
depende de cómo se conecta el servomotor. Y para la acción
intermitente de luces.
Recibe el carácter ‘H’ para neutralizar el giro del servomotor.
Recibe el carácter ‘D’ para dar giro a la derecha, y para la
acción intermitente de luces.
Recibe el carácter ‘G’ para el encendido de luces delanteras
Recibe el carácter ‘g’ para el apagado de luces delanteras
Recibe el carácter ‘F’ para el encendido de luces traseras
Recibe el carácter ‘f’ para el apagado de luces traseras
Recibe el carácter ‘T’ para el encendido del Buzzer
Recibe el carácter ‘t’ para el apagado del Buzzer.
C. TRANSMISIÓN DE DATOS DESDE LABVIEW HACIA UN ARDUINO
LabVIEW trasmite su información para el control del protot ipo en el
protocolo TCP/IP disponibles en la paleta de funciones. LabVIEW 2012 o
una versión superior t iene que ser instalada en el computador que se
quiera conectar a la red.
http://automodeloip.blogspot.com/ Página 12
La información trasmit ida es la información recibida por la tarjeta
Arduino, por ejemplo:
‘HV0tgf’
Donde ‘H’ es para no girar el vehículo, ‘V’ para neutralizar marchas,
‘0’ para no tener ningún cambio accionado, ‘t’ para apagar el buzzer,
‘g’ para apagar luces delanteras y ‘f’ para mantener apagadas las
luces traseras.
Los caracteres ‘W’, ‘S’, ‘A’ y ‘D’ son accionados por las teclas del
computador
Los caracteres ‘G’, ‘g’, ‘T’ y ’t’ son accionados por las teclas F2 y F3
del computador. F2 controla los caracteres ‘G’ y ‘g’, encendido o
apagado de las luces delanteras y F3 para el encendido y apagado del
buzzer.
Los caracteres ‘0’, ‘1’, ‘2’, ‘3’, ‘4’ y ‘5’ son accionados por las teclas
‘regpág’ y ‘avpág’ en HP o ‘PGUP’ y ‘PGON’ en cualquier computador.
‘regpág’ aumenta y ‘avpág’ decrementa los cambios que se desea.
http://automodeloip.blogspot.com/ Página 13
D. RECEPCIÓN DE DATOS EN LABVIEW
Como se ha mencionado antes, LabVIEW recibe toda la información
en una sola trama de longitud estát ica, por ejemplo:
RPM:120V1:0674V2:0509
Una vez recibida toda la información se desentrama cada variables
por separado para realizar los cálculos y visualizaciones respectivas
como por ejemplo: cálculo de velocidad actual del vehículo en cm/s,
RPM, niveles de energía en las baterías de 0 a 12V y de 0% al 100% tanto
para el motor como para los circuitos.
ACONDICIONAMIENTO DE VOLTAJES PARA LECTURA DE BATERÍAS
Es importante acondicionar los niveles de voltaje para lectura en los
puertos analógicos del Arduino de 0 a 5V. En nuestro caso se
acondiciona los niveles de voltajes para baterías de 11.5 volt ios para 5
volt ios de entrada en la tarjeta.
Entonces aplicando la ecuación de división de voltaje se obtendrá el
resultado de los potenciómetros.
𝑉𝑜𝑢𝑡 =𝑅2
𝑅1 + 𝑅2
𝑉𝑖𝑛
𝑅1 =(𝑉𝑖𝑛 − 𝑉𝑜𝑢𝑡 )𝑅2
𝑉𝑜𝑢𝑡
𝑅2 = 10𝑘Ω,𝑉𝑖𝑛 = 11.5𝑉, 𝑉𝑜𝑢𝑡 = 5𝑉
𝑅1 = 13𝑘Ω
http://relojcalendariotemyhum.blogspot.com/ Página 1
En LabVIEW se realiza el proceso inverso para obtener los niveles de
voltaje reales de las baterías, es decir de 5V a 11.5 volt ios como nivel
máximo de la batería. Y adicionalmente se realiza un cálculo en
porcentaje de los niveles de energía de las baterías; como niveles
mínimos de las baterías es de 7.5V y máximos de 11.5V, es decir 7.5V =
0% y 11.5V = 100%.
50%
12
3
RV1
50k
R1310k
50%
12
3
RV2
50k
R1410k
BAT1 BAT2
1 2
BATERIASCONN-SIL2
Acondicionamiento de baterias
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
5 6 7 8 9 10 11 12
Po
r ci
en
to(%
)
Voltaje Bateria (V)
http://automodeloip.blogspot.com/ Página 2
Cuya ecuación es: 𝑦 = 25𝑥 − 187.5
CONEXIÓN DE PINES DE ENTRADAS Y SALIDAS DEL ARDUINO
La asignación de los pines de la tarjeta Arduino esa distribuida de la
siguiente manera:
1) Puerto Analógico A4 para batería 1, ya acondicionada
2) Puerto Analógico A2 para batería 2, ya acondicionada
3) Puerto digitales 0 (RX) y 1 (TX) para comunicación serial
4) Puerto D2 entrada para RPM
5) Puerto D3 salida para PWM del motor principal
6) Puerto D4 salida para control del motor en sentido horario
7) Puerto D5 salida para luces frontales
http://automodeloip.blogspot.com/ Página 3
8) Puerto D6 salida para control del motor en sentido anti- horario
9) Puerto D7 salida para control del ventilador 1
10)Puerto D8 salida para control del ventilador 2
11)Puerto D9 salida para control de luces traseras
12)Puerto D10 salida para Buzzer
13)Puerto D11salida para servomotor
14)Puerto D12 salida para luces intermitentes izquierda
15)Puerto D13 salida para luces intermitentes derecha.
http://relojcalendariotemyhum.blogspot.com/ Página 1
ESQUEMÁTICOS
Arduino UNO. (Opcional)
Nota: Si prefieres puedes hacer tu propia tarjeta Arduino en proteus.
PB0/ICP1/CLKO/PCINT014
PB1/OC1A/PCINT115
PB3/MOSI/OC2A/PCINT317
PB2/SS/OC1B/PCINT216
PD6/AIN0/OC0A/PCINT2212
PD5/T1/OC0B/PCINT2111
PD4/T0/XCK/PCINT206
PD3/INT1/OC2B/PCINT195
PD2/INT0/PCINT184
PD1/TXD/PCINT173
PD0/RXD/PCINT162
PB4/MISO/PCINT418
PB5/SCK/PCINT519
PB7/TOSC2/XTAL2/PCINT710
PB6/TOSC1/XTAL1/PCINT69
PC6/RESET/PCINT141
PC5/ADC5/SCL/PCINT1328
PC4/ADC4/SDA/PCINT1227
PC3/ADC3/PCINT1126
PC2/ADC2/PCINT1025
PC1/ADC1/PCINT924
PC0/ADC0/PCINT823
AVCC20
AREF21
PD7/AIN1/PCINT2313
ATMEGA
ATMEGA 328
12
BATERIA9V
R1
22
C2220uF
D1
1N5399V
in
C1100uF
VI1
VO3
GN
D2
78057805
D2
1N4004
C3100uF A
K
ONLED-RED
1
6
2
7
3
8
4
9
5
SERIAL (DB-9)
CONN-D9F
Q12N3906
R3
10k
R4
10k
R5
4.7k
D4
1N4148
C410uF
R610k
Q2BC547
D51N4148
R7
1k
R810k
1
2
3
4
5
6
ANALOG IN
CONN-SIL6
1
2
3
4
5
6
7
8
DIGITAL 2
CONN-SIL8
1
2
3
4
5
6
7
8
DIGITAL 1
CONN-SIL8
1
2
3
4
5
6
POWER
CONN-SIL6
XTAL1
XTAL2
X1CRYSTAL
C5
22pF
C6
22pF
XTAL2
XTAL1
R910k
1 3
2 4
RESET
SW-DPST
D0
D7
D8
D13
A0
A5
AREF
AREF
C7100nF
C8100nF
Vin
reset
reset
MISO
SCK
reset
MOSI
MIS
O
MO
SI
SC
K
1
2
3
4
SERIAL (RJ-11)
90325-0004
JUM-TXJUMPER2
JUM.RXJUMPER2
TX
RX
R101k
R111k
AK
TXLED-YELLOW
AK
RXLED-YELLOW
RJ11-TXD
RJ11-RXDDB9-RXD
DB9-TXD
TXD
RXD
RJ11-TXD
RJ11-RXD
A-RST
JUMPER
C9
100nF
AUTO-RESET
AUTO-RESET
AUTO-RESET
L1
100uH
R21k
1
2
3
IC
CONN-SIL3
1
2
3
SP
CONN-SIL3
RX
TX
DB9-RXD
DB9-TXD
TX
D
RX
DRX
TX
http://automodeloip.blogspot.com/ Página 2
Puente H con transistores para motor
12
VS112V
Q3TIP31
Q4
TIP31
Q1TIP32
Q2
TIP32
D11N4007
D21N4007
D31N4007
D41N4007
Q52N2222A
R1
1k
Q6
2N2222A
R4
1k12
MOTOR_1
12V
VS
1
VS
1
1
2
3
4
5
6
7
8
J2
CONN-SIL8
1
2
3
4
5
6
7
8
J1
CONN-SIL8
M_1_L
M_1_R
R5
100
R6100k
Q9IRF630
D6BY206
C1470n
VS
1
D5BY206
M_1_L M_1_R
PWM_1
PWM_1
1
2
3
4
5
6
ANALOG IN
CONN-SIL6
1
2
3
4
5
6
POWER
CONN-SIL6
R2
27
R3
27
http://automodeloip.blogspot.com/ Página 3
Tarjeta de reguladores de voltaje y ventiladores
12
MOTOR_212V
12
MOTOR_312V
1
2
3
4
5
6
7
8
J1
CONN-SIL8
1
2
3
4
5
6
7
8
7 6 5 4 3 2 1 0
CONN-SIL8
MOT2
MOT1
1
2
3
4
5
6
ANALOG IN
CONN-SIL6
1
2
3
4
5
6
POWER
CONN-SIL6
12
VWIZNETVRouter
C110nF
D1
1N4007
C4100nF
R1
2.2
C6100nF
VI1
VO3
GN
D2
U27805
C720nF
C5100uF
C810uF
C920nFD2
1N4733A
1
2
WIZNET
WIZNET
12
VROUTERVWiznet
C1010nF
C11100uF
C12100nF
VI1
VO3
GN
D2
U47805
C1420nF
C1510uF
C1620nF
1
2
ROUTER
ROUTER
VI1
VO3
GN
D2
U37808
C13100uF
Fuentes para wiznet
Fuente para Router
VW=VR
JUMPER
VW
iznet
VR
ou
ter
VRouter
VWiznet
C2470u
C3470u
Q1TIP31
Q2TIP31
VR
VR
VR
R2
4.7k
R3
4.7kMOT1 MOT2
C17100nF
C18100nF
Ventilador 1 Ventilador 2
http://automodeloip.blogspot.com/ Página 4
Placas de luces, Buzzer , servo, Fototransistor para PRM y acondicionamiento de voltajes para medir el nivel de voltaje en las baterías
R1220
AK
LEFT 1LED-YELLOW
AK
LEFT 2LED-YELLOW
R3330
R410k
AK
FRONT1LED-BLUE
AK
FRONT2LED-BLUE
R2220
AK
RIGHT1LED-YELLOW
AK
RIGHT2LED-YELLOW
R5330
R610k
AK
T1LED-RED
AK
T2LED-RED
R7330
R810k
Luces Frontales Luces intermitentes de Izquierda Luces intermitentes de Derecha Luces Traseras
Q1BC548
BUZ1
BUZZER
R9
1.2k
1
2
3
RPM
CONN-SIL3
R10330
R11
4.7k
Q22N3906
R121.2k
40%
12
3
RV1
1k
R1310k
40%
12
3
RV2
1k
R1410k
1
2
3
SERVO
CONN-SIL3
1 2 3 4
FRO1CONN-SIL4
1 2 3 4
TR1CONN-SIL4
F L R T
L F R RTL
Servo
Servo
Buzz
Buzz
1
2
3
4
DIGITAL
CONN-SIL4
1
2
3
ANALOG/RPM
CONN-SIL3
BAT1 BAT2RPM
RPM
BAT1
BAT21
2
3
4
PLA
CONN-SIL4
1
2
3
4
FRO2
CONN-SIL4
L
F
R
1
2
3
4
TR2
CONN-SIL4
L
T
R
L
F
T
R
1 2
BATERIASCONN-SIL2
Buzzer Acondicionamiento de baterias circuito del foto-transistor para RPM
Conexiones de molex
http://relojcalendariotemyhum.blogspot.com/ Página 1
DISEÑO DE PCB
Arduino UNO
Puente H con transistores para motor
Tarjeta de reguladores de voltaje y ventiladores
http://automodeloip.blogspot.com/ Página 2
Placas de luces, Buzzer , servo, Fototransistor para PRM y acondicionamiento de
voltajes para medir el nivel de voltaje en las baterias
http://relojcalendariotemyhum.blogspot.com/ Página 1
CODIGO EN ARDUINO
#include <Servo.h>
//------- Variable para luces intermitentes ---------//
long tiempo_anterior_luces=0;
//------- Variable para transmisión de datos ---------//
long tiempo_anterior_tx=0;
boolean estado = false;
//------- Variables para medir RPM---------//
byte rpmcount;
unsigned int rpm;
unsigned long timeold;
long timer_3=0;
//------- Variables para medir Voltajes---------//
int analogico4 = A4;
int analogico5 = A5;
//------- Variables de control---------//
int datoserial;
const int avanzar = 6;
const int control_motor = 3;
const int retroceder = 4;
const int ventilador_1 = 7;
const int ventilador_2 = 8;
const int luces_delanteras = 5;
const int luces_traceras = 9;
const int luces_intermitentes_izq = 12;
const int luces_intermitentes_der = 13;
const int buzzer = 10;
Servo volante; // PIN 11
int alta_veloc = 0; // para encender ventilador del motor
void rpm_fun() {
rpmcount++;
}
void setup() {
Serial.begin(9600);
volante.attach(11);
pinMode(control_motor, OUTPUT);
pinMode(luces_intermitentes_izq,OUTPUT);
pinMode(luces_intermitentes_der,OUTPUT);
pinMode(luces_delanteras,OUTPUT);
pinMode(luces_traceras,OUTPUT);
pinMode(avanzar,OUTPUT);
pinMode(retroceder,OUTPUT);
pinMode(ventilador_1,OUTPUT);
pinMode(ventilador_2,OUTPUT);
pinMode(buzzer ,OUTPUT);
attachInterrupt(0, rpm_fun, FALLING);
rpmcount = 0;
rpm = 0;
timeold = 0;
http://automodeloip.blogspot.com/ Página 2
}
void loop() {
//---------Lunces intermitentes--------//
long tiempo_actual_luces = millis();
long tiempo_luces = tiempo_actual_luces - tiempo_anterior_luces;
//------------ Calculo de voltajes------------//
int bateria_circuitos = analogRead(analogico4);
int bateria_motor = analogRead(analogico5);
//------------ Encendido de ventiladores ------------//
long tiempo_ventilador = millis();
if (tiempo_ventilador >= 60000) {
digitalWrite(ventilador_1,HIGH);
}
else {
digitalWrite(ventilador_1,LOW);
}
if (alta_veloc == 1) {
digitalWrite(ventilador_2,HIGH);
}
else {
digitalWrite(ventilador_2,LOW);
}
//------------ Calculo de RPM ------------//
long timer_1 = millis();
long timer_2 = timer_1 -timer_3;
if (timer_2 >= 1000){
detachInterrupt(0);
rpm = 60000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
attachInterrupt(0, rpm_fun, FALLING);
timer_3 = millis();
}
///------------ Transmisión de datos Ethernet------------//
if (estado == true){ // Transmite información cuando recibe
long tiempo_actual_tx = millis();
long tiempo_tx = tiempo_actual_tx - tiempo_anterior_tx;
if (tiempo_tx >=500){ // trasnmision de datos cada 500ms
Serial.print("RPM:");
if (rpm <= 30)Serial.print("0.0");
if ((rpm>30)&&(rpm<=99)){
Serial.print("0");
Serial.print(rpm);
}
if ((rpm>=100)&&(rpm<=999))Serial.print(rpm);
if (rpm>=1000) Serial.print("0.0");
Serial.print("V1:");
if (bateria_circuitos <=9) {
Serial.print("000");
Serial.print(bateria_circuitos);
}
else if ((bateria_circuitos >=10)&&(bateria_circuitos <=99)) {
Serial.print("00");
http://automodeloip.blogspot.com/ Página 3
Serial.print(bateria_circuitos);
}
else if ((bateria_circuitos >=100)&&(bateria_circuitos <=999)) {
Serial.print("0");
Serial.print(bateria_circuitos);
}
else Serial.print(bateria_circuitos);
Serial.print("V2:");
if (bateria_motor <=9) {
Serial.print("000");
Serial.println(bateria_motor);
}
else if ((bateria_motor >=10)&&(bateria_motor <=99)) {
Serial.print("00");
Serial.println(bateria_motor);
}
else if ((bateria_motor >=100)&&(bateria_motor <=999)) {
Serial.print("0");
Serial.println(bateria_motor);
}
else Serial.println(bateria_motor);
tiempo_anterior_tx = millis();
}
}
//------------ Recepción de datos Ethernet------------//
if(Serial.available()>0){
estado = true; // recibe información para despues transmitir
datoserial = Serial.read();
if (datoserial=='W'){ // Marcha delante
digitalWrite(avanzar, HIGH);
digitalWrite(retroceder, LOW);
}
if (datoserial=='V'){ // Marcha neutral
digitalWrite(avanzar, LOW);
digitalWrite(retroceder, LOW);
}
if (datoserial=='S'){ // Marcha retro
digitalWrite(avanzar, LOW);
digitalWrite(retroceder, HIGH);
}
if (datoserial=='0'){ // motor apagado
analogWrite(control_motor, 0);
alta_veloc = 0;
}
if (datoserial=='1'){
analogWrite(control_motor, 250); // motor a 50 de velocidad
alta_veloc = 0;
}
if (datoserial=='2'){
analogWrite(control_motor, 175);// motor a 100 de velocidad
alta_veloc = 0;
}
if (datoserial=='3'){
analogWrite(control_motor, 200);// motor a 150 de velocidad
alta_veloc = 1;
}
if (datoserial=='4'){
analogWrite(control_motor, 225);// motor a 200 de velocidad
alta_veloc= 1;
http://automodeloip.blogspot.com/ Página 4
}
if (datoserial=='5'){
analogWrite(control_motor, 255);// motor a maxima velicidad
alta_veloc = 1;
}
if (datoserial=='A'){ //Dirección al giro izquierdo del vehículo
volante.write(115);
digitalWrite(luces_intermitentes_der, LOW);
if (tiempo_luces <= 500)
digitalWrite(luces_intermitentes_izq, HIGH);
if ((tiempo_luces >= 501)&&(tiempo_luces <
1000))digitalWrite(luces_intermitentes_izq, LOW);
if (tiempo_luces >= 1001) tiempo_anterior_luces = millis();
}
if (datoserial=='H'){ // Dirección neutral del vehículo
volante.write(90);
digitalWrite(luces_intermitentes_der, LOW); // intermitentes
apagadas
digitalWrite(luces_intermitentes_izq, LOW);
}
if (datoserial=='D'){ //Dirección al giro derecha del vehículo
volante.write(65);
digitalWrite(luces_intermitentes_izq, LOW);
if (tiempo_luces <= 500)
digitalWrite(luces_intermitentes_der, HIGH);
if ((tiempo_luces >= 501)&&(tiempo_luces <
1000))digitalWrite(luces_intermitentes_der, LOW);
if (tiempo_luces >= 1001) tiempo_anterior_luces = millis();
}
if (datoserial=='G'){ // encendido de Luces delanteras
digitalWrite(luces_delanteras, HIGH);
}
if (datoserial=='g'){ // apagado de Luces delanteras
digitalWrite(luces_delanteras, LOW);
}
if (datoserial=='F'){ // encendido de Luces traceras
digitalWrite(luces_traceras, HIGH);
}
if (datoserial=='f'){ // apagado de Luces traceras
digitalWrite(luces_traceras, LOW);
}
if (datoserial=='T'){ // encendido de Buzer
digitalWrite(buzzer, HIGH);
}
if (datoserial=='t'){ // apagado de buzer
digitalWrite(buzzer, LOW);
}
}
}
http://relojcalendariotemyhum.blogspot.com/ Página 1
CODIGO EN LABVIEW
Panel Frontal
Diagrama de bloques
http://automodeloip.blogspot.com/ Página 21
REFERENCIAS
https://sites.google.com/site/controltechnologyperu/home/Tutoriales/tutorial-labview/comunicacion-por-tcp
http://www.rcelectrico.es/
http://www.automodelismoparatodos.blogspot.com/
Si deseas descargar el proyecto completa visita el siguiente blog: http://automodeloip.blogspot.com/