Carro explorador (parte 2)

 A continuación se presenta la segunda parte del carro explorador.

En esta segunda parte se ha colocado un servo motor que se controla con el slider del programa, también se ha puesto un par de led's que encienden por medio de comando de vos.


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;

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);
  
  myservo.attach(4);//Asignasión de pin al servo

}

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

void loop() {

  if (Serial.available() > 0) {
    dato = Serial.read();
  }
  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);
}



Figura 1. Conexiones de la 1era + 2da parte

Screen 2:


Importante cambiar estos dos valores marcados como importante en la figura 1, poner como máximo "20" y mínimo "0", ya que en el programa de arduino en la función "servo" se multiplica por 9 ya que el máximo valor del slider es 20 y 20*9=180 que es el valor máximo del servo motor.


Figura 1. Interfaz actualizada screen 2

 A la parte 1 del programa se le agregan los  bloques mostrados en la figura 2.

Figura 2. Bloques nuevos de la screen 2

Video del funcionamiento:






Comentarios

Entradas populares