Magnetómetro

¿QUÉ ES UN MAGNETÓMETRO?

Un magnetómetro sirve para cuantificar en fuerza o dirección de la fuerza electromagnética de la Tierra.

Hay distintos tipos de magnetómetro que son:

  1. Los magnetómetros escalares que miden la fuerza magnética de en las que están sometidos.
  2. Los magnetómetros vectoriales que tienen la capacidad de medir  el componente del campo magnético en una dirección particular, en este caso el norte magnético de la Tierra.

CÓMO MONTARLO. 

El montaje de esta brújula magnética  es muy sencillo solo tienes que alimentarlo con su propia toma de tierra y la conexión 5V, también hay conexiones de programación que son la SDA que va al  pin A4 y la conexión SCL que va al pin A5.arduino-brujula-hmc5883-gy273-esquema

arduino-brujula-hmc5883-gy273-conexion

PROGRAMACIÓN.

//GND – GND

//VCC – VCC

//SDA – Pin A4

//SCL – Pin A5

#include «Wire.h»

#include «I2Cdev.h»

#include «HMC5883L.h»

HMC5883L compass;

int16_t mx, my, mz;

void setup()

{

    Serial.begin(9600);

    Wire.begin();

    compass.initialize();

}

void loop()

{

    //Obtener componentes del campo magnético

    compass.getHeading(&mx, &my, &mz);

    Serial.print(«mx:»);

    Serial.print(mx);

    Serial.print(«tmy:»);

    Serial.print(my);

    Serial.print(«tmz:»);

    Serial.println(mz);

    delay(100);

}

//GND – GND

//VCC – VCC

//SDA – Pin A4

//SCL – Pin A5

#include «Wire.h»

#include «I2Cdev.h»

#include «HMC5883L.h»

HMC5883L compass;

int16_t mx, my, mz;

//declinacion en grados en tu posición

const float declinacion = 0.12;

void setup()

{

    Serial.begin(9600);

    Wire.begin();

    compass .initialize();

}

void loop() {

    //Obtener componentes del campo magnético

    compass .getHeading(&mx, &my, &mz);

    //Calcular ángulo el ángulo del eje X respecto al norte

    float angulo = atan2(my, mx);

    angulo = angulo * RAD_TO_DEG;

    angulo = angulo – declinacion;

    if(angulo < 0) angulo = angulo + 360;

    Serial.print(«N:»);

    Serial.println(angulo,0);  

}

SENSOR DE ULTRASONIDOS

DEFINICIÓN:
Un sensor de ultrasonidos es un detector de proximidad que trabaja libre de roces mecánicos y que detectan objetos a distancias desde centímetros hasta algunos metros, este funciona enviando una onda de sonido y mide el tiempo que tarda en llegarle esa misma onda de sonido, y que haciendo algunas cuentas lo transforma a centímetros.metros, este funciona enviando una onda de sonido y mide el tiempo que tarda en llegarle esa misma onda de sonido, y que haciendo algunas cuentas lo transforma a centímetros.

 – ESTUDIO COMERCIAL:

Actualmente este sensor ronda con un precio en el mercado de 1€. El más barato que he visto ha sido en Aliexpress, donde su precio es de 0,58€.El más barato que he visto ha sido en Aliexpress, donde su precio es de 0,58€. https://es.aliexpress.com/item/690139020.html

FUNCIONAMIENTO:

El sensor se basa simplemente en medir el tiempo entre el envío y la recepción de un pulso sonoro. Sabemos que la velocidad del sonido es 343 m/s en condiciones de temperatura 20 ºC, 50% de humedad, presión atmosférica a nivel del mar. Transformando unidades resulta

343 \frac{m}{s} \cdot{} 100 \frac{cm}{m} \cdot{} \frac{1}{1000000} \frac{s}{\mu s} = \frac{1}{29.2} \frac{cm}{\mu s}

343m/s·100cm/m

Es decir, el sonido tarda 29,2 microsegundos en recorrer un centímetro. Por tanto, podemos obtener la distancia a partir del tiempo entre la emisión y recepción del pulso mediante la siguiente ecuación.

Distancia(cm)= \frac {Tiempo(\mu s)}{29.2 \cdot 2}

El motivo de dividir por dos el tiempo (además de la velocidad del sonido en las unidades apropiadas, que hemos calculado antes) es porque hemos medido el tiempo que tarda el pulso en ir y volver, por lo que la distancia recorrida por el pulso es el doble de la que queremos medir.

sensor-ultrasonico-explicacion
ESQUEMA SOBRE EL FUNCIONAMIENTO DEL SENSOR ULTRASONIDOS

SISTEMA ELÉCTRICO:

  • Directamente a los pines
  • EchoPin = 2;
  • TriggerPin = 4;

  • Montaje en protoboard

arduino-ultrasonidos-montaje

NUESTRO CÓDIGO:

//___________________   AQUI EMPIEZA EL PROGRAMA DEL ROBOT   ______________________
{
  //  avanza(100);                //avanza 100cm
  //  para(3);                    //para 3segundos
  //  retrocede(100);             //retrocede 100cm
  //  para(3);
  //  izquierda(90);              //Gira izda 90º
  //  para(3);
  //  derecha(90);
  para(3);
  siguelinea (600);            //sigue linea 500cm
  if (estado == 1) {
    estado = 0;
    obstaculo();             // hace esto si paró por obstáculo
  }
  if (estado == 2) {
    estado = 0;
    lineaNegra();             // hace esto si paró por linea negra
  }
  para(5);
}

//___________________   AQUI TERMINA EL PROGRAMA DEL ROBOT   ______________________

void avanza(int D)
{
  digitalWrite(pinIN1, HIGH);
  digitalWrite(pinIN2, LOW);
  analogWrite(pinENA, speedAI);
  digitalWrite(pinIN3, HIGH);
  digitalWrite(pinIN4, LOW);
  analogWrite(pinENB, speedAD);
  veMidiendo(millis() + (D * mscmA));    // mide hasta T

}
void veMidiendo (int T) {
  while (T > millis()) {
    pong = ping();
    if (pong < distSeg) {
      estado = 1;
      break;             // si distancia menor a la de seguridad termina
    }
  }
  //   Serial.println(pong);

int ping()
{
  long duration, distanceCm;
  digitalWrite(TriggerPin, LOW);  //para generar un pulso limpio ponemos a LOW 4us
  delayMicroseconds(4);
  digitalWrite(TriggerPin, HIGH);  //generamos Trigger (disparo) de 10us
  delayMicroseconds(10);
  digitalWrite(TriggerPin, LOW);
  duration = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos
  //  distanceCm = duration * 10 / 292 / 2;  //convertimos a distancia, en cm
  return duration;
}

      estado = 1;
      break;             // si distancia menor a la de seguridad termina
    }
    //    Serial.println(pong); // Serial.print('\t'); // para depuración

    uint16_t position = qtr.readLineBlack(sensorValues);     // 0=Izda a 5000=Dcha
   void obstaculo() {
  mueveServo();
}

Sensor de humedad del suelo

Este sensor tiene la capacidad de medir la humedad del suelo. Aplicando una pequeña tensión entre los terminales del módulo YL-69 hace pasar una corriente que depende básicamente de la resistencia que se genera en el suelo y ésta depende mucho de la
humedad. Por lo tanto al aumentar la humedad la corriente crece y al bajar la corriente disminuye.

void setup() 
{
  Serial.begin(9600);
  pinMode(A0, INPUT);
  

}

void loop()
{
  int SensorValue = analogRead(A0); // coge el valor de A0 y lo pone en Sensorvalue
  
  Serial.println(SensorValue);
  
  delay(500);

}

Sensor de humedad y temperatura

El sensor de temperatura y humedad sirve, como su propio nombre indica, para medir la humedad y temperatura del ambiente. El nuestro es el modelo DHT11 con PCB.
El sensor lo hemos conectado a un Arduino Nano con tres cables:
Positivo – 5V
Out – D2
Negativo – Toma de tierra (GND)

Esquema de conexión:

// Incluimos librería
#include <DHT.h>
 
// Definimos el pin digital donde se conecta el sensor
#define DHTPIN 2
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11
 
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);
 
void setup() {
  // Inicializamos comunicación serie
  Serial.begin(9600);
 
  // Comenzamos el sensor DHT
  dht.begin();
 
}
 
void loop() {
    // Esperamos 5 segundos entre medidas
  delay(5000);
 
  // Leemos la humedad relativa
  float h = dht.readHumidity();
  // Leemos la temperatura en grados centígrados (por defecto)
  float t = dht.readTemperature();
  // Leemos la temperatura en grados Fahreheit
  float f = dht.readTemperature(true);
 
  // Comprobamos si ha habido algún error en la lectura
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Error obteniendo los datos del sensor DHT11");
    return;
  }
 
  // Calcular el índice de calor en Fahreheit
  float hif = dht.computeHeatIndex(f, h);
  // Calcular el índice de calor en grados centígrados
  float hic = dht.computeHeatIndex(t, h, false);
 
  Serial.print("Humedad: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Índice de calor: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
 
}

Huerto I

Estado actual del huerto escolar del I.E.S. Pedro de Valdivia.

Laboratorio de mecatrónica

Por fin empezamos a ver lo que el curso que viene convertiremos en nuestro espacio de trabajo principal. Todavía habrá que sacar trastos, limpiar, planificar el espacio, instalar equipos… Estas serán nuestras próximas tareas.

Impresión 3D. Coche solar

Iván ha diseñado el chasis de su vehículo solar para fabricarlo en la impresora 3D, aunque el diseño era bueno, ajustamos los parametros de impresión para conseguir la máxima velocidad de trabajo y esto hace que los acabados no sean los mejores, la superficie de la pieza quedo un poco irregular y la adherencia entre capas resultó un poco débil.
Iván también explico a sus compañeros el proceso de diseño de las distintas partes del chasis.