|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
T Búsqueda en este sitio:


.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

49BM.- Teclado 4x4, bus I2C. Pantalla LCD. Sensor de humedad y temperatura. Infrarojo. RadioFrecuencia. Reloj. Lluvia. I2C. INT_Hall. ArduinoI2C-Humo. LDR-PWM. Motores y Bluetooth. Servo RF. RFID.

- Nuestro proyecto va así:

- Teclado 4x4 con módulo I2C.
- Pantalla LCD.
- Sensor de Temperatura y Humedad.
- Infrarojo.
- Radio Frecuencia. Emisor y Receptor.
- Sensor de ultrasonido.
- Sensor de lluvia.
- Módulo I2C con sensores de inclinación, magnetismo y movimiento.
- Sensor de efecto Hall con Interrupción.
- Sensor de Humo con envío de información mediante I2C
- LDR para PWM.
- Bluetooth, motores y Android.
- Servo dirigido desde RF.
- Ahora le pondremos un lector de tarjetas magnéticas RFID.

- Vamos a añadir a nuestro proyecto lector de tarjetas magnéticas en el segundo Arduino.

- Convendría echarle un vistazo al tutorial del Servo: 48.- Módulo Lector inductivo RFID-RC522 RF .

- Al pasar una tarjeta magnética por un lector, indicará si es válida o no.

_______________________
- Teclados y LED.

'A' - 'B' Modifica la temperatura máxima para encender el LED13 LED13
'B' Visualiza la Humedad en LCD. LED13
'C' Visualiza la Temperatura en LCD. LED13
'#' Fin de entrada de datos para la opción 'A'  
Mando de infrarojo Teclas '1' y '2' del mando de infrarojo. LED7
'D' Distancia ultrasonido por Radio Frecuencia en LCD.  
PulsadorA
PulsadorB
 

LED5
LED6

Mover Servo

'*' Visualiza la hora en LCD.  
'A' - 'C' Modifica la lluvia máxima para encender el LED4 LED4
'0' Visualiza la lluvia en LCD.  
  Sensor de inclinación, el magnético o el de movimiento. (I2C) LED12
  Sensor de efecto Hall (Interrupción) LED17 (es el terminal A3 funcionando como Digital)
'1' Visualiza humo en LCD. (I2C)  
'2' Visualiza valor LDR-PWM LED10 PWM

______________________________________________________
- Conexionado.

- Conectamos el lector de tarjeta magnética de esta manera.

- En el módulo localizamos los terminales:

SDA, SCK, MOSI, MISO, GND, RST y 3,3V y los conectamos según la figura.

- Observa que SCK, MOSI y MISO están conectadas al conector ICSP.
- La alimentación es a 3,3V

- En el Arduino utilizamos los terminales 8 y 9.

- [Puedes ver las conexiones con más detalles en el tutorial: 48.- Módulo Lector inductivo RFID-RC522 RF aunque ahí utilicé los terminales 9 y 10 del Arduino]

______________________________________________________
- Comentarios.

1.- Cada tarjeta viene con un código distinto de fábrica. Debemos ir a este tutorial: 48.- Módulo Lector inductivo RFID-RC522 RF

y leer la parte que comenta el ejemplo Dumpinfo. Esto es una aplicación que esté en la carpeta examples de la librería rfid-master.zip

- Cargamos esta aplicación en nuestro Arduino, conectamos el módulo RFID y pasamos la tarjeta por el módulo.

- En el Monitor Serie, obtendremos una indicación de que ese número de Tarjeta está Autorizada.

- Ese será el número correspondiente a nuestra tarjeta.

- Ese número lo debemos insertar en el código:

String autorizados = "04345334,03021203,34567876,A0460B7F";

- En este código he tomado para cuatro números. Deja como están los otros tres números.

2.- Cuando pasemos la tarjeta en el Monitor Serie nos debe indicar que la tarjeta está autorizada.

3.- Además se deberá encender un LED durante 2 segundos.

4.- Fíjate que el LED está conectado a un pin de entrada Analógica, concretamente A0 (pero va a funcionar como salida digital).

[Esto ya lo vimos en el tutorial de Interrupciones y sensor Hall, tomamo el A3 del primer Arduino para el LED17]

5.- Esos pines "analógicos" también pueden funcionar como digitales, y tienen como números:

A0 = 14
A1 = 15
A2 = 16
A3 = 17
A4 = 18

En nuestro caso solo utilizaremos el A0, es decir el 14, de tal manera que lo declararemos así:

#define PIN_A0 14 // La 14 es la entrada Analógica A0

pinMode(PIN_A0, OUTPUT);

digitalWrite(PIN_A0, HIGH);
delay(2000);
digitalWrite(PIN_A0, LOW);

______________________________________________________
- Código para el Arduino Emisor.

Teclado_LCD_humedad_ir_rfe_BT_RFID.ino

// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com

#include <VirtualWire.h>
#include <Wire.h>
// Bluetooth
#include <SoftwareSerial.h>
SoftwareSerial I2CBT(2,3);
// El TX del módulo BT va al pin 2 del Arduino
// El RX del módulo BT va al pin 3 del Arduino
// Ultrasonido.
int Trigger = 11;
int Echo = 10;
long microsegundos;
long duracion;
#define pulsadorA  4
#define pulsadorB  5
 int valorA, valorB;
 char A, B;
 int distancia;
 String str="";
 // Humo
const int pin_humo = A2;
String humo;
String enviar_humo;
// RF
 const int pin_de_transmision = 7; // RF
 /// Bluetooth 
 char val;
 // Conexiones del Motor A
int enA = 6; //9; // El terminal 9 da problemas en enA y enB
int in1 = 13;
int in2 = 12;

// Conexiones del Motor B
// NO CONECTAR ESTOS TERMINALES
int enB = 6; 
int in3 = 0; //5;
int in4 = 1; //4;
///////////////////////
// Tarjeta RFID
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 8 //  Arduino Uno
#define RST_PIN 9 // Arduino Uno
MFRC522 mfrc522(SS_PIN, RST_PIN);
// Escribimos los códigos de las tarjetas autorizadas.
// Son 8 caracteres separados por coma, sin espacio. Todos juntos.
int total=4; // Total de tarjetas autorizadas
String autorizados = "04345334,03021203,34567876,A0460B7F";
String UID;
String dosbytes;
#define PIN_A0 14 //  La 14 es la entrada Analógica A0

void setup()
{
 // Bluetooth interrupcion.
  I2CBT.begin(9600);
  attachInterrupt(0, int_bluetooth, CHANGE); // 0 es la interrupción 0, es decir el terminal 2
// Inicializa IO y ISR
vw_set_tx_pin(pin_de_transmision);
vw_setup(2000); // Bits por segundo
pinMode(pulsadorA, INPUT); 
pinMode(pulsadorB, INPUT); 
pinMode(Trigger, OUTPUT);
pinMode(Echo, INPUT);
Serial.begin(9600);
// Bus I2C otro Arduino.
Wire.begin(2);                // Este Esclavo es el número 2
Wire.onRequest(requestEvent); // Cuando el Maestro le hace una petición,
                             // realiza el requestEvent
//// Bluetooth
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  analogWrite(enA, 90);
  analogWrite(enB, 90);
  // Tarjeta RFID  
  SPI.begin(); // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522 card  
  pinMode(PIN_A0, OUTPUT);                    
}

void loop()
{
bluetooth_comprueba();
ultrasonido();
sensor_humo();
tarjeta_rfid();
delay(20);
valorA = digitalRead(pulsadorA);
valorB = digitalRead(pulsadorB);

// A y B son los valores de los botones.
if (valorA == HIGH) { 
  A='0';
} else {
  A='1';
}

if (valorB == HIGH) { 
  B='0';
} else {
  B='1';
} 

// str es el valor de la distancia con 4 caracteres.
//  String str="";
  str = "0000" + String(distancia); // Pasa el entero a String
  str = str.substring(str.length()-4); // Siempre 4 caracteres

  char msg[6] = {A, B, str[0], str[1],str[2], str[3]};
  vw_send((uint8_t *)msg, 6); // Send: Aquí envía 6 elementos.
  // Si está A y B en alto y la distancia en 546, enviará:
  // 1 1 0 5 4 6
  vw_wait_tx(); // Espera que termine el mensaje
  delay(100);

}
/////////////////////////////////////////////
///////////FUNCION ULTRASONIDO //////////////
void ultrasonido(){
digitalWrite(Trigger, LOW);
delayMicroseconds(2);
digitalWrite(Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(Trigger, LOW);
delayMicroseconds(2);

duracion = pulseIn(Echo, HIGH);
distancia = duracion / 29 / 2;

//Serial.println(String(distancia));
delay(20);

}
/////////////////////////////////////////////
///////////////// HUMO ///////////
void sensor_humo(){
int lee_humo = analogRead(pin_humo);
enviar_humo = "000" + String(map(lee_humo, 100, 500, 0, 10));
//// Funcion enviar datos por I2C al otro Arduino.
// Esto es lo que envía cuando le hace la petición.
}
void requestEvent()
{   
 // Wire.write(str.substring(str.length()-3).c_str()); // Envía 3 bytes
 Wire.write(enviar_humo.substring(enviar_humo.length()-3).c_str()); // Envía 3 bytes                
}
/////////////////////////////////////////////
///// Interrupcion Bluetooth
void int_bluetooth() {
  val=I2CBT.read();
}
/////////////////////////////////////////////
///// Tarjeta RFID
void tarjeta_rfid() {
UID="";
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}

if ( ! mfrc522.PICC_ReadCardSerial()) return;

// Código de la tarjeta introducida UID
for (byte i = 0; i < mfrc522.uid.size; i++) {
dosbytes = String(mfrc522.uid.uidByte[i],HEX);
if (dosbytes.length() == 1){dosbytes = "0" + dosbytes; };
UID = UID + dosbytes; 
} 
Serial.println("UID = " + UID);
Serial.println();

// Consulta si la tarjeta introducida se encuentra en
// el grupo de autorizados.
for(int i = 0; i < total; i++){
Serial.println(autorizados.substring(9*i,9*i+8));
if (UID == autorizados.substring(9*i,9*i+8)){
Serial.println("La tarjeta introducida esta en el grupo de AUTORIZADO");
digitalWrite(PIN_A0, HIGH); 
delay(2000);
digitalWrite(PIN_A0, LOW); 
}
}

mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD 
}

- bluetooth_comprueba.ino

bluetooth_comprueba.ino

void bluetooth_comprueba() {
//if( Serial.available() ) {
//val = Serial.read();

// Avanza Motor A
if( val == '1' )
{ 
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
}

// Avanza Motor A y B
if( val == '2' )
{ 
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
}

// Avanza Motor B
if( val == '3' )
{ 
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
}

// Parar A
if( val == '4' )
{ 
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW); 
} 

// Parar A y B
if( val == '5' )
{ 
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);  
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
} 

// Parar B
if( val == '6' )
{ 
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
} 

// Retrocede A
if( val == '7' )
{ 
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
} 

// Retrocede A y B
if( val == '8' )
{ 
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);  
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH); 
} 

// Retrocede B
if( val == '9' )
{  
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH); 
} 

if( val == 'A' )
{ 
analogWrite(enA, 100);
analogWrite(enB, 100);
} 
if( val == 'B' )
{ 
analogWrite(enA, 110);
analogWrite(enB, 110);
} 
if( val == 'C' )
{ 
analogWrite(enA, 150);
analogWrite(enB, 150);
} 
if( val == 'D' )
{ 
analogWrite(enA, 200);
analogWrite(enB, 200);
} 
if( val == 'E' )
{ 
analogWrite(enA, 250);
analogWrite(enB, 250);
} 
//} 
}

______________________________________________________
- Comentarios.

- El proyecto

______________________________________________________


________________________________

 

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información