Sensor Pir HCSR501

Diagrama de conexión más código arduino.

Módulo SIM800L

Diagrama de conexión más código arduino.

Módulo Reloj DS3231

Diagrama de conexión más código arduino.

LCD 1602 2004 con adaptador I2C

Diagrama de conexión más código arduino.

Sensor por ultrasonido HCSR04

Diagrama de conexión más código arduino.

miércoles, 14 de febrero de 2018

Uso de flotadores sensores de nivel Arduino



Los sensores de nivel tipo flotador son dispositivos muy simples en su funcionamiento y su utilización. Básicamente son un switch que se abre o cierra una vez el nivel de fluido produce su movimiento, por lo  tanto su correcta orientación es muy importante para su utilización. Si un sensor  está diseñado para cerrar su circuito interno cuando el agua lo rebase se debe tener cuidado en la  dirección en la que  se coloca en el fluido pues si se coloca al revés, su  acción será exactamente opuesta a lo planeado.

A continuación mostraremos un ejemplo simple en el que leemos el estado de una boya y lo desplegamos en el monitor serial del IDE Arduino:

Esquema de conexión Arduino




Código Arduino

int sensor = 2; // definimos el pin

void setup() {
  Serial.begin(9600); // iniciamos la comunicación serial
  pinMode(sensor, INPUT_PULLUP); // colocamos en pin en modo alto
}

void loop() {

  Serial.print("Estado del switch: ");

  if (digitalRead(sensor) == HIGH) {
    Serial.print("OFF");
  }
  else {
    Serial.print("ON");
  }

}

Una vez subamos el código podremos ver continuamente en el monitor serial del Arduino el estado de switch.



FIN DE POST






martes, 13 de febrero de 2018

Sensor de flujo de liquido YF-S201 Arduino


El sensor  de flujo YF-S201 es un elemento que nos permite, tanto detectar un flujo a través de una tubería, como medir su caudal, con relativa simpleza. este elemento cuenta con dos extremos roscados en los cuales debes conectar la tubería sobre la que realizarás la medición, siendo cuidadoso con la dirección marcada en el elemento, pues sólo en esa dirección la medición será adecuada.

El sensor funciona por medio de una  turbina interna movida por el flujo, la cual posee un sensor de efecto Hall que nos da una una señal cuadrada en la salida del sensor cada vez que se produce algún movimiento en la turbina. Así, si nuestro objetivo es medir el flujo, sólo debemos contar los frentes de onda que nos llegan desde el elemento y si nuestro objetivo fuere sólo detectarlo, bastará con censar por cambios repentinos en el flujo.

Este dispositivo es capaz de medir caudales desde 1L/min hasta 30L/min, con presiones de 1.75 MPa, muy superior a la presión en las tuberías de acueducto domesticas. Para calcular el caudal con este sensor sólo es necesario contar la cantidad de pulsos que recibimos por segundo y luego dividir tal cantidad por un factor de conversión. Ahora, con el fin de contar con exactitud la cantidad de pulsos por segundo, debemos valernos de una herramienta del microcontrolador, las interrupciones por hardware.

En el siguiente ejemplo utilizaremos el sensor para medir el flujo en una tubería y desplegaremos la medición en el monitor serial de Arduino.

Esquema de conexión Arduino UNO





Ejemplo de Código Arduino


volatile int Contador; //variable que cuenta los pulsos
int PinSensor = 2;    // pin donde se conecta  el sensor


// función a ejecutarse en cada interrupción
void pulso ()
{
  Contador++;
}

long funcion(void)
{
  long cantidad;
  Contador = 0; 
  interrupts();
  delay(100);  //Se inician las interrupciones y se cuentan los pulsos
  noInterrupts();//se suspenden las interrupciones
  cantidad=10*Contador; // pulsos por segundo
  return cantidad;
}

void setup()
{
  Serial.begin(9600);
  pinMode(PinSensor, INPUT);
  attachInterrupt(0,pulso,RISING); // inicializamos las interupciones
}

void loop () 
{
  float frecuencia=funcion(); //frecuencia de los pulsos
  float Caudal=frecuencia/7.5; //calculamos el caudal en L/m

  Serial.print ("Litros por  minuto: ");
  Serial.println (Caudal);
}




Una vez subido el código, podremos observar en el monitor serial del IDE Arduino  el caudal medido por el sensor en todo momento.




FIN DEL POST

lunes, 18 de diciembre de 2017

Sensor de voltaje FZ0430 con Arduino



El módulo sensor de  voltaje FZ0430 es un módulo bastante simple, el cual consiste en un divisor de tensión conformado por dos resistores uno de  7.5K y uno de 30K, con el cual  podremos ser capaces de reducir el voltaje medido en una razón de 0.2 y por lo tanto seremos capaces de medir una tensión máxima de 25 V con procesador de 5V y 16.5 V con un procesador de 3.3V.  

Debido a su forma de funcionamiento, con este módulo sólo podemos medir tensión DC, para medir AC tendríamos que primero rectificar la tensión. El módulo  cuenta con 2 bornes donde se debe conectar la tensión a medir, los cuales tienen polaridad, así mismo cuenta con  3 pines, lo cuales  son:


+ = Referencia positiva de 3.3 a 5V

-  = Referencia negativa
S = Señal

A continuación mostramos un ejemplo  donde utilizamos el sensor de voltaje para  medir la tensión en una carga y la desplegamos en el monitor serial del Arduino.


Esquema de conexión Arduino UNO









Código Arduino


int Sensor = A0;

void setup() {
Serial.begin(9600);
}

void loop() {
  
float voltaje =  (float)25*analogRead(A0)/1023;
Serial.print("Voltaje medido =  ");
Serial.println(voltaje);
delay(500);
}


Al subir el código al Arduino y al abrir el monitor serial, podremos ser capaces de medir la tensión con nuestro módulo.


FIN DEL POST

Sensor de efecto Hall Aduino



Un sensor de efecto Hall es un dispositivo capaz de medir la densidad de flujo magnético que le atraviesa perpendicularmente. El sensor realiza esta medición detectando los cambios que se producen en una pequeña corriente que circula en su interior, estos cambios se producen debido al efecto Hall cuando una densidad de flujo magnético atraviesa el sensor, produciendo una separación de los portadores de carga, generando pequeña una tensión interna en el mismo conductor.

El sensor puede obtenerse solo o puede obtenerse montado en una placa Flying Fish, la cual provee la facilidad de darnos una salida digital por medio de un amplificador operacional LM393 en modo comparador, el cual realiza la comparación con respecto a una referencia dada por el nivel del potenciómetro incluido en el módulo, esta función es usada con el fin de detectar  un cambio repentino en el flujo magnético. El módulo también provee una salida analógica que puede ser usada para proveer una medida numérica de la densidad de flujo magnético que atraviesa el sensor. Debe mencionarse que, con el fin de obtener una medida numérica del campo magnético, debemos realizar primero una calibración del módulo.

La salida digital de este conjunto es utilizada usualmente como un encoder magnético, para medir rpm, colocando pequeños imanes en el elemento que gira. Por otro lado, la salida analógica es muy utilizada, como ya se dijo, para medir la densidad de flujo magnético. A continuación describimos los pines del módulo:

+ = Referencia positiva de 3.3 a 5V
G = Referencia negativa
D0 = Salida digital
A0 = Salida analógica

A continuación mostramos un ejemplo donde utilizamos el módulo con el fin de que nos de detectar la presencia de  una campo magnético superior a la referencia.

Esquema de conexión con Arduino UNO




Código Arduino

int pin_analogico = A1; // definimos los pines por los que
int pin_digital = A0;   // conectamos las salidas del módulo

void setup() {
Serial.begin(9600); //iniciamos la comunicación serial
pinMode(pin_digital,INPUT_PULLUP); //definimos como entrada
}

void loop() {

Serial.print("lectura analoga = ");
Serial.println(analogRead(A1));

// si la salida digital está en cero, es porque se ha superado el valor de referencia
// entonces se desplegará el mensaje: "salida digital activa"
if (digitalRead(pin_digital) == LOW)
{
  Serial.println("salida digital activa");
}
else
{
  Serial.println("salida digital inactiva"); // de otra forma de deplegará "salida digital inactiva"
}

}



Una vez subido el código y al abrir el monitor serial, podremos  observar el  valor medido en la salida analógica del módulo y  el estado de  la salida digital.



FIN DEL POST

Sensor de humedad de suelo FC28 - Higrómetro Arduino



El sensor  de  humedad FC28 es un sensor que mide la humedad del suelo a partir de la resistencia eléctrica del mismo. Es usual usar este sensor sin ninguna otra placa, obteniendo su resistencia en todo momento por medio de un divisor de tensión simple, sin embargo el módulo también puede obtenerse con una placa Flying Fish, la cual provee una salida analógica proporcional a la resistencia medida y una salida digital dada por un circuito amplificador operacional en modo comparador, el cual compara el valor medido con una referencia dada  por el valor en el potenciómetro, dando una salida digital alta cada vez que el valor medido sea mayor a la referencia. 

Debe mencionarse que la medición del elemento no está calibrada, así, si se desea obtener una medida numérica, se debe realizar una calibración con un segundo higrómetro, sin embargo una buena referencia puede ser el hecho que un suelo ligeramente húmedo da un valor en el ADC de un Arduino de  600  a 700 y un suelo seco da un valor mayor a 700. 

Debido al uso bastante simple del módulo, este duele ser utilizado para sistemas de riego automático. La tensión en la salida analógica del módulo es inversamente proporcional a la resistencia medida, es decir, en un suelo muy húmedo, la tensión se aproximará a 0 y en un suelo muy seco se aproximará a VCC. Los pines del módulo son los siguientes:

VCC =  Referencia positiva  de 3.3 a 5 V
GND = Referencia negativa
A0 = Salida analógica de 0 a VCC
D0 = Salida digital

A continuación presentamos una aplicación en la cual usamos la salida analógica y la salida digital del módulo.

Esquema de conexión con Arduino UNO







Código Arduino


int pin_analogico = A1; // definimos los pines por los que
int pin_digital = A0;   // conectamos las salidas del módulo

void setup() {
Serial.begin(9600); //iniciamos la comunicación serial
pinMode(pin_digital,INPUT_PULLUP); //definimos como entrada
}

void loop() {

Serial.print("lectura analoga = ");
Serial.println(analogRead(A1));

// si la salida digital está en cero, es porque se ha superado el valor de referencia
// entonces se desplegará el mensaje: "salida digital activa"
if (digitalRead(pin_digital) == LOW)
{
  Serial.println("salida digital activa");
}
else
{
  Serial.println("salida digital inactiva"); // de otra forma de deplegará "salida digital inactiva"
}

}


Una vez subido el código y al abrir el monitor serial, podremos  observar el  valor medido en la salida analógica del módulo y  el estado de  la salida digital.



FIN DEL POST

Sensor de Temperatura LM35 con Arduino



El sensor LM35 es un circuito integrado muy utilizado con el fin de medir temperatura, esto debido a  la simpleza en su utilización y en su conexión. Este tipo de sensores hechos a base de silicio, miden la temperatura aprovechando la sensibilidad a la temperatura de la unión PN; además, el circuito integrado incluye circuitos de procesamiento de señal y de compensación, de tal modo que la salida del circuito ya se encuentra compensada de forma precisa en grados centígrados, por lo cual no requiere el procesamiento de  la señal con algún microcontrolador y así su salida puede ser usada directamente.

El LM35  provee una salida proporcional a la temperatura, con una precisión típica de 1/4 de grado centígrado y una resolución de 10mV por grado. Este circuito integrado se encuentra en el  el mercado en típicamente  en encapsulado tipo TO para transistores. 



3 = Referencia positiva de 4 a 20 V
2 = Señal
1 = Referencia negativa

A continuación mostramos un programa en el cual hacemos uso de  un sensor LM35 para  obtener la medida de temperatura y la  desplegamos en el monitor serial del Arduino:

Esquema de conexión con Arduino UNO 




Código Arduino

void setup() {
Serial.begin(9600);
}


// funcion que calcula el promedio de la temperatura
float media_Temp(void)
{
  float Temp = 0;
  float Sensor;
  int  n = 100;

  for (int i = 0; i < n; i++) {
    Sensor = analogRead(A0); // leemos el sensor
    Temp = (float)Temp + Sensor * 500 / 1023; 
    delay(1);
  }// leemos la temperatura y la convertimos en grados  centígrados
  Temp = Temp / n;
  return (Temp); // retornamos la temperatura
}


void loop() {

float Temp = media_Temp();
  
Serial.print("Temp = ");
Serial.println(Temp);

}


Una  vez subido el código, al abrir el puerto serial podremos ver la medida de temperatura.



FIN DEL POST

Sensor de Corriente ACS712 de 5, 20 y 30 A




El módulo sensor de corriente ACS712 es un módulo que consta de un sensor de efecto hall con el cual es capaz de medir el campo magnético que fluye alrededor del conductor y así, de hacernos saber la cantidad de corriente que fluye por el conductor. La medida de la cantidad de corriente que fluye por los bornes del conductor se da a través de una señal análoga en la salida del módulo, la cual es proporcional a la corriente que fluye.  Debido a su forma de funcionamiento, el sistema es tan capaz de medir corriente DC como AC,ya que internamente se hace la conversión a valor rms, sin embargo debe mencionarse que esta cualidad también lo hace propenso al ruido electromagnético.

El módulo existe en varias presentaciones de acuerdo a la corriente máxima que es capaz de soportar y medir a través de sus bornes, siendo la diferencia en el precio muy pequeña entre cada uno y el precio  mismo proporcional a tal corriente máxima,  así el módulo puede ser de 5, 20 o 30 A, siendo el manejo exactamente igual, excepto por un factor multiplicador. Como ya se dijo, el módulo consta de 2 bornes para la conexión del cable por el fluye la corriente a medir, así como también con 3 pines, dos para alimentación (VCC y  GND) y uno para la señal (OUT). Debe mencionarse también que el sentido de  la corriente es importante, pues el módulo es capaz de medir corriente en ambos sentidos, danndo en uno una medida positiva y en el otro, negativa.

A continuación presentamos un programa en el cual hacemos uso de un sensor de corriente de 5A para detectar el momento en que se enciende una carga. 

Esquema de conexión con Arduino UNO




Código Arduino

int LedPin = 13;
int Sensor = A0;

void setup() {
  pinMode(LedPin, OUTPUT);
}

float medir(void) // esta funcion toma el promedio de 100 mediciones
{
  float corriente = 0;

  for (int i = 0; i < 100 ; i++) {
    float voltage = (float) analogRead(A0) * 5.0 / 1023.0;
    corriente += (float) 1000*(voltage - 2.5) / 0.185;
    //para el sensor de 5A es 0.185, para el de 20A es 0.1
    //y para  el de 30A es 0.066
    delay(1);
  }
  return (corriente / 100);
}

void loop() {

float medicion = medir();

  if (medicion > 15) { //en 15 mA para evitar errores por el ruido
    digitalWrite(LedPin, HIGH);
    delay(3000);
  }
  else
  {
    digitalWrite(LedPin, LOW);
  }

}


Una vez  subido el código, el led interno de la  placa Arduino, el del pin 13, se encenderá cada vez que se mida una corriente mayor a 15mA fluyendo hacia la carga.


FIN DEL POST

domingo, 17 de diciembre de 2017

Sensor de vibración SW-420 Arduino

El módulo sensor de vibración SW-420 es una placa de circuito consistente de un dispositivo sensor de vibración, un amplificador operacional LM393 en modo comparador y un potenciómetro. Evidentemente la base del módulo es el sensor de vibración, el cual funciona básicamente por medio de un elemento flexible metido en el interior de un cilindro, estando ambos a un potencial diferente, cuando se produce vibración el elemento interior chocará contra las paredes del cilindro conduciendo así una pequeña corriente. Luego esta corriente se compara con la referencia dada por el nivel del potenciómetro por  medio del amplificador operacional, si la corriente supera la referencia la salida digital del módulo (D0), se  pondrá en alto.

El sistema consta de 3 pines los cuales son:

VCC = Referencia  positiva
GND = Referencia  negativa 
D0 = Salida digital (en alto cuando exista vibración)

A continuación presentamos un ejemplo en usamos la vibración detectada por el módulo.

Esquema  de conexión Arduino UNO



Código Arduino

int LedPin = 13;

int Sensor = A0;

void setup() {
  pinMode(LedPin, OUTPUT);
}

void loop() {
  if (digitalRead(Sensor) == 1) {
    digitalWrite(LedPin, HIGH);
    delay(3000);
  }
  else
  {
    digitalWrite(LedPin, LOW);
  }
}


Una vez subas el código, el led interno de la placa Arduino permanecerá encendido por 3 segundos cada vez se perciba una vibración.



FIN DEL POST

Motor a pasos 2BYJ-48 y Driver ULN2003 Arduino


El motor a pasos 28BYJ-48 es un motor unipolar que funciona a 5V, ciertamente podríamos hacer funcionar este motor activando sus bobinas secuencialmente por medio de transistores, sin embargo explicaremos el uso de ese motor por medio del driver que más usualmente se usa con este: el ULN2003. 

Este driver  tiene un conector hembra donde  el conector del  motor encaja perfectamente, también es de notar que éste tiene sólo 4 entradas, por lo cual nuestro podremos usar nuestro motor unipolar como un  motor bipolar. El módulo cuenta también con leds que nos  indican cuáles bobinas están activadas  en cada momento.

A continuación proveemos un ejemplo en el cual usaremos arduino para hacer mover un conjunto motor-driver:

Esquema de conexión con Arduino UNO



Código Arduino

int time_delay = 10;
// FUNCION PARA HACER GIRAR EL MOTOR HACIA LA DERECHA
void step_right(int a, int b, int c, int d)
{
  digitalWrite(a, LOW); // VAMOS ACTIVANDO LAS BOBINAS EN
  digitalWrite(b, LOW); // EN UNA  SECUENCIA ESPECÍFICA
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
}

//FUNCION PARA HACER GIRAR EL MOTOR HACIA A IZQUIERDA
void step_left(int a, int b, int c, int d)
{
  digitalWrite(a, HIGH); // VAMOS ACTIVANDO LAS BOBINAS EN 
  digitalWrite(b, HIGH); // UNA SECUENCIA INVERSA A LA ANTERIOR
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
}

void setup() {
  pinMode(8, OUTPUT);//IN4
  pinMode(9, OUTPUT);//IN3
  pinMode(10, OUTPUT);//IN2
  pinMode(11, OUTPUT);//IN1
  delay(1);
  digitalWrite(8, LOW); // damos valores iniciales
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(100);
}

void loop() {
  for (int i = 0; i < 100 ; i++) { // MOVEMOS EL MOTOR A LA DERECHA
    step_right(8, 9, 10, 11);
  }
  for (int i = 0; i < 100 ; i++) { // MOVEMOS EL MOTOR A LA IZQUIERDA
    step_left(8, 9, 10, 11);
  }
}

Al subir este código veremos al motor moverse  en una dirección y luego en la dirección contraria, repitiendo esto una y otra vez.



FIN DEL POST

Driver L298N - Puente H Motores Arduino


El  driver L298N es un módulo consistente de un circuito puente H y algunos componentes extras para funciones como selección del puente H activo (el circuito integrado contiene 2 en realidad) y una fuente de 5V por medio de un regulador interno, con el fin de usarla en caso de sea necesaria  en nuestro circuito.

Su uso de bastante simple, el módulo consta  de 8 pines, de  los cuales 4 están cubiertos con dos jumpers para selección de la salida activa, además tiene de siete bornes, cuatro para las conexiones de las salidas  de  los puente H y 3 más para potencia, una referencia negativa, la ya mencionada salida de 5V y la alimentación que puede ir de 6V a 12V. A continuación señalamos cada uno de los pines:


Donde vemos los 2 bornes correspondientes a salida 1 y 2, que es donde debemos conectar los elementos a controlar; los 3 bornes de potencia, donde vemos la salida de 5V que provee el módulo y  los pines, donde vemos que IN1 y 2 corresponden a la entrada  del puente H correspondiente a la salida 1, lo mismo para IN3 y 4  y la salida 2. También vemos los jumpers de ENA y ENB, los cuales al retirarlos desactivan el puente H de la salida correspondiente.

A continuación presentamos un ejemplo dónde se controla la dirección y la velocidad de un motor usando como driver el L298N y un Arduino UNO.

Esquema de conexión con Arduino UNO





Código Arduino UNO


int IN1 = 11;
int IN2 = 10; // definimos los pines

void setup() {
pinMode(IN1,OUTPUT); // definimos los pines  como salida
pinMode(IN2,OUTPUT);
delay(100);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);  // damos valores iniciales a la salida
delay(1000);
}

void loop() {

for (int i=0 ; i < 256 ; i++)  // el motor aumenta su velocidad
{
  analogWrite(IN1,i);
  digitalWrite(IN2,LOW);
  delay(200);
}

for (int i=256 ; i > 0 ; i--) // disminuye la velocidad
{
  analogWrite(IN1,i);
  digitalWrite(IN2,LOW);
  delay(200);
}

digitalWrite(IN1,LOW); // se detiene
digitalWrite(IN2,LOW);
delay(5000);

for (int i=0 ; i < 256 ; i++) // cambia de sentido y aumenta su velocidad
{
  analogWrite(IN2,i);
  digitalWrite(IN1,LOW);
  delay(200);
}

for (int i=256 ; i > 0 ; i--) // disminuye nuevamente  su velocidad
{
  analogWrite(IN2,i);
  digitalWrite(IN1,LOW);
  delay(200);
}

digitalWrite(IN1,LOW);  // el motor se detiene
digitalWrite(IN2,LOW);
delay(5000);


}


Al subir este código verás al motor aumentar lentamente su velocidad  en una dirección hasta su velocidad máxima y luego disminuirla lentamente hasta detenerse para finalmente girar en sentido contrario de la misma forma, repitiendo este comportamiento una y  otra vez.


FIN DEL POST

Display matricial 8x8 con Arduino SPI y MAX7219

La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. ...