BMD Sensors Guide

From EG1004 Lab Manual
Jump to: navigation, search

The purpose of this guide is to provide useful information on common sensors used in the BMD SLDP. Note that sensors made by different brands may differ slightly from the ones mentioned in this guide, but documentation for all sensors are available online. For more information on coding with Arduino, please reference the Arduino Coding Guide.

Gas Sensor

EG1004 provides an Adafruit Gas Sensor. When a gas is detected, the analog voltage will increase in proportion to the gas. This sensor is sensitive to multiple gases, but cannot tell you which gas it detects.

Bmdsg1.jpeg

Wiring

Note: the LED used in the circuit is not required, but could be helpful in regard to testing.

Bmdsg2.png

Pins

  • VCC: 5V
  • Signal: A0 (or any analog pin)
  • GND: ground

Code

As the Adafruit Gas Sensor is an analog sensor, analogRead() will be used to get the analog voltage reading from the sensor.

Bmdsg3.png

To see the value read by the sensor, use a print statement in the loop area of your code. Make sure to initialize the serial monitor by including Serial.begin(9600) in the setup area of your code.

Bmdsg4.png

UV Sensor (GUVA-S12SD)

EG1004 provides a GUVA-S12SD UV Light Sensor Breakout. This sensor uses an UV photodiode to provide an analog voltage output that can then be converted to UV Index. The UV Index scale is published by the EPA, and is used to give guidance on sun exposure. Figure 1 shows the UV index scale, and Figure 2 shows the correlation between voltage, analog value, and UV Index.


Bmdsg5.png
Figure 1: Source
Figure 2: Source

Spectral Detection Range: 240nm to 370nm Power Supply: 2.7V to 5.5V

Wiring

Note: the sensor can be connected to either the 5V or 3.3V power supply.

Bmdsg8.png

Pins

  • +: 5V (or 3.3V)
  • OUT: A0 (or other analog pin)
  • -: Ground

Code

As the GUVA-S12SD is an analog sensor, analogRead() will be used to get the voltage reading from the sensor.

Bmdsg9.png


This initial reading must then be converted to voltage. The formula will differ depending on if you are using the 3.3V or 5V power supply.

  • 3.3V formula → Voltage(V) = reading * (3.3/1024.0)
  • 5V formula → Voltage(V) = reading * (5.0/1024.0)

Below is an example of coding this formula for a 5V power supply. Note that the numbers are in decimal form, this is required in order to get correct voltage values.

Bmdsg10.png

Lastly, this voltage value can be converted to an approximate UV Index using the following formula:

For example, a voltage reading of 0.5V indicates a UV index of about 5.

Temperature Sensor (TMP36)

EG1004 provides an Analog TMP36 temperature sensor. These sensors use the change in voltage to produce an analog signal that is proportional to temperature. TMP36s have a temperature range between -40oC and 150oF. Power supply: 2.7V to 5.5V

Bmdsg12.png

Wiring

Note: the sensor can be connected to either the 5V or 3.3V power pins.

Bmdsg13.png

Pins

  • VCC: 3.3V or 5V
  • Signal: A0 (or any analog pin)
  • GND: ground

Code

As the TMP36 is an analog sensor, analogRead() will be used to get the voltage reading from the sensor.

Bmdsg9.png

This initial reading must then be converted to Voltage. The formula will differ depending on if you are using the 3.3V or 5V power supply.

  • 3.3V formula → Voltage(mV) = reading * (3300.0/1024.0)
  • 5V formula → Voltage(mV) = reading * (5000.0/1024.0)

Below is an example of coding this formula for a 5V power supply. Note that the numbers are in decimal form, this is required in order to get correct temperature values.

Bmdsg15.png

Lastly, this voltage value needs to be converted to Celsius using the following formula:

Temperature (C) = (Voltage(mV) - 500.0) / 10.0

Below is an example of coding this formula. Once again, note the use of the decimal format for the numbers.

Bmdsg16.png

Pulse Sensor

EG1004 provides an ANMBEST Pulse Sensor. This is an optical heart rate sensor (PPG) designed for Arduino. The sensor uses an ambient light sensor to watch for a change in reflected light that occurs when blood pumps through tissue. By setting a standard threshold value, an Arduino can watch the analog signal from the sensor.

Bmdsg17.png
Bmdsg18.png

When the signal passes the threshold, this means a heartbeat has been detected. Once the signal drops below the threshold, the Arduino will wait for the signal to pass the threshold again, indicating another heartbeat.

Power Supply: 3V to 5V

Wiring

Bmdsg19.png

Pins

  • GND (black wire): Ground
  • VCC (red wire): 5V
  • Signal (purple/pink wire): A0 (or other analog pin)

Code

Installing the Library

The PulseSensorPlayground Library must be installed to the Arduino IDE in order to use the sensor. To download the library:

  • Open the Arduino IDE
  • Go to Tools >> Manage Libraries
  • Search for “PulseSensor Playground”
  • Click “Install”

Including the Library

The PulseSensor Playground library provides all the functions/methods needed to interface with the sensor. In order to use these functions, the library itself must be included at the very beginning of the Arduino file. This can be done using the following code:

Bmdsg20.png

Using the Library

In order to use the library, a PulseSensor Playground object must be created. The following code creates an object with the name pulseSensor.

Bmdsg21.png

Next, the sensor object must be configured and initialized. This should be done in the setup() function. In the following code, PulseWire corresponds to the analog pin the sensor is connected to and Threshold corresponds to an integer value used for detecting the heartbeat (a good default threshold value is 550).

Bmdsg22.png

Now that the sensor object has been started, data can now be obtained. The method getBeatsPerMinute() will return the BPM value read by the sensor.

Bmdsg23.png

Another useful method is sawStartOfBeat(). This will return a boolean value depending on whether the sensor detected a new heartbeat. In the following example, sawStartOfBeat() is used to print out a message followed by the current BPM every time the sensor registers a heartbeat.

Bmdsg24.png


The PulseSensor Playground Library also comes with many example codes and tutorials. These can be found on the Pulse Sensor Website.

Real Time Clock (RTC) Module

EG1004 provides a DS3231 Real Time Clock Module. As an Arduino does not keep time, RTC modules use separate batteries to keep consistent time-keeping functions

Bmdsg25.png

Wiring

Note: In order to keep time without being consistently connected to power, you must install a coin battery into the module. They do not come included with the RTC module, but EG1004 does provide CR2032 coin batteries.

Bmdsg26.png

Pins

  • SCL: A5 (or SCL pin)
  • SDA: A4 (or SDA pin)
  • VCC: 5V
  • GND: Ground

Code

Installing the Library

The library EG1004 recommends the Adafruit’s RTClib library to interface with an RTC module. The library must be installed to the Arduino IDE in order to use the module. To download the library:

  • Open the Arduino IDE
  • Go to Tools >> Manage Libraries
  • Search for “RTClib”
  • Click “Install”
    Bmdsg27.png
  • The IDE may ask if you wish to install “all missing dependencies”. In the case this window appears, click “Install All”

Including the Library

The RTClib library provides all the functions/methods needed to interface with the sensor. In order to use these functions, the library itself must be included at the very beginning of the Arduino file. This can be done using the following code:

Bmdsg30.png

Using the Library

In order to use the library, a RTC_DS3231 object must be created. The following code creates an object with the name rtc.

Bmdsg29.png

Next, the module object must be initialized and configured. This should be done in the setup() function. To initialize the module, use the begin() method as shown below.

Bmdsg28.png


Now that the module object has been started, it needs to be configured in order to set the date and time. We only need to configure the time if the RTC has lost power (i.e. been disconnected from a power source or from it’s battery). To configure the module with the current time, use the following code:

Bmdsg31.png

If you would like to set the module to a specific date and time, you can explicitly state these values in the adjust method. The code below will set the RTC to January 21, 2014 at 3am.

Bmdsg32.png

Now that the RTC object has been started, data can now be obtained. The method now() will return the current date and time as a DateTime object. The following code creates a DateTime object called currentDT.

Bmdsg33.png

This DateTime object can now be used to obtain the current year, month, day, day of the week, hour, minute, and second as set by the module. This code prints out this data using the format year/month/day (dayoftheweek) hour:minute:second (eg. 2021/2/14 (0) 14:13:30)

Bmdsg34.png


The RTClib Library also comes with many example codes. These can be found on the Arduino IDE, under File >> Examples >> RTClib.

Force Sensor

EG1004 provides an Adafruit Round Force-Sensitive Resistor (FSR). These specialized resistors rely on electrical shorts for which the resistance changes depending on the pressure.

Bmdsg35.jpeg
Figure 3: Source

This resistance can then be correlated to force. Figure 4 shows the resistance vs force curve. Please note the logarithmic scale, however, the relationship is generally linear above 50g.

Figure 4: Source

Wiring

Note: The 10kresistor is essential for using the FSR. Do not leave it out of the circuit,

Bmdsg38.png

Code

As the FSR provides an analog signal, analogRead() will be used to get the voltage reading from the resistor.

Bmdsg9.png

This voltage reading can then be correlated to various levels of pressure. Here are the threshold values for the below example code.

Threshold Value Pressure Reading
<10 No pressure
Between 10 and 200 Light touch
Between 200 and 500 Light squeeze
Between 500 and 800 Medium squeeze
Above 800 Big squeeze

It’s recommended to test the sensor in order to determine the correct threshold for your FSR.

Bmdsg39.png

The above code works for general correlations of resistance and pressure. If you would like to measure exact values of force, SparkFun provides a good sample code for converting the FSR reading into exact values.

Muscle Sensor

EG1004 provides a Myoware muscle sensor which uses electromyography (EMG) to measure muscle activity. This electrical activity is then converted into a varying voltage which can be read using an Arduino.

Bmdsg40.png

Downloads

Fritzing files for the muscle sensor are not publicly available. EG1004 provides a Fritzing file here.

Wiring

Note: In order to use the muscle sensor, you must also connect electrodes to the snap connectors on the sensor board. Electrodes are electrical conductors through which electricity can enter or leave a nonmetallic object or part of a circuit. They do not come included with the muscle sensor, but EG1004 does provide the Muscle Sensor electrodes.

Bmdsg41.png

Pins

  • +: 5V
  • -: Ground
  • Sig: A0 (or any analog pin)

Code

As the Myoware Muscle Sensor is an analog sensor, analogRead() will be used to get the analog voltage reading from the sensor.

Bmdsg3.png

To see the value read by the sensor, use a print statement in the loop area of your code. Make sure to initialize the serial monitor by including Serial.begin(9600) in the setup area of your code.

Bmdsg4.png

Sensor values will differ depending on the placement of the electrodes (more information on electrode placement can be found here). It’s recommended to test the sensor multiple times to determine the different muscle values for your sensor.

Ultrasonic Sensor

EG1004 provides an HC-SR04 Ultrasonic sensor. This sensor uses a process similar to echolocation in order to determine how far away an object is. The sensor transmits a high frequency signal, then it receives the signal after it gets reflected by the object. The sensor determines the time elapsed between transmission and reception. This can be used to calculate the distance from the sensor to the object using the speed of sound (343m/s)

Bmdsg42.png
Figure 5: Source: Random Nerd Tutorials
  • Ranging Distance: 2cm to 400cm
  • Measuring Angle: 15o
  • Power Supply: 5V

Wiring

Vex Library 22.png

Pins

  • VCC: 5V
  • Trig: 11 (or any digital pin)
  • Echo: 12 (or any digital pin)
  • GND: Ground

Code

The first step in using an HC-SR04 is to set up the trigger and echo pins. In the setup() function, The trigger pin should be set to OUTPUT, and the echo pin should be set to INPUT as shown below. Here trigPin corresponds to the digital pin for the Trigger, while echoPin corresponds to the digital pin for the Echo.

Bmdsg47.png

Code can now be written in the loop() function to collect data. The ultrasonic sensor first needs to send a HIGH pulse of 10 or more microseconds using the trigger pin. One LOW pulse is used before to ensure a clean HIGH pulse, and another LOW after stops the HIGH pulse.

Bmdsg48.png

After the initial pulse has been sent out, the echo pin is then used to read the signal from the sensor. The method pulseIn() will return the time (in microseconds) from when the Trigger pin sends the ping, to when it is received by the Echo pin.

Bmdsg49.png


After reading the duration, the last step needed is to convert this to distance. Duration can be converted to centimeters using the following formula: Distance (cm) = (Duration (microseconds) /2) / 29.1

Below is an example of coding this formula, in order to get the distance between the sensor and a detected object.

Bmdsg50.png