IoT Arduino-Raspberry Pi Hackeando una TSRB430 BLE Relay Board P2

Raspberry Pi 2 Bluetooth Serial Uart HM10 HM12 Relay Board AI by Santiapps Marcio Valenzuela
Raspberry Pi 2 Bluetooth Serial Uart HM10 HM12 Relay Board AI

 

Continuamos haciendo la TSRB430 BLE pero ahora desde una Raspberry Pi 🙂

Primero instalar ssh y automatizar con:

sudo /etc/init.d/ssh start

y luego con:

boot_enable_ssh.rc renombrar a boot.rc

luego instalar vncserver con:

sudo apt-get install tightvncserver

luego correr vmc server:

vncserver :1 -geometry 1280×800 -depth 16 -pixelformat rgb565

Acceder al ble uart del rpi para detectar tsrb430:

PL2032 – AT+ADDR?

74DAEAB314A5

AT+CONNL

pasando el codigo a un py script:

PRIMERO SCRIPT PARA CONNL

import serial

ser = serial.Serial(

port=’/dev/serial0′,

baudrate=9600,

parity=serial.PARITY_NONE,

stopbits=serial.STOPBITS_ONE,

bytesize=serial.EIGHTBITS,

timeout=1

)

print “Serial esta abierto: ” + str(ser.isOpen())

print “Escribiendo…”

#ser.write(“o”)

ser.write(“AT+CONNL”)

print “Escrito!  Ahora leamos…”

AHORA LA CORREMOS…

pi@raspberrypi:~/Documents/python $ python togglerelay.py

Serial esta abierto: True

Escribiendo…

Escrito!  Ahora leamos…

got ‘OK+CONNLOK+CONN’

pi@raspberrypi:~/Documents/python $

Requisitos

  1. RPi2
  2. Modulo Serial HM10 BLE
  3. TSRB430 Relay Board

Raspberry Pi2 Codigo

</pre>
#!/usr/bin/env python
import serial
ser = serial.Serial(
	port='/dev/serial0',
	baudrate=9600,
	parity=serial.PARITY_NONE,
	stopbits=serial.STOPBITS_ONE,
	bytesize=serial.EIGHTBITS,
	timeout=1
)
print "Serial esta abierto:" + str(ser.isOpen())
print "Escribiendo..."
ser.write("e")
#ser.write("AT+CONNL")
print "Escrito!  Ahora leamos..."
x = ser.readline()
print "got '" + x + "'"
ser.close()

Aqui enviamos el codigo e al relay board y podemos ver que el relay se cierra.

 

En el proximo tutorial veremos como leer los estados de los relay.

IoT Arduino-Raspberry Pi Hackeando una TSRB430 BLE Relay Board P1

Raspberry Pi 2 Bluetooth Serial Uart HM10 HM12 Relay Board AI by Santiapps Marcio Valenzuela
Raspberry Pi 2 Bluetooth Serial Uart HM10 HM12 Relay Board AI

 

En realidad vamos a usar los comandos especificados por el fabricante, asi que técnicamente no es hacking, pero suficiente cerca 🙂

Requisitos

  1. Arduino MCU
  2. Modulo Serial HM10 BLE
  3. TSRB430 Relay Board

Arduino Code

#include <SoftwareSerial.h>
int bluetoothTx = 10; // TX-O pin of bluetooth
int bluetoothRx = 11; // RX-I pin of bluetooth
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup(){
Serial.begin(9600); // Begin the serial monitor at 9600bps
delay(200); // Short delay, wait for the Mate to send back CMD
bluetooth.begin(9600); // Start bluetooth serial at 9600
Serial.print("send...");
// bluetooth.print("AT");
//bluetooth.print("e"); //open relay 1
//delay(2000);
//bluetooth.print("o"); //close relay 1
}
void loop(){
if(bluetooth.available()){
Serial.print((char)bluetooth.read());
}
if(Serial.available()){
bluetooth.print((char)Serial.read());
}
}
void activateTSRB430() {
Serial.print("commanding...");
bluetooth.print("110");
delay(3000);
bluetooth.print("100");
delay(2000);
}

Con este codigo conectamos un Arduino MCU con un modulo serial bluetooth y enviamos comandos una relay board TSRB430 HM-10 BLE.

Ahora hagamos lo mismo pero desde una RPi!

Requisitos

  1. RPi2
  2. Modulo Serial HM10 BLE
  3. TSRB430 Relay Board

Raspberry Pi2 Code

</pre>
#!/usr/bin/env python
import serial
ser = serial.Serial(
	port='/dev/serial0',
	baudrate=9600,
	parity=serial.PARITY_NONE,
	stopbits=serial.STOPBITS_ONE,
	bytesize=serial.EIGHTBITS,
	timeout=1
)
print "Serial is open: " + str(ser.isOpen())
print "Now Writing"
ser.write("e")
#ser.write("AT+CONNL")
print "Did write, now read"
x = ser.readline()
print "got '" + x + "'"
ser.close()

Aqui enviamos el codigo e al relay board y podemos ver que el relay se cierra.

En el proximo tutorial veremos que podemos hacer con esta conexión.

Arduino (IoT): Simple Tutorial Medición de Corriente UNO vs NANO

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Medición de Corriente UNO vs Nano

En un tutorial anterior vimos como medir la corriente de un MCU, en ese caso una Tosduino UNO.  El consumo era de 46.5mA mientras esta activa.  Luego la pusimos a dormir mediante un sketch y el consumo bajó a 33.3mA.

En este caso lo comparamos con el consumo de una Tosduino Nano (equivalente a una Arduino Nano) y el consumo es de 28.1mA y baja a 21.1mA mientras duerme.

Aquí podemos ver las imágenes de la diferencia en consumo entre la UNO utilizada arriba (anteriormente) versus la Nano:

Arduino IoT Consumo Energético Uno vs Nano Santiapps Marcio Valenzuela
Arduino IoT Consumo Energético Uno vs Nano

Ahora veamos al poner la Nano en Sleep Mode:

Arduino IoT Consumo Energético Uno vs Nano Santiapps Marcio Valenzuela
Arduino IoT Consumo Energético Uno vs Nano

 

Arduino (IoT): Simple Tutorial Proyecto Iluminación Nocturna v2

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Proyecto Iluminación Nocturna v2

En un tutorial anterior vimos el proyecto de iluminación nocturna y si medimos su consumo con una Nano, vemos que el consumo es de 28.8mA.  Si un día tiene 24 horas estamos hablando de 28.8mA x 24hrs = 691mAh.  Una paquete de baterías 1.5V en serie tienen una capacidad de alrededor de 2500mAh.  Esto significa que nuestro proyecto podría operar durante 2500/691 = 3.6 días.

Hay mucho que se puede hacer para reducir el consumo energético de la MCU.  Como vimos podíamos reducir su consumo a 21.1mA en Sleep Mode pero aun así estamos hablando de 4.9 días de operación.  Como es posible que los juguetes duren mas?  Bueno, las MCU tienen un consumo energético alto debido a la LED que llevan y le regulador de voltaje.  Remover estos componentes puede mejorar el consumo a unos 12mA, lo cual nos daría 8.7 días.

Lo ideal es hacer un IC especifico a nuestro proyecto, sin embargo a menos que tengamos nuestra propia linea de producción, eso es muy costoso.  Otra opción es remover la MCU por completo, lo cual por suerte, en nuestro proyecto de iluminación nocturna es posible.  El PIR tiene la opción de conectarle un photoresistor que lo activara solo en la noche.  Luego usamos la fuente de poder para alimentar el PIR que produce una señal que en lugar de llevarla a una MCU para procesamiento, la conectamos a un transistor que amplifica la corriente para encender la LED cuando el PIR se dispara.

El proyecto final se mira asi:

Arduino (IoT) Simple Tutorial Iluminación Nocturna sin MCU Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Iluminación Nocturna sin MCU

Esto reduce el consumo a básicamente los 20mA de la LED, que los consumirá durante 10 segundos cada ciclo de disparo.  Si asumimos unos 10 ciclos por noche, en realidad por día o 24 hrs, hablamos de un consumo de 100 segundos al dia.  Esto es alrededor de 0.03hrs, ósea 20mA x 0.03hrs = 0.55mAh lo cual, para 2500mAh de capacidad equivale a 4,166 días.

Arduino (IoT): Simple Tutorial Arduino PHP Web JSON/XML

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Arduino PHP Web JSON/XML

En este tutorial aprendemos a interfaz entre servicios web como openweather.org y lenguajes como PHP para parse JSON o XML y alimentar la Arduino.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Servidor Linux/PHP
  4. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino IoT Simple Tutorial Web JSON XML Santiapps Marcio Valenzuela
Arduino IoT Simple Tutorial Web JSON XML

OpenWeather:

http://api.openweathermap.org/data/2.5/weather?q=Amsterdam,NL&units=metric&appid=suID

Resultado:

{"coord":{"lon":4.89,"lat":52.37},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],"base":"cmc stations","main":{"temp":24.17,"pressure":1013.79,"humidity":39,"temp_min":24.17,"temp_max":24.17,"sea_level":1013.72,"grnd_level":1013.79},"wind":{"speed":8.56,"deg":79.5083},"clouds":{"all":12},"dt":1463065042,"sys":{"message":0.0123,"country":"NL","sunrise":1463024893,"sunset":1463081183},"id":2759794,"name":"Amsterdam","cod":200}

PHP:

[/code]
<?php
 // retrieve the current weather in Amsterdam in degrees Celcius
 $json = file_get_contents('http://api.openweathermap.org/data/2.5/weather?q=Amsterdam,NL&units=metric&appid=suID');

// parse the JSON
$data = json_decode($json);

// show the city (and the country)
echo ‘<h1>’, $data->name, ‘ (‘, $data->sys->country, ‘)</h1>’;

// the general information about the weather
echo ‘<h2>Temperature:</h2>’;
echo ‘<p><strong>Current:</strong> ‘, $data->main->temp, ‘&deg; C</p>’;
echo ‘<p><strong>Min:</strong> ‘, $data->main->temp_min, ‘&deg; C</p>’;
echo ‘<p><strong>Max:</strong> ‘, $data->main->temp_max, ‘&deg; C</p>’;

// something about the air
echo ‘<h2>Air</h2>’;
echo ‘<p><strong>Humidity:</strong> ‘, $data->main->humidity, ‘%</p>’;
echo ‘<p><strong>Pressure:</strong> ‘, $data->main->pressure, ‘ hPa</p>’;

// and about the wind
echo ‘<h2>Wind</h2>’;
echo ‘<p><strong>Speed:</strong> ‘, $data->wind->speed, ‘ m/s</p>’;
echo ‘<p><strong>Direction:</strong> ‘, $data->wind->deg, ‘&deg;</p>’;

// and what the weather is according to the API (an array)
echo ‘<h2>The weather</h2>’;
echo ‘<ul>’;
foreach ($data->weather as $weather) {
echo ‘<li>’, $weather->description, ‘</li>’;
}
echo ‘<ul>’;
?>

[/code]

 

Resultado:

Arduino IoT Simple Tutorial Web JSON XML
Arduino IoT Simple Tutorial Web JSON XML

Ahora queremos obtener el forecast de los próximos 5 días:

[/code]
<?php
// retrieve the current weather in Amsterdam in degrees Celcius
$json = file_get_contents('http://api.openweathermap.org/data/2.5/forecast?q=SanPedroSula,HN&units=metric&appid=suID');

// parse the JSON
$data = json_decode($json);

// show the city (and the country)
echo ‘<h1>’, $data->city->name, ‘ (‘, $data->city->country, ‘)</h1>’;

for ($x = 0; $x <= 39; $x++) {
// the general information about the weather
echo ‘<h2>Data for ‘,$data->list[$x]->dt_txt,’:</h2>’;
echo ‘<p><strong>Temp_range:</strong> ‘, $data->list[$x]->main->temp_min, ‘ – ‘, $data->list[$x]->main->temp_max, ‘&deg; C</p>’;
echo ‘<p><strong>Pressure:</strong> ‘, $data->list[$x]->main->pressure, ‘</p>’;
echo ‘<p><strong>Humidity:</strong> ‘, $data->list[$x]->main->humidity, ‘</p>’;
echo ‘<p><strong>Weather:</strong> ‘, $data->list[$x]->weather[0]->description, ‘</p>’;
}
?>

[/code]

Para poder servir la info en un arreglo podemos usar este código:

<?php
// retrieve the current weather in Amsterdam in degrees Celcius
$json = file_get_contents('http://api.openweathermap.org/data/2.5/forecast?q=SanPedroSula,HN&units=metric&appid=suID');
// parse the JSON
$data = json_decode($json);</pre>
// show the city (and the country)
//echo '<h1>', $data->city->name, ' (', $data->city->country, ')</h1>';

//create master array
$masterArray = array();
for ($x = 0; $x <= 39; $x++) {
$dataArray = array("timestamp" => $data->list[$x]->dt_txt,
"temp_min" => $data->list[$x]->main->temp_min,
"temp_max" => $data->list[$x]->main->temp_max,
"pressure" => $data->list[$x]->main->pressure,
"humidity" => $data->list[$x]->main->humidity,
"weather" => $data->list[$x]->weather[0]->description);
//echo '<pre>'; print_r($dataArray); echo '</pre>';
array_push($masterArray, $dataArray);
} //end for loop
echo '<pre>'; print_r($masterArray); echo '</pre>';
?>
<pre>

Es importante saber usar server scripts para poder integrarlos a nuestros proyectos de IoT.  Adelante trabajaremos con un proyecto que lee los datos que posteamos de un modulo Arduino a la web para alimentar un proyecto mas avanzado de AI residencial.

Arduino (IoT): Simple Tutorial Válvula Solenoide con un BJT

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Válvula Solenoide con un BJT

En este tutorial continuamos aprendiendo sobre como controlar solenoides.  En el anterior lo hicimos via un FET pero esta vez lo hacemos via un BJT.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Válvula Solenoide de 12V
  4. TIP120 Transistor
  5. Diode
  6. 2 baterias de 9V
  7. Breadboard
  8. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino IoT: Simple Tutorial Valvula Solenoid Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Valvula Solenoid

Una válvula solenoide no es mas que una válvula controlada por un electromagnet, que es esencialmente un motor invertido.  Sabemos entonces que los motores generan contra corrientes.  Como podemos ver en el diagrama de arriba, debemos alimentar la válvula de una fuente y proteger el cerebro (Arduino) de las contra corrientes a través de un diodo.

Al mismo tiempo debemos controlar el flujo de corriente a la válvula a través de un transistor.  Para esto es posible usar un TIP120, enviarle una señal por medio del GATE o BASE.  Podemos ver el siguiente diagrama:

Arduino IoT: Control Solenoid con Arduino Santiapps Marcio Valenzuela
Arduino IoT: Control Solenoid con Arduino

Aquí vemos como una señal desde el pin 13 hacia el Gate del TIP120 abre el flujo para que la solenoide complete el circuito a tierra y como el diodo controla dicho flujo en una sola dirección.

Como seleccionar un BJT:

VCB

VCE

VEB

IC

VBEon

El código:

/* BJT TIP-120
This sketch will blink a LED and at the same time, use the MOSFET to open a 12V solenoid.
Arduino D10 : To LED (Through 330 Ohm Resistor)
Arduino D02 : To MOSFET Gate
*/
int ledPin = 10; // Connect the pin to Arduino pin 10
int mosfetPin = 2; // Connect the MOSFeT Gate (first pin on the left, when writing on the chip is facing you) to Arduino pin 2
void setup(){
 pinMode(ledPin, OUTPUT);
 pinMode(mosfetPin, OUTPUT);
}
void loop(){
 digitalWrite(ledPin, HIGH);
 digitalWrite(mosfetPin, HIGH);
 delay(60000); // Will turn both the LED and the MOSFET on for 60s, it gives you plenty of time to see if water is flowing as expected!
 digitalWrite(ledPin, LOW);
 digitalWrite(mosfetPin, LOW);
 delay(5000); // Will shut down everything for 5s and restart.
}

 

Controlar el flujo de un liquido puede ser muy util para regar plantas y muchas otras aplicaciones mas.

Arduino (IoT): Simple Tutorial Válvula Solenoide con MOSFET

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Válvula Solenoide con MOSFET

En este tutorial introducimos otros switch digital basado en transistores, el MOSFET!

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Válvula Solenoide de 12V
  4. MOSFET IRLB-8721
  5. Diode
  6. Batería 12VDC Lead-Acid (de algún UPS)
  7. Breadboard
  8. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino IoT: Simple Tutorial Solenoide con MOSFET by Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Solenoide con MOSFET

Una válvula solenoide no es mas que una válvula controlada por un electromagnet, que es esencialmente un motor invertido.  Sabemos entonces que los motores generan contra corrientes.  Como podemos ver en el diagrama de arriba, debemos alimentar la válvula de una fuente y proteger el cerebro (Arduino) de las contra corrientes a través de un diodo.

Entra el MOSFET!  Este dispositivo es muy similar a un transistor BJT como el TIP-120, pero es capaz de operar a mayores voltages.  Y esa es la clave, porque a diferencia de un BJT, el flujo de corriente no se activa por medio de un flujo de corriente a la Base como en el caso del BJT.  En el caso del MOSFET el flujo de corriente se activa con un campo (field) eléctrico en la Base.

Otra diferencia es que donde en un BJT tenemos la Base, en el MOSFET tenemos el Gate.  Y el flujo de corriente que queremos controlar no es entre Emitter y Collector sino entre Source y Drain.

Arduino IoT: Simple Tutorial Valvula Solenoid Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Valvular Solenoid with MOSFET

Aquí vemos como una señal desde el pin 3 hacia el Gate del MOSFET IRLB8721 abre el flujo para que la solenoide complete el circuito a tierra y como el diodo controla dicho flujo en una sola dirección.

Como seleccionar un MOSFET:

Vds

Vgs

RDSon

ROJA

El código:

/* MOSFET IRLB8721
This sketch will blink a LED and at the same time, use the MOSFET to open a 12V solenoid.
Arduino D10 : To LED (Through 330 Ohm Resistor)
Arduino D02 : To MOSFET Gate
*/
int ledPin = 13; // Connect the pin to Arduino pin 13
int mosfetPin = 3; // Connect the MOSFeT Gate (first pin on the left, when writing on the chip is facing you) to Arduino pin 3
void setup(){
 pinMode(ledPin, OUTPUT);
 pinMode(mosfetPin, OUTPUT);
}
void loop(){
 digitalWrite(ledPin, HIGH);
 digitalWrite(mosfetPin, HIGH);
 delay(5000); // Will turn both the LED and the MOSFET on for 60s, it gives you plenty of time to see if water is flowing as expected!
 digitalWrite(ledPin, LOW);
 digitalWrite(mosfetPin, LOW);
 delay(5000); // Will shut down everything for 5s and restart.
}

Las conexiones finales usando el perf board se pueden ver aquí:

Arduino IoT: Simple Tutorial Solenoide con MOSFET
Arduino IoT: Simple Tutorial Solenoide con MOSFET

y el video final se puede ver aquí:

Controlar el flujo de un liquido puede ser muy util para regar plantas y muchas otras aplicaciones mas.

Arduino (IoT): Simple Tutorial de Transistores BJT, JFET & MOSFET

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial de Transistores BJT, JFET & MOSFET

En este tutorial hacemos un alto en el camino y repasamos un poco de teoría para entender PN-Junctions, Diodes, BJTs, JFETs y MOSFETs.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Válvula Solenoide de 12V
  4. TIP120 Transistor, Diode N4148, MOSFET IRLB8721
  5. 2 baterias de 9V
  6. Breadboard
  7. Arduino IDE (https://www.arduino.cc/en/Main/Software)

 

Primero entendamos que es un PN-Junction:

pnjunction

Una PN junction se forma al unir 2 semiconductores de distinta composición llamados n-type y p-type.  El n-type tiene mas electrones lo cual atrae hoyos positivos de la p-type.  La p-type tiene mas hoyos positivos lo cual atrae electrones de la n-type.  Esto crea una banda donde no hay flujo eléctrico después de alcanzar este equilibrio debido a que los electrones negativos del n-type quedan bloqueados por la carga positiva de la banda (pn-junction) y vv al otro lado.  Esto es algo muy deseable como veremos.

Arduino IoT PN Junction
Arduino IoT PN Junction

Aquí podemos ver en la izquierda como la banda o pnj creada se llama un Depletion Region a través de la cual no hay flujo eléctrico.  Ahora si conectamos una fuente de poder de forma que le n-type esta conectada a la terminal + de la fuente, los electrones de la n-type son atraídos a la terminal + y vv del otro lado.  Esto agranda la Depletion Zone y el flujo eléctrico se asegura o se restringe aun mas.  Esto se llama Reverse bias y es así como funciona un Diode.

Arduino IoT PN Junction
Arduino IoT PN Junction

En un Diode, si el pnj esta reversed biased, no fluye corriente. Y de que sirve esto!?  Pues en primera instancia, para restringir el flujo de corriente cuando no lo queremos.  Esto es importante para proteger circuitos delicados y caros.  Ahora veamos como hacer que SI fluya la corriente!

Arduino IoT PN Junction
Arduino IoT PN Junction

Si conectamos la bateria con la terminal + al p-type y vv, lo que hacemos es forward bias.  Ahora a pesar que hay una pnj en el centro del pn sandwich a traves de la cual no hay flujo eléctrico, al conectar la bateria los electrones en el n-type son empujados por los electrones negativos de la bateria.  Los hoyos positivos del p-type son empujados por la terminal positiva de la bateria.  Ahora si hay flujo a traves de la pnj.  Aquí tenemos otra representación del pnj que la hacemos Reverse Bias.

Arduino IoT PN Junction
Arduino IoT PN Junction

 

Ahora hagamos algo mas interesante.  En un sandwich de NPN se crean 2 pnj.  No hay flujo eléctrico a menos que apliquemos un pequeño potencial forward bias entre el Emitter y la Base.  Al lograr esto y teniendo otro potencial mas grande conectado entre Emitter y Collector, y debido a que el Emitter es construido con mucho mas electrones que el Collector, los electrones del Emitter viajan a través de las pnj hacia el Collector y los electrones del Collector son atraídos por la terminal + de la fuente de poder.  Voila!  Ahora tenemos un switch digital y esto se llama un BJT!

Arduino IoT PN Junction
Arduino IoT PN Junction

Ahora pasemos a JFETs…

Arduino IoT BJTs JFETs MOSFETs
Arduino IoT BJTs JFETs MOSFETs

Ahora MOSFETs Depletion…

Arduino IoT BJTs JFETs MOSFETs
Arduino IoT BJTs JFETs MOSFETs

Finalmente MOSFETs Depletion/Enhancement…

Arduino IoT BJTs JFETs MOSFETs
Arduino IoT BJTs JFETs MOSFETs

Tratemos de operar una solenoide usando estos componentes.  Pero primero establezcamos los valores de nuestra solenoide usando un multimeter.

  1. Midamos la resistencia de una VDC = 42Ohms = 285mA
  2. Midamos el amperaje = 195mA

Arduino (IoT): Simple Tutorial de PNJ & Diodes

//rcm-na.amazon-adsystem.com/e/cm?o=1&p=13&l=ez&f=ifr&linkID=50610450ab57eae036291d286ac2abd5&t=santiapps17-20&tracking_id=santiapps17-20

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial de PNJ & Diodes

En este tutorial exploramos la base de BJTs y FETs.

Vimos que es un PN-Junction:

pnjunction

Una PN junction se forma al unir 2 semiconductores de distinta composición llamados n-type y p-type.  El n-type tiene mas electrones lo cual atrae hoyos positivos de la p-type.  La p-type tiene mas hoyos positivos lo cual atrae electrones de la n-type.  Esto crea una banda donde no hay flujo eléctrico después de alcanzar este equilibrio debido a que los electrones negativos del n-type quedan bloqueados por la carga positiva de la banda (pn-junction) y vv al otro lado.  Esto es algo muy deseable como veremos.

Arduino IoT PN Junction
Arduino IoT PN Junction

Aquí podemos ver en la izquierda como la banda o pnj creada se llama un Depletion Region a través de la cual no hay flujo eléctrico.  Ahora si conectamos una fuente de poder de forma que le n-type esta conectada a la terminal + de la fuente, los electrones de la n-type son atraídos a la terminal + y vv del otro lado.  Esto agranda la Depletion Zone y el flujo eléctrico se asegura o se restringe aun mas.  Esto se llama Reverse bias y es así como funciona un Diode.

Una forma diferente de explicar es en este diagrama.  Aquí vemos que cuando una pnj se Forward Bias, fluye corriente de + a -.  (NOTA:Esta es la conceptualizacion convencional de la corriente.  En realidad lo que fluye son los electrones en dirección opuesta).  Es por esto que un diode esta Forward Bias en la dirección que queremos via una Depletion Layer o Region delgada.  Por otro lado, un pnj Reverse Biased ocurre cuando la corriente quiere fluir en sentido contrario.  Es aquí donde la Depletion Region se ensancha y no permite el flujo.

Arduino IoT PNJ Diodes
Arduino IoT PNJ Diodes

Aqui podemos ver otra terminologia:

Arduino IoT PNJ Diodes
Arduino IoT PNJ Diodes

Flujo de corriente (convencional) es de Anodo a Catodo (k), ossa de + a -.  Este flujo si esta permitido en un Diode.

Aqui otra imagen:

Arduino IoT PNJ Diodes
Arduino IoT PNJ Diodes

Nuevamente, la corriente convencional no se permite fluir de Catodo a Anodo pero si de Anodo a Catodo.

Arduino (IoT): Simple Tutorial Seguridad Biometrica Huella Digital 3/3

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Seguridad Biometrica Huella Digital

En este tutorial usamos un modulo biometrico de huella digital para brindar seguridad a nuestros proyectos.

Arduino (IoT) Simple Tutorial Seguridad Biometrica Huella Digital Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Seguridad Biometrica Huella Digital

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. FPS GT511-c1R FPS
  4. Resistores
  5. Breadboard
  6. Arduino IDE (https://www.arduino.cc/en/Main/Software)

El setup continua igual.  Ahora cambiamos el codigo para comparar las huellas digitales en el modulo.

Arduino (IoT) Simple Tutorial Seguridad Biometrica Huella Digital Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Seguridad Biometrica Huella Digital

El código:

</pre>
<pre>#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"
//FPS connected to pin 4 and 5 - see previous schemas
FPS_GT511C3 fps(4, 5);
void setup(){
  Serial.begin(9600);
  delay(100);
  fps.Open();
  fps.SetLED(true);
}
void loop(){
  // if a finger is on the sensor
  if (fps.IsPressFinger()){
    //capture the finger print
    fps.CaptureFinger(false);
    //get the id
    int id = fps.Identify1_N();
    //maximun finger print stored in 200. 
    //Id > 200 is a not recognized one
    if (id <200){
      //finger print recognized: display the id
      Serial.print("Verified ID:");
      Serial.println(id);
      // ...
      // add you code here for the condition access allowed
      // ...
    }else{
      //finger print not recognized
      Serial.println("Finger not found");
       // ...
      // add you code here for the condition access disallowed
      // ...
    }
  }else{
    // wait for finger
    Serial.println("Please press finger");
  }
  delay(100);
}

Al conectar la UNO podemos comparar nuestra huella digital.  Si quisiéramos borrar las huellas digitales solo tenemos que usar el comando:

fps.<span class="pl-c1">DeleteAll</span>();