HiTechnic NXT Magnetic Sensor for LEGO Mindstorms NXT
The sensor detects magnetic fields when the orientation of the magnet is as shown below.
When the orientation of the magnetic field has north uppermost, the reading will increase. If the magnet is presented sideways, it may not be detected.
The Magnetic Sensor connects to an NXT sensor port using a standard NXT wire and uses the analog sensor interface. The sensor can be read up to approximately 300 times per second.
The Magnetic Sensor is housed in a standard Mindstorms sensor housing to match the other Mindstorms elements.
To quick test your new sensor, plug it into port 1 of your NXT brick and select View – Ambient light – Port 1. As you bring a magnet close to the front of the sensor, you'll notice that the readings will change as the magnet gets closer.
The Magnetic Sensor Block provides access to the sensor output in addition to other features.
- The number shows which of your NXT's ports are connected to the Magnetic Sensor. You can change this number in the configuration panel if you need to.
- The block's data hub will open automatically when the block is placed in the work area. At least one data wire must be dragged from the block's output plug to another block's data hub. (See the Data Hub section below for more information.)
Configuring the Magnetic Sensor Block
The sensor may be connected directly to an NXT sensor port or via the HiTechnic Sensor Multiplexer (MUX). When configuring the sensor via the multiplexer, there are two port selections to make. The first is the NXT to MUX connection and the second, the MUX to SENSOR connection.
The Magnetic Reading output indicates the relative strength of the magnetic field measured. When the sensor is not in the proximity of a magnetic field, the output should be zero. Due to manufacturing tolerances, temperature and other effects, the output may be a small positive or negative number. To cancel out this zero offset error, also referred to as bias, an offset input can be applied.
The simplest way to measure and offset the bias, is to keep the sensor away from magnetic fields and read the output with the Offset value set to zero. This value can then be used in the future as the Offset value which will then cause the output value to be zero when no magnetic field is present.
Other Programming Environments
NXC is a C like programming language that can access all the features of this sensor.
For more information go to http://bricxcc.sourceforge.net/nbc/.
Example NXC Code
// The Magnet sensor has the same interface as the Gyro Sensor.
// These are temporary macros until native functions are available
// in the official NXC release.
#define SensorHTMagnet(port,offset) SensorHTGyro(port,offset)
#define SetSensorHTMagnet(port) SetSensorHTGyro(port)
#define MAGNET IN_1
int offset, magnetic_value;
TextOut(0, LCD_LINE1, "HiTechnic");
TextOut(0, LCD_LINE2, " Magnetic Sensor");
TextOut(0, LCD_LINE4, "Calibrating, ");
TextOut(0, LCD_LINE5, "keep magnets");
TextOut(0, LCD_LINE6, "away...");
//Get inital offset assuming no magnetic field is present.
offset = SensorHTMagnet(MAGNET, 0);
TextOut(0, LCD_LINE4, " Value: ");
TextOut(0, LCD_LINE5, " ");
TextOut(0, LCD_LINE6, " ");
magnetic_value = SensorHTMagnet(MAGNET, offset);
TextOut(6*7, LCD_LINE5, " ");