martes, 28 de abril de 2020

Practica 3.05 Sensor de inclinación

Hola a todos y a todas, hoy voy a enseñaros cómo funciona un sensor de inclinación.

Este sensor permite detectar si hay un cambio en la posición de un objeto. Normalmente un sólo sensor no me permite hacer muchas cosas, pero si combino varios sensores de inclinación puedo detectar con detalle la inclinación de un objeto e incluso medir ángulos.

Este tipo de sensores funciona con unas pequeñas bolas metálicas en su interior o una pequeña gota de mercurio, que al moverse en función de la inclinación, abre o o cierra el contacto.

Voy ha hacer un proyecto en Tinkercad utilizando dos de estos sensores, uno de ellos representa la inclinación hacia la izquierda y otro hacia la derecha. Al inclinarse hacia la izquierda, se enciende un LED verde, y hacia la derecha uno rojo. Se puede regular la inclinación de los sensores desde Tinkercad. Si cada uno de los sensores apunta hacia un lado diferente, no se enciende ningún LED.


Para empezar, he dispuesto los componentes de esta manera:




Estos son los bloques de código:



Primero, he creado dos variables; izquierda y derecha, a las que he asignado el valor de los pines 4 y 2.
Como solo puede estar inclinado hacia la izquierda o hacia la derecha, y en Tinkercad existe la opción de apuntar los dos sensores hacia lados diferentes, he tenido que ordenar que, cuando apuntan hacia lados diferentes (las variables obtienen el mismo valor), se apaguen los LEDs.
Si eso no ocurre, llegamos a la parte en la que solo hay derecha o izquierda. Si el sensor correspondiente a derecha se inclina, deja de emitir señal, y, gracias a la forma en la que he programado esta parte, se enciende el LED rojo, si no, no se enciende. 
Para la parte de izquierda, la programación es prácticamente la misma.


Este es el código de programación:



int izquierda = 0;

int derecha = 0;

void setup()
{
  pinMode(4, INPUT);
  pinMode(2, INPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop()
{
  derecha = digitalRead(4);
  izquierda = digitalRead(2);
  if (izquierda == derecha) {
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
  } else {
    if (derecha == 0) {
      digitalWrite(12, HIGH);
    } else {
      digitalWrite(12, LOW);
    }
    if (izquierda == 0) {
      digitalWrite(13, HIGH);
    } else {
      digitalWrite(13, LOW);
    }
  }
  delay(10); // Delay a little bit to improve simulation performance

}




Para finalizar, aquí os dejo un vídeo para que veáis cómo funciona:





Y esto ha sido todo por hoy, ¡un saludo y hasta la próxima!😁

martes, 21 de abril de 2020

Practica 3.04 Sensor de ultrasonidos

Hola a todos y a todas, bienvenidos a mi blog, hoy vamos a hacer un sensor de proximidad.

Para ello vamos a usar un sensor de ultrasonidos, que es un dispositivo para medir distancias. Su funcionamiento se base en el envío de un pulso de alta frecuencia, que el ser humano no es capaz de oír. Este pulso rebota en los objetos cercanos y es reflejado hacia el sensor, que dispone de un micrófono adecuado para esa frecuencia.

Hay tres niveles de proximidad, cada uno indicado con un LED.

La conexión del circuito es esta:






Los bloques de programación son estos:



Primero, he anclado una variable a los valores que recibe el sensor de ultrasonidos. Luego, he programado el aviso de alta proximidad, que se manifiesta al encenderse un LED rojo, para hacer esto, he ordenado que si los valores de la variable son menores que 50 (cm) se ejecute la acción (que se encienda el LED). Después, he hecho lo mismo con los otros dos LEDS, de aviso medio (naranja), y bajo (amarillo), ordenando que se encienda si el valor de la variable está entre dos números. Como resultado, si un objeto está a menos de 50 cm, se enciende el rojo, si está entre 50 y 100 cm, el naranja, y si está entre 100 y 150 cm, el amarillo.

Este es el código de programación del proyecto:


int distancia = 0;

long readUltrasonicDistance(int triggerPin, int echoPin)
{
  pinMode(triggerPin, OUTPUT);  // Clear the trigger
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  // Sets the trigger pin to HIGH state for 10 microseconds
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  pinMode(echoPin, INPUT);
  // Reads the echo pin, and returns the sound wave travel time in microseconds
  return pulseIn(echoPin, HIGH);
}

void setup()
{
  pinMode(4, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop()
{
  distancia = 0.01723 * readUltrasonicDistance(3, 2);
  if (distancia < 50) {
    digitalWrite(4, HIGH);
  } else {
    digitalWrite(4, LOW);
  }
  if (distancia > 50 && distancia < 100) {
    digitalWrite(7, HIGH);
  } else {
    digitalWrite(7, LOW);
  }
  if (distancia > 100 && distancia < 150) {
    digitalWrite(12, HIGH);
  } else {
    digitalWrite(12, LOW);
  }
  delay(10); // Delay a little bit to improve simulation performance
}



Aquí os dejo un vídeo para que veais cómo funciona:





En la situación actual, este proyecto sería muy útil para prevenir el acercamiento excesivo entre personas y evitar el contagio del virus que actualmente asola nuestra sociedad.


¡¡Esto ha sido todo por hoy y nos vemos en la siguiente entrada!!