top of page

Explorer car + app inventor + arduino+bluetooth(parte3)Final

En esta tercera parte se han agregado 2 sensores, sensor ultrasónico (SDM-IO) y el sensor de temperatura(TMP 36gz), lo cual sus datos se mostrarán en la pantalla izquierda de la aplicación en el teléfono, tambien una luz roja que se enciende solo cuando la temperatura supera los 45°C.

Se ha eliminado la opción de tomar fotografías ya que no tendría sentido porque el carro se maneja a la vista del operador.

Código del arduino:

#include <Servo.h>

#define TxD 1 //definir pin TxD #define RxD 0 //definir pin RxD

//enable int STBY = 26; //standby

//Motores derechos int PWM1 = 2; //velocidad motor 1, ruedas derechas int IN11 = 22; //Dirección int IN21 = 23; //Dirección

//Motores izquierdos int PWM2 = 3; //velocidad motor 2, ruedas izquierdas int IN12 = 27; //Dirección int IN22 = 30; //Dirección

//otros int dato = 0; // Asignación de variable, letra leía por el bluetooth Servo myservo;//Asignación de nombre al servo int var = 90;//Variable posición servo int luz = 31;//Luz frontal int sensorPin = 0;//pin del sensor de temperatura

//Datos del sensor ultrasonico int pin = 34; unsigned long time; unsigned long sizeofpulse; float distance; ///////////////////////////////

int luzsen = 35;//luz indica sen. temp. alta

//datos para sustituir el delay de la luz del sensor de temperatura int ledState2 = HIGH; // Inicialmente esta apagado unsigned long previousMillis2 = 0; //Sera el que diga en que ms fue la ultima vez que se encendio o apago long OnTime2 = 1000; //Tiempo que el led rojo permanecera encendido long OffTime2 = 750; //Tiempo que el led rojo permanecera apagado ////////////////////////////////////////////////////

//datos para sustituir el delay del sensor de temperatura int ledState1 = HIGH; unsigned long previousMillis1 = 0; long OnTime1 = 500; long OffTime1 = 500; ////////////////////////////////////////////////

//datos para sustituir el delay del sensor ultrasonico int estado3 = HIGH; unsigned long previousMillis3 = 0; long OnTime3 = 1000; long OffTime3 = 1000; ////////////////////////////////////////////////////

void setup() {

Serial.begin(9600);

pinMode(STBY, OUTPUT);

pinMode(PWM1, OUTPUT); pinMode(IN11, OUTPUT); pinMode(IN21, OUTPUT);

pinMode(PWM2, OUTPUT); pinMode(IN12, OUTPUT); pinMode(IN22, OUTPUT);

pinMode(luz, OUTPUT); pinMode(luzsen, OUTPUT);

myservo.attach(4);//Asignasión de pin al servo

}

//****************************************************************ciclo principal*********************************************************************

void loop() {

if (Serial.available() > 0) { dato = Serial.read(); } sen(); if (isalpha(dato))//condición para saber si el dato es alfabético { if (dato == 'a') //al recibir la letra "a" ejecute lo siguiente, carro hacia delante { adelante(); //llama la función } if (dato == 'b') //al recibir la letra "b" ejecute lo siguiente, el carro va a la derecha { derecha(); //llama la función } if (dato == 'c') //al recibir la letra "c" ejecute lo siguiente, el carro va a la izquierda { izquierda(); //llama la función } if (dato == 'd') { digitalWrite(luz, LOW); } if (dato == 'e') { digitalWrite(luz, HIGH); } if (dato == 'g') //al recibir la letra "g" ejecute lo siguiente, el carro se detiene { detenerse(); //llama la función } if (dato == 'k') //al recibir la letra "k" ejecute lo siguiente, carro hacia atras { atras(); //llama la función } } else { servo(); } }

//*****************************************************Funciones*************************************************************************

void adelante() { digitalWrite(STBY, HIGH); analogWrite(PWM1, 255); analogWrite(PWM2, 255); digitalWrite(IN11, HIGH); digitalWrite(IN21, LOW); digitalWrite(IN12, LOW); digitalWrite(IN22, HIGH); }

void atras() { digitalWrite(STBY, HIGH); analogWrite(PWM1, 255); analogWrite(PWM2, 255); digitalWrite(IN11, LOW); digitalWrite(IN21, HIGH); digitalWrite(IN12, HIGH); digitalWrite(IN22, LOW); }

void derecha() { digitalWrite(STBY, HIGH); analogWrite(PWM1, 255); analogWrite(PWM2, 255); digitalWrite(IN11, LOW); digitalWrite(IN21, HIGH); digitalWrite(IN12, LOW); digitalWrite(IN22, HIGH); }

void izquierda() { digitalWrite(STBY, HIGH); analogWrite(PWM1, 255); analogWrite(PWM2, 255); digitalWrite(IN11, HIGH); digitalWrite(IN21, LOW); digitalWrite(IN12, HIGH); digitalWrite(IN22, LOW); }

void detenerse() { digitalWrite(STBY, LOW); }

void servo() { if (dato > 0) { var = dato * 9; } myservo.write(var); }

void sen() { unsigned long currentMillis = millis(); if ((ledState1 == LOW) && (currentMillis - previousMillis1 >= OnTime1)) { ledState1 = HIGH; // Cambia el valor de la variable para luego escribirla previousMillis1 = currentMillis; // "La ultima vez fue AHORA" int reading = analogRead(sensorPin); float voltage = reading * 5.0; voltage /= 1024.0; float temperatureC = (voltage - 0.5) * 100 ; Serial.print("Temperatura: "); Serial.print(temperatureC); Serial.println("°C"); if (temperatureC >= 45) { if ((ledState2 == HIGH) && (currentMillis - previousMillis2 >= OnTime2)) { ledState2 = LOW; previousMillis2 = currentMillis; digitalWrite(luzsen, ledState2); } else if ((ledState2 == LOW) && (currentMillis - previousMillis2 >= OffTime2)) { ledState2 = HIGH; // Cambia el valor de la variable para luego escribirla previousMillis2 = currentMillis; // "La ultima vez fue AHORA" digitalWrite(luzsen, ledState2); // Hace efectivo el cambio en el LED } } } else if ((ledState1 == HIGH) && (currentMillis - previousMillis1 >= OffTime1)) { ledState1 = LOW; previousMillis1 = currentMillis; }

if ((estado3 == HIGH) && (currentMillis - previousMillis3 >= OnTime3)) { estado3 = LOW; previousMillis3 = currentMillis; pinMode(pin, OUTPUT); digitalWrite(pin, LOW); delayMicroseconds(25); digitalWrite(pin, HIGH); time = micros(); pinMode(pin, INPUT); sizeofpulse = pulseIn(pin, LOW, 18000); time = micros() - time - sizeofpulse; distance = (time * 340.29 / 2 / 10000) - 3; Serial.print(" Distancia: "); Serial.print(distance); Serial.println(" cm"); } else if ((estado3 == LOW) && (currentMillis - previousMillis3 >= OffTime3)) { estado3 = HIGH; previousMillis3 = currentMillis; } }

 

Diagrama de la primara + segunda y tercera parte:

Al final quedan 3 baterias, en este caso caso 2 de 9v para la alimentación de los motores y el arduino y otra de 3.7v para el servo motor.

 

Imágen del app inventor:

Video del funcionamiento:

Entradas destacadas
Vuelve pronto
Una vez que se publiquen entradas, las verás aquí.
Entradas recientes
Archivo
Buscar por tags
No hay etiquetas aún.
Síguenos
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page