Código 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; } 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(); } ///------------ Trasnmisió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"); 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; } 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); } } }
Código en LabVIEW 2012


Hola amigo, Exelente proyecto e interesante pero tengo una duda, quiero hacerlo con el modulo ethernet shield w5100, la programacion en arduino seria sigual?
ResponderEliminar