Kit de 37 sensores de Arduino-Raspberry (Ky-001…Ky-004) Primera Parte Deja un comentario

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:

Saludos Ditecno Makers hasta el momento vimos del Ky-001 hasta el Ky-004. Si quieres ver los

Modulos  Ky-005 hasta el modulo Ky-010 para Arduino y Raspberry

Hasta pronto donde seguiremos con este tutorial… LUCIANO

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?