Robótica IES Lucas Mallada_

Apuntes del curso en el enlace de abajo, por si no recordáis algo.

Acceder a los apuntes arrow_forward

Acceder a la sesión del 07/05

En esta sesión utilizamos el sensor de distancia por ultrasonidos HC-SR04.

¡Vamos allá! arrow_forward

Acceder a la sesión del 26/04

En esa sesión propusimos los siguientes proyectos:

  • Linterna electrónica
  • "Theremin", música que no se toca
  • Reloj de arena digital
  • Cruce de semáforos
  • Dado de la suerte electrónico
  • Música con Arduino
Ir a la sesión arrow_forward

Música con los Buzzers

El 30 de abril estuvimos utilizando los buzzers piezoeléctricos como unos altavoces con los que podíamos hacer música.
Primero hicimos que tocara 2 notas, cada una durante 1 o 2 segundos, y después intentamos hacer algunas canciones.
Algunos ejemplos fáciles que se suelen hacer son la canción de Piratas del Caribe o la de Star Wars, aunque se puede "traducir" cualquier partitura para ponerla en Arduino.

Acceder a un tutorial arrow_forward

Utilizando los Servomotores

El viernes 3 de mayo aprendimos a usar los Servos, unos motores especiales que, en la mayoría de los casos, pueden girar en un ángulo de 180 grados.
Tienen un funcionamiento distinto al de los motores normales, y en Arduino vienen incluidas unas funciones que nos ayudan a usarlo: miServo.attach(PIN); y miServo.write(ÁNGULO);
Gracias a estas funciones, no necesitamos utilizar ninguna otra como pinMode o analogWrite, ya que el Arduino se encarga de hacer los cálculos para llevar al motor al ángulo que nosotros pongamos.

Ver el código arrow_forward

¿Cómo montamos el circuito?

¿Y el código?

Recordad que este código es el que hicimos el martes, que estaba basado en el del sensor ultrasonidos. Lo hemos reorganizado un poco.

Este es el código completo:


int recibePin = 10;     // Echo Pin
int emitePin = 11;      // Trigger Pin
int rMotorPin1 = 2;     // DERECHO SENTIDO 1 (PINES DE LOS MOTORES)
int rMotorPin2 = 3;     // DERECHO SENTIDO 2
int lMotorPin1 = 4;     // IZQUIERDO SENTIDO 1
int lMotorPin2 = 5;     // IZQUIERDO SENTIDO 2

float distancia;  //Duración usada para calcular la distancia

void setup() {
    // COMUNICAR CON EL ORDENADOR
    Serial.begin(9600);
    // SENSOR DE DISTANCIA
    pinMode(emitePin, OUTPUT);
    pinMode(recibePin, INPUT);

    // TODOS LOS MOTORES COMO OUTPUT
    pinMode(rMotorPin1, OUTPUT);
    pinMode(rMotorPin2, OUTPUT);
    pinMode(lMotorPin1, OUTPUT);
    pinMode(lMotorPin2, OUTPUT);
}

void loop() {
    distancia = medirDistancia();       // ABAJO HEMOS CREADO UNA "FUNCIÓN", COMO UNA CARPETA CON EL CÓDIGO
    Serial.print(distancia); Serial.println(" centimetros");

    if(distancia < 5){      // SI ESTÁ A MENOS DE 5 CM
        retroceder();
        delay(300);
        girarIzquierda();
        delay(300);
    }else{
        avanzar();
        delay(50);
    }

}

float medirDistancia(){
    digitalWrite(emitePin, LOW);
    delayMicroseconds(2);

    digitalWrite(emitePin, HIGH);
    delayMicroseconds(10);

    digitalWrite(emitePin, LOW);
    long duracion = pulseIn(recibePin, HIGH);

    //Calcular la distancia (en cm) basada en la velocidad del sonido
    float dist = duracion * (340.0 / 10000.0) / 2.0;       // DIVIDIMOS 340 / 10000 AL PASAR DE METROS/SEGUNDO A CM/MICROSEGUNDO (340 * 100 / 1000000)
                                                        // Y LUEGO ENTRE 2 PARA PASAR DEL RECORRIDO DE IDA Y VUELTA A SOLO LA IDA
    return dist;
}

void avanzar(){
    digitalWrite(rMotorPin1, HIGH);     // AVANZAR HACIA DELANTE                            ↑     ↑
    digitalWrite(rMotorPin2, LOW);      // ENCENDEMOS EL MISMO SENTIDO EN LOS DOS MOTORES   |     |
    digitalWrite(lMotorPin1, HIGH);     // GIRARÁN DE LA MISMA FORMA                        |     |
    digitalWrite(lMotorPin2, LOW);      // TAMBIÉN APAGAMOS LOS SENTIDOS OPUESTOS ("LA MANGUERA")   
}

void retroceder(){
    digitalWrite(rMotorPin1, LOW);      // RETROCEDER                                       |     |
    digitalWrite(rMotorPin2, HIGH);     // ENCENDEMOS EL MISMO SENTIDO EN LOS DOS MOTORES   |     |
    digitalWrite(lMotorPin1, LOW);      // GIRARÁN DE LA MISMA FORMA                        ↓     ↓
    digitalWrite(lMotorPin2, HIGH);     // TAMBIÉN APAGAMOS LOS SENTIDOS OPUESTOS ("LA MANGUERA")   
}

void girarIzquierda(){
    digitalWrite(rMotorPin1, HIGH);     // GIRAR HACIA IZQUIERDA        |     ↑
    digitalWrite(rMotorPin2, LOW);      // EL DERECHO HACIA DELANTE     |     |
    digitalWrite(lMotorPin1, LOW);      // EL IZQUIERDO HACIA ATRÁS     ↓     |
    digitalWrite(lMotorPin2, HIGH);
}

void girarDerecha(){
    digitalWrite(rMotorPin1, LOW);       // GIRAR HACIA IZQUIERDA        ↑     |
    digitalWrite(rMotorPin2, HIGH);      // EL DERECHO HACIA ATRÁS       |     |
    digitalWrite(lMotorPin1, HIGH);      // EL IZQUIERDO HACIA DELANTE   |     ↓
    digitalWrite(lMotorPin2, LOW);
}
                    

Sube tu código de hoy