Hall-effect switches are monolithic integrated circuits with tighter magnetic specifications (meaning that the sensor is one piece, has increased sensitivity to magnetic fields, and that everything needed is already built directly into the sensor), suitable for continuous operation over temperatures up to +150°C, and are more stable to temperature and supply voltage changes. Each unit includes a voltage regulator for operation with supply voltages from 4.5 to 24 volts, a reverse polarity protection diode, a square Hall voltage generator, temperature compensation circuitry, small signal amplifier, Schmitt trigger and an open collector output to sink up to 25 mA. The transistor switches through if the module is held in a magnetic field. This can then be read out at the signal output as an analog voltage value. The sensitivity of the sensor can be controlled by means of the potentiometer.

Digital output: If a magnetic field is detected, a signal is output here.

Analog output: Direct measured value of the sensor unit

LED1: Indicates that the sensor is supplied with voltage

LED2: Indicates that a magnetic field has been detected

Technical data

Chipset A3141
Sensor Type Hall Effect Transistor/Switch
Accuracy 9 to 12 Bit
Measuring range -40°C up to +150°C
Functional range 4.5V up to 24V

Functionality of the sensor

This sensor has three functional components on its circuit board. The first is the sensor unit at the front of the module, which physically measures the current environment and outputs it as an analog signal to the second unit, the amplifier. This amplifies the signal depending on the resistance set on the rotary potentiometer and sends it to the analog output of the module.

It should be noted here: The signal is inverted; if a high value is measured, this results in a lower voltage value at the analog output.

The third unit is a comparator, which switches the digital output and the LED when the signal falls below a certain value. By means of the rotary potentiometer the sensitivity can be adjusted as shown in the following figure:

This sensor does not give absolute values (e.g. exactly measured temperature in °C or magnetic field strength in mT), but it is a relative measurement: One defines a limit value relative to the given normal environmental situation and a signal is given, which can be further processed, if this limit value is exceeded or another state than the normal case has occurred.

This behavior is excellent for temperature monitoring (KY-028), proximity switches (KY-024, KY-025, KY-036), alarm monitors (KY-037, KY-038), or encoders (KY-026).

Pin assignment

Code example Arduino

Pin assignment Arduino

Arduino Sensor
5V +V
ground GND
Pin 3 Digital Signal
Pin A0 Analog Signal

The program reads the current voltage value which can be measured at the analog output and outputs it to the serial interface.

In addition, the state of the digital pin is also indicated in the console, which means whether the value has fallen below the limit or not.

// Declaration and initialization of the input pins
int Analog_Input = A0; // Analog output of the sensor
int Digital_Input = 3; // Digital output of the sensor
  
void setup ()
{
  pinMode (Analog_Input, INPUT);
  pinMode (Digital_Input, INPUT);
       
  Serial.begin (9600); // Serial output with 9600 bps
}

// The program reads the current values of the input pins
// and outputs them to the serial output
void loop ()
{
  float Analog;
  int Digital;
    
  //Actual values are read, converted to the voltage value....
  Analog = analogRead (Analog_Input) * (5.0 / 1023.0); 
  Digital = digitalRead (Digital_Input);
    
  //... and output at this position
  Serial.print ("Analog voltage value:"); Serial.print (Analog, 4); Serial.print ("V, ");
  Serial.print ("Limit value:");
  
  if(Digital==1)
  {
      Serial.println (" reached");
  }
  else
  {
      Serial.println (" not yet reached");
  }
  Serial.println ("----------------------------------------------------------------");
  delay (200);
}

Sample program download

KY024-Arduino.zip

Code example Raspberry Pi

Pin assignment Raspberry Pi

Analog sensor, so the following must be noted.

In contrast to the Arduino, the Raspberry Pi has no analog inputs or there is no ADC (analog digital converter) integrated in the chip of the Raspberry Pi. This limits the Raspberry Pi, if you want to use sensors, where not digital values are output [voltage value exceeded -> digital ON | voltage value undercut -> digital OFF | example: button pressed [ON] button released [OFF]], but it should be a continuous variable value (example: potentiometer -> other position = other voltage value).

To avoid this problem, our sensor kit X40 has the KY-053, a module with 16 bit accurate ADC, which you can use on the Raspberry to expand it with 4 analog inputs. This module is connected to the Raspberry Pi via I2C, takes over the analog measurement and passes the value digitally to the Raspberry Pi.

Thus, we recommend to connect the KY-053 module with the said ADC in between for analog sensors of this set. More information can be found on the information page about the KY-053 Analog Digital Converter.

The program uses the corresponding ADS1x15 and I2C Python libraries from Adafruit to control the ADS1115 ADC. These have been published at the following link https://github.com/adafruit/Adafruit_CircuitPython_ADS1x15 under the MIT license. The required libraries are not included in the download package below.

The program reads the current values of the input pins and outputs them to the console as a value in [mV].

#!/usr/bin/python
# coding=utf-8

import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# Create the I2C bus
i2c = busio.I2C(board.SCL, board.SDA)

# Create the ADC object using the I2C bus
ads = ADS.ADS1115(i2c)

# Create single-ended input on channels
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
chan2 = AnalogIn(ads, ADS.P2)
chan3 = AnalogIn(ads, ADS.P3)

delayTime = 1
Digital_PIN = 24

GPIO.setup(Digital_PIN, GPIO.IN, pull_up_down = GPIO.PUD_OFF)

while True:
                analog = '%.2f' % chan0.voltage
 
                # output to console
                if GPIO.input(Digital_PIN) == False:
                        print ("Analog voltage value:", analog, "V, ", "Limit: not yet reached")
                else:
                        print ("Analog voltage value:", analog, "V, ", "Limit: reached")
                print ("---------------------------------------")
 
                # reset + delay
                button_pressed = False
                time.sleep(delayTime)

Sample program download

KY024-RPi.zip

To start with the command:

sudo python3 KY024.py

Code example Micro:Bit

Pinout Micro:Bit:

Micro:Bit Sensor
Pin 0 A0
Pin 1 D0
3V +V
Ground GND

This is a MakeCode example for Micro:Bit which essentially does the same as the examples of the other two variants. However, this example is closer to the Raspberry Pi example than the Arduino example.

Sample program download

microbit-KY-024.zip