ماژول رید سوئیچ

ماژول رید سوئیچ  KY-025 یک سوئیچ الکتریکی کوچک است که توسط یک میدان مغناطیسی که در مجاورت سنسور قرار دارد، کار می کند.

این ماژول دارای دو خروجی دیجیتال و آنالوگ است. از تریمر برای کالیبراسیون حساسیت سنسور استفاده می شود. با توجه به شکل زیر خواهیم داشت:

ما یک اتصال الکتریکی دریافت می کنیم و سیگنال را ارسال می کنیم.

خروجی دیجیتال: پس از شناسایی یک میدان مغناطیسی ، یک سیگنال تولید می شود

خریجی انالوگ: اندازه گیری مستقیم واحد سنسور

LED1= نشان می دهد كه سنسور به برق وصل شده است.

LED2= نشان می دهد كه سنسور یك میدان مغناطیسی را تشخیص می دهد.

مشخصات فنی ماژول رید سوئیچ

ماژول KY-025 از یک سوئیچ reed  بطور معمول باز 2×14mm ، یک مقایسه گر دیفرانسیل LM393 ، یک پنانسیومتر trimmer 3296W-104 ، شش مقاومت و دو ال ای دی تشکیل شده است. مشخصات در جدول زیر امده است:

پایه های سوئیچ رید

اتصال پایه های ماژول در برد Arduino و Raspberry Pi در جدول های زیر آورده شده است:

دیاگرام اتصالات

پایه های مختلف ماژول را مطابق جدول بالا و به صورت آنچه در تصویر زیر مشاهده می‌شود به برد آردوینو متصل کنید.

کدهای آردوینو

در کد زیر مقادیر دیجیتال و آنالوگ را از طریق رابط ها در KY-025 می خوانیم (برای تعامل با ماژول به یک آهنربا احتیاج دارید).

رابط دیجیتال با شناسایی یک میدان مغناطیسی، چراغ آردوینو (پین 13)  را روشن می کند.

رابط آنالوگ هنگامی که هیچ میدان مغناطیسی وجود نداشته باشد مقدار عددی HIGH را برمی گرداند و هنگامی که یک آهنربا نزدیک است به صفر می رسد.

int led = 13; // define the LED pin
int digitalPin = 3; // KY-025 digital interface
int analogPin = A0; // KY-025 analog interface
int digitalVal; // digital readings
int analogVal; //analog readings

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(digitalPin, INPUT);
  //pinMode(analogPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  // Read the digital interface
  digitalVal = digitalRead(digitalPin); 
  if(digitalVal == HIGH) // if magnetic field is detected
  {
    digitalWrite(led, HIGH); // turn ON Arduino's LED
  }
  else
  {
    digitalWrite(led, LOW); // turn OFF Arduino's LED
  }

  // Read the analog interface
  analogVal = analogRead(analogPin); 
  Serial.println(analogVal); // print analog value to serial

  delay(100);
}

کدهای رزبری پای

Raspberry PI برخلاف آردوینو، مبدل آنالوگ به دیجیتال (ADC) را در تراشه خود ارائه نمی دهد. بنابراین اگر از سنسور غیر دیجیتال استفاده کنید، Raspbery Pi محدود می شود. برای اجتناب از این موضوع  از ماژول هایی که یک ADC  16 بیتی را ایجاد می کنند مانند ماژول KY-53 استفاده می کنیم تا آن را با 4 پین ورودی آنالوگ اضافی ارتقا دهیم. ماژول  KY-035 از طریق I2C به Raspberry Pi متصل می شود. داده های آنالوگ را اندازه گیری کرده و آن را به یک سیگنال دیجیتال مناسب برای Raspberry Pi تبدیل می کند. بنابراین اگر می خواهید از سنسورهای آنالوگ به همراه Raspberry Pi استفاده کنید، از KY-053 ADC استفاده کنید.

اتصال پایه های ماژول در برد Raspberry Pi در جدول های زیر آورده شده است:

# This code is using the ADS1115 and the I2C Python Library for Raspberry Pi
# import needed modules
import math, signal, sys, os
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# initialise variables
delayTime = 0.5 # in Sekunden
# assigning the ADS1x15 ADC
Export: 16.06.2017 Copyright by Joy-IT - Published under CC BY-NC-SA 3.0 Page 115 of 214
KY-025 Reed module
ADS1015 = 0x00 # 12-bit ADC
ADS1115 = 0x01 # 16-bit
# choosing the amplifing gain
gain = 4096 # +/- 4.096V
# gain = 2048 # +/- 2.048V
# gain = 1024 # +/- 1.024V
# gain = 512 # +/- 0.512V
# gain = 256 # +/- 0.256V
# choosing the sampling rate
# sps = 8 # 8 Samples per second
# sps = 16 # 16 Samples per second
# sps = 32 # 32 Samples per second
sps = 64 # 64 Samples per second
# sps = 128 # 128 Samples per second
# sps = 250 # 250 Samples per second
# sps = 475 # 475 Samples per second
# sps = 860 # 860 Samples per second
# assigning the ADC-Channel (1-4)
adc_channel_0 = 0 # Channel 0
adc_channel_1 = 1 # Channel 1
adc_channel_2 = 2 # Channel 2
adc_channel_3 = 3 # Channel 3
# initialise ADC (ADS1115)
adc = ADS1x15(ic=ADS1115)
# Input pin for the digital signal will be picked here
Digital_PIN = 24
GPIO.setup(Digital_PIN, GPIO.IN, pull_up_down = GPIO.PUD_OFF)
# main program loop
# The program reads the current value of the input pin
# and shows it at the terminal
try:
while True:
#Current values will be recorded
analog = adc.readADCSingleEnded(adc_channel_0, gain, sps)
# Output at the terminal
if GPIO.input(Digital_PIN) == False:
print "Analog voltage value:", analog,"mV, ","extreme value: not reached"
else:
print "Analog voltage value:", analog, "mV, ", "extreme value: reached"
print "---------------------------------------"
sleep(delayTime)
except KeyboardInterrupt:
GPIO.cleanup()