Módulos Arduino y Raspberry Pi
KY-001: Módulo sensor de temperatura DS18B20
Descripción:
Módulo sensor de temperatura entre 55°C bajo cero y 125°C
Rango de Voltaje: 3.0 V ~ 5.5 V
Rango de Temperatura: -55°C ~ +125°C
Rango de Temperatura: 67°F ~ 257°F
Rango de Precisión: ±0.5°C
Hoja de datos: https://cdn.sparkfun.com/datasheets/Sensors/Temp/DS18B20.pdf
Conexión Arduino:
Código Arduino:
Requisito librería OneWire: https://github.com/PaulStoffregen/OneWire.git
#include // DS18S20 Temperatura chip i/o OneWire ds(2); // Inicializamos el pin 2 void setup(void) { // Inicializamos el puerto serie en 9600 baudios Serial.begin(9600); } void loop(void) { // Creamos las variables para convertir a grados centigrados int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; byte i; byte present = 0; byte data[12]; byte addr[8]; if ( !ds.search(addr)) { Serial.print("Sin mas direcciones.n"); ds.reset_search(); return; } Serial.print("R="); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC invalido!n"); return; } if ( addr[0] == 0x10) { Serial.print(" Es un dispositivo de la familia DS18S20.n"); } else if ( addr[0] == 0x28) { Serial.print("Es un dispositivo de la familia DS18S20 .n"); } else { Serial.print("Dispositivo desconocido: 0x"); Serial.println(addr[0],HEX); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); // Comienza la conversion delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); Serial.print("P="); Serial.print(present,HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // Necesitamos leer 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print( OneWire::crc8( data, 8), HEX); Serial.println(); //Conversion de datos a grados centigrados LowByte = data[0]; HighByte = data[1]; TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; if (SignBit) { TReading = (TReading ^ 0xffff) + 1; } Tc_100 = (6 * TReading) + TReading / 4; Whole = Tc_100 / 100; Fract = Tc_100 % 100; if (SignBit) { Serial.print("-"); } Serial.print(Whole); Serial.print("."); if (Fract < 10) { Serial.print("0"); } Serial.print(Fract); Serial.print("n"); }
Conexión Raspberry Pi:
Para activar la comunicación entre la Raspberry Pi y el sensor DS18B20 debemos agregar información al final del archivo config.txt.
Abrimos Terminal y tecleamos:
- sudo nano /boot/config.txt
y al final del archivo agregamos la siguiente línea:
- dtoverlay=w1-gpio,gpiopin=4
Presionamos Ctrl + x, luego y, finalmente enter. Para guardar los cambios.
Reiniciamos con:
Código Raspberry Pi:
# coding=utf-8 # Importamos los módulos necesarios import glob import time from time import sleep import RPi.GPIO as GPIO # tiempo entre mediciones sleeptime = 1 # Habilitamos la resistencia Pull UP GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Luego de habilitada la resistencia Pull UP debemos esperar que inicie el sensor print('aguarda que inicie el sensor...') base_dir = '/sys/bus/w1/devices/' while True: try: device_folder = glob.glob(base_dir + '28*')[0] break except IndexError: sleep(0.5) continue device_file = device_folder + '/w1_slave' # Definimos la funcion de medición de temperatura. def Medicion(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines Medicion() def EvaluarMedicion(): lines = Medicion() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = Medicion() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 return temp_c # loop try: while True: print('---------------------------------------') print("Temperatura:", EvaluarMedicion(), "°C") time.sleep(sleeptime) except KeyboardInterrupt: GPIO.cleanup()
Para correr el programa abrimos terminal y tecleamos:
KY-002 : Modulo Sensor de Vibración
Descripción:
Este módulo sensor de vibraciones funciona como un Switch, al detectar una vibración cierra
un circuito lo que genera que el usuario pueda detectar los movimientos.
Conexión Arduino:
Código Arduino:
int Led = 13 ; // Declara la variable entera LED y le asigna el Pin 13 int Sensor = 10; // Declara la variable entera Sensor y le asigna el Pin 10 int val; // Declara la variable entera val void setup () { pinMode (Led, OUTPUT) ; pinMode (Sensor, INPUT) ; digitalWrite(Sensor, HIGH); } void loop () { val = digitalRead (Sensor) ; // La senial actual del sensor sera leida y asignada a val if (val == HIGH) // Si una senial es detectada el led se encendera { digitalWrite (Led, LOW); } else { digitalWrite (Led, HIGH); } }
Conexión Raspberry Pi:
Código Raspberry Pi:
# Se importan los modulos necesarios import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # Se declara el Pin de entrada del sensor y se activa la resistencia pull-up. GPIO_PIN = 24 GPIO.setup(GPIO_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP) print("Probar Sensor [presiona ctrl+c para terminar la prueba]") # Esta funcion sera llamada al detectarse el sensor def outFunction(null): print("Senial detectada") # Al momento de detectar una senial se llamara a la funcion outFunction y se la activara GPIO.add_event_detect(GPIO_PIN, GPIO.FALLING, callback=outFunction, bouncetime=100) # loop try: while True: time.sleep(1) # se limpian los GPIO luego de terminado el programa except KeyboardInterrupt: GPIO.cleanup()
Para correr el programa abrimos terminal y tecleamos:
KY-003: Módulo sensor magnético efecto Hall
Descripción:
Este sensor mide un campo magnético. Si existe la presencia de un campo magnético se creará
una señal en alto.
Conexión Arduino:
Código Arduino:
int Led = 13 ; int Sensor = 10; int val; // Declaramos una variable temporal void setup () { pinMode (Led, OUTPUT) ; pinMode (Sensor, INPUT) ; digitalWrite(Sensor, HIGH); } void loop () { val = digitalRead (Sensor) ; if (val == HIGH) { digitalWrite (Led, LOW); } else { digitalWrite (Led, HIGH); } }
Conexión Raspberry Pi:
Código Raspberry Pi:
int Led = 13 ; int Sensor = 10; int val; // Declaramos una variable temporal void setup () { pinMode (Led, OUTPUT) ; pinMode (Sensor, INPUT) ; digitalWrite(Sensor, HIGH); } void loop () { val = digitalRead (Sensor) ; if (val == HIGH) { digitalWrite (Led, LOW); } else { digitalWrite (Led, HIGH); } }
Para correr el programa abrimos terminal y tecleamos:
KY-004: Módulo botón interruptor
Descripción:
Este módulo tiene integrado un interruptor común con una resistencia de 10 kΩ.
Conexión Arduino:
Código Arduino:
int Led = 13; int Sensor = 10; int val; void setup () { pinMode (Led, OUTPUT) ; pinMode (Sensor, INPUT) ; digitalWrite(Sensor, HIGH); } void loop () { val = digitalRead (Sensor) ; if (val == HIGH) { digitalWrite (Led, LOW); } else { digitalWrite (Led, HIGH); } }
Conexión Raspberry Pi:
Código Raspberry Pi:
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO_PIN = 24 GPIO.setup(GPIO_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP) print ("Sensor-Test [press ctrl+c to end it]") def outFunction(null): print("Signal detected") GPIO.add_event_detect(GPIO_PIN, GPIO.FALLING, callback=outFunction, bouncetime=100) # loop try: while True: time.sleep(1) except KeyboardInterrupt: GPIO.cleanup()
Para correr el programa abrimos terminal y tecleamos: