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, 28 de febrero de 2018

Control de acceso con Módulo RFID RC522 Arduino


El módulo RFID RC522 es una placa de identificación de tags y tarjetas (lectura y escritura) por medio del estándar ISO/IEC 14443 tipo A que funciona bajo 13.56 MHz. Este módulo es extremadamente útil para proyectos de controles de acceso dándonos una gran versatilidad en los modos de encriptación de los códigos de acceso. EL módulo puede comunicarse con  un microcontrolador (una placa Arduino, por ejemplo) por medio  de comunicación SPI y por un puerto UART. los pines del módulo son los siguientes:

SDA:       Comunicación
SCK:       Comunicación
MOSI:     Comunicación
MISO:     Comunicación
IRQ:        Comunicación
GND:      Referencia Negativa
RST:        Reset
3.3V:       Voltaje de alimentación 3.3VDC máx


Con el fin de guardar tu clave de acceso, puedes usar  un algoritmo tan complejo como quieras, incluso existen algoritmos especializados (dependiendo de la aplicación) que te permiten "ocular" la clave de  una forma específica dentro del 1Kb de memoria que traen la mayoría de los tags y tarjetas, con el fin de dificultar el hacking; sin embargo, si tu  aplicación es  muy simple y más bien domestica, no deberías complicarte la vida con estas cosas y podrías sólo utilizar el serial (único para cada tag y tarjeta) de la siguiente manera: 

1. Leer el serial del dispositivo presente.
2. Compararlo con el serial guardado.
3. Y si  es el mismo, entonces es tu tarjeta y permite el acceso, de  lo contrario, no. 

Es esto precisamente lo que hacemos en el sencillo proyecto que te mostramos a continuación como un buen ejemplo de aplicación:

Control de Acceso simple con RC522 y Arduino UNO


Este proyecto te permitirá activar o desactivar un relevo por medio de la identificación de un tag o tarjeta específico que puede ser cambiado fácilmente en sólo 3 pasos: 

1. Conectar pin 3 al negativo
2. Ubicar el nuevo dispositivo en el sensor 
3. Retirar la conexión al negativo. 

Al colocar la tarjeta o tag correcto, el buzzer y el relevo serán activados por 2 segundos, en el relevo podrás conectar un seguro eléctrico de puerta o lo que desees activar con el RFID.

Si quieres utilizar más de un dispositivo de acceso, deberás modificar el código y agregar la verificación de tantas claves como tags o tarjetas uses, el proyecto usa la librería MFRC522 de autoría de la comunidad de Github.

Esquema de conexión 




Código Arduino:



#include <EEPROM.h> // incluimos librerías  

#include <SPI.h>

#include <MFRC522.h>



#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);// instanciamos el módulo

// pines
int BuzzPin = 7;
int LoadPin = 6;
int nueva = 3;
// variables
int y;

// rutina para imprimir el serial en el puerto serie
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
  Serial.println();
}

// rutina que compara los seriales
boolean comparar(byte *buffer) {

  boolean x;

  if (buffer[0] == EEPROM.read(0)) {
    if (buffer[1] == EEPROM.read(1)) {
      if (buffer[2] == EEPROM.read(2)) {
        if (buffer[3] == EEPROM.read(3)) {
          if (buffer[4] == EEPROM.read(4)) {
            if (buffer[5] == EEPROM.read(5)) {
              x = true;
            }
          }
        }
      }
    }
  }
  else {
    x = false;
  }
  return x;
}

// rutina que guarda el serial nuevo
void guardar(byte *buffer) {
  EEPROM.write(0, buffer[0]);
  EEPROM.write(1, buffer[1]);
  EEPROM.write(2, buffer[2]);
  EEPROM.write(3, buffer[3]);
  EEPROM.write(4, buffer[4]);
  EEPROM.write(5, buffer[5]);
  Serial.println("Guardado corrrectamente");
}


void setup() {

  Serial.begin(9600); // inicializamos la comunicación serial
  SPI.begin();        // inicializamos la comunicación spi
  mfrc522.PCD_Init(); // inicializamos el módulo
  pinMode(BuzzPin, OUTPUT); // salidas
  pinMode(LoadPin, OUTPUT);
  pinMode(nueva, INPUT_PULLUP); // entrada
  digitalWrite(BuzzPin, LOW); //  valores iniciales
  digitalWrite(LoadPin, HIGH);
  y = 0;
}

void loop() {

  byte buffer[18];
  byte size = sizeof(buffer);

  // busca si hay un tag
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    Serial.println("No hay tarjeta"); // sino lo hay, dice que no ay tarjeta
  }
  else {
    // en caso de que haya un tag, se verifica si no se desea guardar ese tag
    if ((digitalRead(nueva) == LOW) && (y == 0)) {
      mfrc522.PICC_ReadCardSerial();
      guardar(mfrc522.uid.uidByte); // función para guardar
      y = 1; // de esta fora sólo se guarda ua vez
    }
    else {
      Serial.println("Se detetecta una tarjeta");
      Serial.println();
      Serial.println("Serial de la tarjeta ...");
      mfrc522.PICC_ReadCardSerial(); // funccion que lee el serial
      printDec(mfrc522.uid.uidByte, mfrc522.uid.size); //Se imprime en el puerto serial
      if (comparar(mfrc522.uid.uidByte)) { // se compara con el serial guaardado
        digitalWrite(BuzzPin, HIGH); // si es el correcto se desbloquea el sistema
        digitalWrite(LoadPin, LOW);
        Serial.println("desbloqueado");
        delay(2000);// por 2 segundos
        digitalWrite(BuzzPin, LOW);
        digitalWrite(LoadPin, HIGH); // luego se vuelve a bloquear
      }
      else {
        digitalWrite(BuzzPin, LOW); // si es incorrecto, permanece bloqueado.
        digitalWrite(LoadPin, HIGH);
        Serial.println("tarjeta invalida"); // y en el puerto serial se muestra mensaje
        Serial.println();
      }
      delay(500);
    }
  }
}


Al subir el código a tu Arduino y realizar las conexiones, podrás ver en el puerto serial del IDE de Arduino, el estado del sistema.

NOTA: El nivel de seguridad de este este proyecto es muy bajo y no debe ser utilizado en aplicaciones muy delicadas, pues podría hackearse con facilidad:  


FIN DEL POST

jueves, 22 de febrero de 2018

Módulo relé y control remoto universal 433Mhz





Este módulo consiste de un relé de 12V que puede ser controlado a distancia por medio  de un sencillo control remoto que funciona a frecuencia de 433MHz. Útil para controlar cargas a distancia en lugares de difícil acceso. El sistema cuenta con 3 modos de operación detallados más adelante:

Alimentación: 12 VDC
Corriente: 40 mA
Voltaje de la carga (AC): 110/240 VAC
Voltaje de la carga (DC): 30 VDC
Corriente mámixa: 10A
Distancia máx de accionamiento: 30 m




Configuración inicial del control remoto

1. Alimente el módulo receptor
2. Presione el botón de modo del selector
3. Presione el botón del control remoto
luego de esto, una luz  indicadora parpadeará 3 veces indicando que la configuración fue guardada

Configuración de los 3 modos de operación
  • Modo 1
En este modo, al presionar el botón del control remoto, el  relevo se activará y permanecerá  así hasta que corte su alimentación. Para configurar este  modo:
1. Mantenga presionado el botón de selección de modo
2. Alimente el receptor
3. Observará una luz parpadear, al segundo parpadeo suelte el botón de modo
  •  Modo 2
En este modo, al presionar el botón del control remoto, el  relevo se activará y  al presionaarlo una segunda vez se desactivará. Para configurar este  modo:
1. Mantenga presionado el botón de selección de modo
2. Alimente el receptor
3. Observará una luz parpadear, al tercer parpadeo suelte el botón de modo
  •   Modo 3
En este modo, al presionar el botón del control remoto, el  relevo se activará y  al soltar el botón, el relevo se desactivará. Para configurar este  modo:
1. Mantenga presionado el botón de selección de modo
2. Alimente el receptor
3. Observará una luz parpadear, al cuarto parpadeo suelte el botón de modo

EJEMPLO DE CONEXIÓN

En el siguiente esquema podemos ver como conectar una carga, una luz en este caso, para ser activada remotamente:







FIN DEL POST

lunes, 19 de febrero de 2018

Control de motores a pasos con TB6600 y Arduino

Resultado de imagen para motor nema 17

 
Los  motores paso a  paso son un conjunto consistente de una caja reductora y un motor DC con una distribución especial  en sus bobinas. Esta distribución especial permite moverlos secuencialmente a medida que activamos y desactivamos cada bobina de una forma específica. Cada  modelo de motor paso a paso requiere una cantidad específica de pasos para dar  una vuelta completa, la cantidad  puedes encontrarla en el datasheet del motor. Cabe destacar también que, a diferencia de los servomotores, un motor paso a paso no tiene un sistema de retroalimentación para su posición, de esta forma, si  por ejemplo una fuerza externa lo mueve del de su set point, éste no será capaz de volver a tal posición. 

Por otro lado, a la hora de conectar un motor paso a paso debemos identificar primero el tipo de motor, sea unipolar (más de 4 cables) o bipolar (4 cables). Una vez identifiques el tipo de motor, debes identificar las conexiones de las bobinas, esto puedes hacerlo con un multímetro, este proceso consiste simplemente en medir continuidad.

Finalmente, para mover un motor paso a paso, como ya se dijo, es necesario activar sus bobinas en una secuencia específica, por lo tanto se hace necesario programar en un microcontrolador la  secuencia de pasos requerida. Sin embargo, existe una forma de simplificar esto, por medio del TB6600. Este es un circuito electrónico que es capaz de proveer la secuencia de  pasos que necesita el motor dándole nosotros sólo 2 señales básicamente, la primera es una señal digital que indique la dirección del movimiento (izquierda o derecha, alto o bajo) y la segunda, un flanco de subida cada vez que deseemos que el  motor de un paso. 

Una vez identifiquemos  el tipo de motor, debemos conectarlo al TB6600. Para este fin, a continuación listamos las conexiones más importantes del Easydriver por grupo.

Para conectar a nuestro microcontrolador tenemos:


+5V = Referencia de voltaje
CLK = Señal de avance, debemos enviar aquí un flanco de subida cada vez que queremos  que el motor avance un paso.
CW = Señal de dirección, debemos poner aquí un alto o un bajo según  si queremos que el  motor avance en una dirección o otra.
EN = Señal para habilitar y deshabilitar el movimiento del motor, puede dejarse sin conectar

Para conectar a la fuente para el motor tenemos: 


+32V = Positivo de la  fuente, de 8 a 42 VDC

GND = Referencia negativa de la fuente

Para conectar a nuestro motor tenemos 4 conexiones, 2 marcadas como A y 2 marcadas  como B, aquí debes conectar los extremos de las bobinas según se ha identificado previamente. Si es un motor bipolar, esta conexión es bastante obvia, sin embargo, si es un motor unipolar, deberás identificar cuales son los extremos  de las bobinas (serán los cables con mayor resistencia entre sí) y dejar los demás cables sin conectar (sólo conectas 4).


También debes tener en cuenta el potenciómetro del TB6600, debes ubicar éste para que sea capaz de suplir toda la corriente que necesita tu motor paso a paso, el TB6600 es capaz de suplir hasta 4 A por fase. Por último, debes revisar los switches de modo paso, hay 4 sobre la placa, pero en realidad sólo el 1, el 2 y el 3 tienen conexión. A continuación te mostramos los modos de operación según la posición de estos switches:


M1M2M3Modo seleccionado
OFFOFFOFFSTAND BY
OFFOFFONFULL STEP
OFFONOFF1/2 STEP A
OFFONON1/2 STEP B
ONOFFOFF1/4 STEP
ONOFFON1/8 STEP
ONONOFF1/16 STEP
ONONONSTAND BY




Ejemplo de operación de motor paso a paso con TB6600

Al realizar el siguiente montaje y subir el código a tu Arduino, observarás al motor moverse en una dirección y luego en otra. Si el motor es de 200 o menos pasos por unidad, dará una vuelta completa teniendo al driver en modo FULLSTEP.

Empezamos mostrando un esquema de conexión con Arduino UNO:







Código Arduino

int Dir = 13; //  definimos el pin de dirección CW
int Step = 12; // definimos el pin de comando de pasos CLK
boolean state  = true;


void setup() {

pinMode(Step,OUTPUT); // seleccionamos ambos pines como salidas
pinMode(Dir,OUTPUT);
digitalWrite(Step, LOW); //  escribimos valores iniciales
digitalWrite(Dir, LOW);

}

void loop() {

  state = !state; // luego de cada ciclo, cambiamos el estado para cambiar la dirección

  digitalWrite(Dir,state);  

  for (int i = 0; i < 200 ; i++)  // en este ciclo damos 200 pasos
  {    
    digitalWrite(Step, HIGH);
    delay(10);
    digitalWrite(Step, LOW);
    delay(10);
  }

}


FIN DE POST

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

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