ESP8266 ARDUINO CON WIFI



CARACTERÍSTICAS DEL ESP8266


TB6612FNG Sketch


// Motor A lado derecho

const uint8_t PWM_Derecho = 3;          // ENB - Velocidad PWM
const uint8_t motorDerechoAvanza = 5;   // IN3 - Motor sentido avanza
const uint8_t motorDerechoRetrocede = 4;// IN4 - Motor sentido retrocede

// Motor B lado izquierdo

const uint8_t PWM_Izquierda = 9;
const uint8_t motorIzquierdoAvanza = 7;
const uint8_t motorIzquierdoRetrocede = 6;

byte velocidad = 200;


// Funciones

void avanzar() {
digitalWrite(motorIzquierdoAvanza, HIGH);   // El sentido del motor avanza
digitalWrite(motorIzquierdoRetrocede, LOW); // El sentido del motor retrocede
digitalWrite(motorDerechoAvanza, HIGH);
digitalWrite(motorDerechoRetrocede, LOW);
analogWrite(PWM_Izquierda, velocidad);      // Velocidad PWM
analogWrite(PWM_Derecho, velocidad);
}

void retroceder() {
digitalWrite(motorIzquierdoAvanza, LOW);
digitalWrite(motorIzquierdoRetrocede, HIGH);
digitalWrite(motorDerechoAvanza, LOW);
digitalWrite(motorDerechoRetrocede, HIGH);
analogWrite(PWM_Izquierda, velocidad);
analogWrite(PWM_Derecho, velocidad);
}

void girarDerecha() {
digitalWrite(motorIzquierdoAvanza, HIGH);
digitalWrite(motorIzquierdoRetrocede, LOW);
digitalWrite(motorDerechoAvanza, LOW);
digitalWrite(motorDerechoRetrocede, HIGH);
analogWrite(PWM_Izquierda, velocidad);
analogWrite(PWM_Derecho, velocidad);
}

void girarIzquierda() {
digitalWrite(motorIzquierdoAvanza, LOW);
digitalWrite(motorIzquierdoRetrocede, HIGH);
digitalWrite(motorDerechoAvanza, HIGH);
digitalWrite(motorDerechoRetrocede, LOW);
analogWrite(PWM_Izquierda, velocidad);
analogWrite(PWM_Derecho, velocidad);
}

void parar() {
digitalWrite(motorIzquierdoAvanza, LOW);
digitalWrite(motorIzquierdoRetrocede, LOW);
digitalWrite(motorDerechoAvanza, LOW);
digitalWrite(motorDerechoRetrocede, LOW);
analogWrite(PWM_Izquierda, 0);
analogWrite(PWM_Derecho, 0);
}

void setup() {
// Configuramos todos los pines del driver (TB6612FNG) del motor como salida

pinMode(PWM_Izquierda, OUTPUT);
pinMode(motorIzquierdoAvanza, OUTPUT);
pinMode(motorIzquierdoRetrocede, OUTPUT);
pinMode(PWM_Derecho, OUTPUT);
pinMode(motorDerechoAvanza, OUTPUT);
pinMode(motorDerechoRetrocede, OUTPUT);
}

void loop() {

// Llamamos a las funciones de movimiento
parar();          // Para
delay(1000);      // Durante 1 segundo
avanzar();        // Avanza
delay(2000);      // Durante 2 segundos
retroceder();     // Retocede
delay(2000);      // Durante 2 segundos
girarIzquierda(); // Gira a la izquierda
delay(2000);      // Durante 2 segundos
girarDerecha();   // Gira a la derecha
delay(2000);      // Durante 2 segundos
}

1 - Asignamos los pines. El driver tiene 2 digitales que nos indican el sentido de giro y uno analógico PWM que es la velocidad de 0 a 255.

2 - En este caso declaramos las funciones antes del setup(), indicando el sentido de giro del motor con LOW y HIGH, y la velocidad con un variable.

3 - Configuramos los pines como salida.

4 - En el loop() llamamos a las funciones.


Un Botón

Código


Botón Sketch 1

Este es un ejemplo de Massimo Banzi Co-Fundador de Arduino. En el que explica la importancia del código.

En este primer Sketch aprendemos a encender un led manteniendo presionado el botón.


#define LedPin 13     // Asignamos el LED al pin
#define BotonPin 7    // Asignamos el botón al pin 7

int estado = 0;       // estado 0 apagado, 1 encendido 

void setup() {

pinMode(LedPin, OUTPUT);   // El LED es de salida
pinMode(BotonPin, INPUT); // El BOTÓN es de entrada
}

void loop(){

estado = digitalRead(BotonPin); // Almacena el estado del BOTÓN
                              // Presionado seria HIGH
                              // Liberado seria LOW
if (estado == HIGH) {
  digitalWrite(LedPin, HIGH);      // Enciende el LED
  }else {
    digitalWrite(LedPin, LOW);      // Apaga el LED
}
}

Botón Sketch 2

Realmente encender un led teniendo que presionar un botón no es muy útil.

Veamos como encenderlo pulsando, sin mantener presionado el botón.

Para esto creamos una nueva variable y usamos un poco de matemáticas sencilla, no es fácil de entender pero se usa mucho en programación, para comparar valores booleanos le restamos el boleano anterior, a si conseguimos un estado nuevo ya que al restar (1 - 0) = 1 y (1 - 1) = 0.


// Enciende el led despues de presionar el botón
// Apaga el led al presionar otra vez el botón
#define LedPin 13     // Asignamos el LED al pin
#define BotonPin 7    // Asignamos el BOTÓN al pin 7

int valor = 0;        // Valor del BOTÓN
int estado = 0;       // 0 es apagado, 1 encendido 

void setup() {

pinMode(LedPin, OUTPUT);   // El LED es de salida
pinMode(BotonPin, INPUT);  // El BOTÓN es de entrada
}

void loop(){
valor = digitalRead(BotonPin); // Lee el valor del Botón

// En este caso verificamos que es una pulsación limpia

if (valor == HIGH){
  estado = 1 - estado;
}
if (estado == 1) {
  digitalWrite(LedPin, HIGH); // turn LED ON
}     else {
      digitalWrite(LedPin, LOW);
}
}

Botón Sketch 3


Para evitar que al pulsar con vibración nos de una mala lectura podemos realizar una comprobación verificando el estado anterior con una nueva variable.

// Enciende el led despues de presionar el botón
// Apaga el led al presionar otra vez el botón
#define LedPin 13     // Asignamos el LED al pin
#define BotonPin 7    // Asignamos el BOTÓN al pin 7

int valor = 0;        // Valor del BOTÓN
int valorAnterior = 0;
int estado = 0;       // 0 es apagado, 1 encendido 

void setup() {

pinMode(LedPin, OUTPUT);   // El LED es de salida
pinMode(BotonPin, INPUT);  // El BOTÓN es de entrada
}

void loop(){
valor = digitalRead(BotonPin); // Lee el valor del Botón

// En este caso verificamos que es una pulsación limpia

if ((valor == HIGH) && (valorAnterior == LOW)){
estado = 1 - estado;
delay(10);
}
valorAnterior = valor;          // val is now old, let's store it
if (estado == 1) {
digitalWrite(LedPin, HIGH); // turn LED ON
} else {
digitalWrite(LedPin, LOW);
}
}

Botón Sketch 4


Todavía podemos mejorar el código añadiendo un pequeño tiempo de espera.

// Enciende el led despues de presionar el botón
// Apaga el led al presionar otra vez el botón
#define LedPin 13     // Asignamos el LED al pin
#define BotonPin 7    // Asignamos el BOTÓN al pin 7

int valor = 0;        // Valor del BOTÓN
int valorAnterior = 0;
int estado = 0;       // 0 es apagado, 1 encendido 

void setup() {

pinMode(LedPin, OUTPUT);   // El LED es de salida
pinMode(BotonPin, INPUT);  // El BOTÓN es de entrada
}

void loop(){
valor = digitalRead(BotonPin); // Lee el valor del Botón

// En este caso verificamos que es una pulsación limpia

if ((valor == HIGH) && (valorAnterior == LOW)){
estado = 1 - estado;
delay(10);
}
valorAnterior = valor;          // val is now old, let's store it
if (estado == 1) {
digitalWrite(LedPin, HIGH); // turn LED ON
} else {
digitalWrite(LedPin, LOW);
}
}