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.

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

martes, 12 de diciembre de 2017

Display de 7 segmentos TM1637 con Arduino

Resultado de imagen para display tm1637Resultado de imagen para display tm1637
Todos aquellos que hayan trabajado con un display de 7 segmentos saben lo tedioso que puede ser armar un circuito en una protoboard con multiplexores y la gran cantidad de conexiones que se requieren.  Es por esto que existen módulos  como el TM1637, el cual es un módulo que tiene varios componentes incluidos con el fin de reducir al mínimo el número de conexiones, incluyendo ya el multiplexor y circuitos latchs para mantener los números escritos previamente.

El módulo funciona por medio de sólo 4 conexiones, dos de energía, una para la señal de reloj y una para datos. Esto reduce considerablemente las conexiones que usualmente tendríamos que hacer para usar cuatro displays de 7 segmentos como estos. Los datos se ingresan al módulo por medio de comunicación serial, de ahí que sólo un pin es necesario para datos, mientras tanto el pin de reloj define el tiempo en que se envían tales datos. A continuación describimos las conexiones del módulo:

VCC = Referencia positiva de 3.3 V a 5V

GND = Referencia negativa

DIO = Entrada serial de datos

CLK = Entrada de  señal de reloj

El envío de los datos al módulo es más bien simple, el fabricante del chip da un instructivo para esto en el data sheet con el fin de que podamos programarlo en un microcontrolador. Sin embargo, para Arduino, el fabricante provee ya una librería con el fin de que podamos mandar datos a nuestro display de la forma más sencilla posible. A continuación presentamos un ejemplo donde mostramos  la forma de conexión y los comandos más básicos de la librería.

Esquema  de conexión con Arduino UNO





Código Arduino

#include "TM1637.h" //incluimos la librería
#define CLK A1    // definimos los pines donde se debe conectar
#define DIO A0

TM1637 Display1(CLK,DIO); // creamos una variable del tipo de dato TM1637
int8_t Digits[] = {0,0,0,0}; // el valor inicial  a desplegar

void setup()
   {  
       Display1.set();  //  inicalizamos el display
       Display1.init() ;
   }

void loop()
{
// un contador de 0 a 999 
 for (int i=0 ; i < 1000 ; i++){
  Digits[0] = 0;
  Digits[1] = floor(i/100);
  Digits[2] = floor((i%100)/10); 
  Digits[3] = floor(i%10);
  delay(1000); 
  Display1.display(Digits); // la función para escribir en el display,  cada dígito diferenciado
 }
}


Una vez carguemos este código, el display mostrará un contador que va de 0 a 999, avanzando segundo a segundo.


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. ...