SmartMe Network Laboratory: Arduino Nodes 1-5

The SmartMe lab is located at the Engineering building of the University of Messina, in Messina, Italy.

Introduction

Its main goal is to provide a simple testbed of a smart city, mainly focusing on smart environment application scenarios. To this purpose, 6 nodes have been equipped and made available to students for practising in these contexts. These nodes can be framed into the MCU (Arduino) + MPU (Raspberry Pi) category: 5 out of 6 combine an Arduino Uno with a Raspberry Pi 3 b+, the last node is a combo board developed by a spinoff company (SmartMe.io), Arancino, which combines in the same board an Arduino-like MCU (based on an ARM Cortex M0+ @48MHz) and a Raspberry Pi 3 compute module. In this section, we will focus on the 5 pure Arduino nodes and their sensors and actuators.

Prerequisites

To approach this laboratory, the student should grasp:

  • basic MQTT concepts like topics, broker, subscribing and publishing;
  • quantities and metrics related to the physical quantities that can be detected using DHT and PMS sensors: temperature (°C and F), relative humidity (%), air quality (PMx concentration).

Technical details

4 Arduino nodes are Internet-connected by a router through ETH, while the 5th is reachable only by the IoT gateway (RaspPi). The Lab configuration is shown in the figure below

UME Distance Lab Nodes 1-5

Node schematic

All Arduino nodes are configured as reported in the following schematic

 Nodes 1-5 schematic

Sensors

Each node is equipped with either a DHT11 or DHT22 sensor and a PMS7003 sensor. The DHT sensors allow measuring temperature and relative humidity, while the PMS7003 sensor allows measuring the air quality through the PMx concentration.

Parameter DHT11 DHT22
Operating Voltage 3 to 5V 3 to 5V
Operating Current 0.3mA (measuring) 60uA (standby) 0.3mA (measuring) 60uA (standby)
Humidity Range 20-80% / 5% 0-100% / 2-5%
Temperature Range0-50°C / ± 2°C-40 to 80°C / ± 0.5°C
Sampling Rate 1 Hz (reading every second) 0.5 Hz (reading every 2 seconds)
Body size15.5mm x 12mm x 5.5mm 15.1mm x 25mm x 7.7mm
Advantage Ultra low cost More Accurate
Resolution 16-bit Temperature and Humidity16-bit Temperature and Humidity
Accuracy ±1°C and ±1% ±0.5°C and ±1%
Sampling period1 second2 second
Price$1 to $5$4 to $10

Some nodes of the lab are equipped with “MIKROE-2818 DHT22 2 click” sensors. This sensor feature ultra-small size, low-power consumption, data signal transmission distance up to 20mts, and good measuring accuracy [1]. The sensing part is the CM2322, which uses a capacitive humidity sensor and a thermistor to measure the surrounding air. Typical temperature accuracy is ±0.3°C, while relative humidity accuracy is 2% RH. The humidity and temperature measurement are compensated by some calibration coefficient, which is saved in the OTP memory of an integrated MCU. The integrated MCU also provides I2C or 1Wire interface, selectable by the onboard SMD jumper selectors. The operating voltage can also be selected by the onboard SMD jumper [2]. As shown in the previous figure, the 1Wire mode was chosen while the operating voltage is 5V. The sensor is connected to pin 8 of Arduino Uno.

The PMS7003 consists of a digital and universal particle concentration sensor, which can be used to obtain the number of suspended particles in the air, i.e. the concentration of particles, and output them in the form of a digital interface. The working principle of such a sensor consists into produce scattering by using a laser to radiate suspending particles in the air, then collect scattering light to a certain degree, and finally obtain the curve of scattering light change with time. In the end, the equivalent particle diameter and the number of particles with different diameters per unit volume can be calculated [3]. So, the values of PM1.0, PM2.5, and PM10, will be available for our scopes. In order to physically interface the 10 bus lines of the sensor with Arduino Uno, the PMS7003 connector shown in the previous figure was employed [4]. By supplying the adapter at 5V, the particle sensor will operate correctly and the data will be available at RX and TX pins. However, the serial voltage level is 3.3V typical, while Arduino Uno needs 5V. For this reason, a bi-directional level converter was introduced [5]: by supplying the HV (High Voltage) side at 5V and the LV (Low Voltage) side at 3.3V, the serial levels will be correct on both sides (Arduino at 5V, PMS7003 at 3.3V). Since is not possible to deploy the code by using, at the same time, the default RX, TX pins (0,1) of Arduino Uno, the PMS7003 is connected to pins 9 and 10: by using the <SoftwareSerial.h> library, such pins can be used as RX and TX of Arduino Uno, respectively.

[1]https://www.mouser.it/new/mikroelektronika/mikroelektronika-mikroe-2818-dht22-2-click/

[2]http://www.farnell.com/datasheets/2618831.pdf

[3]https://download.kamami.com/p564008-p564008-PMS7003%20series%20data%20manua_English_V2.5.pdf

[4]https://kamami.com/others/564553-adapter-from-127mm-pitch-to-254mm-for-pms7003.html

[5]https://kamami.com/voltage-level-converters/234535-logic-level-converter-bi-directional.html

Actuators

There are no mechanical actuators in this laboratory. Each node is equipped with a 2×16 LCD screen and with an RGB led, but it is possible to use only the green light component. The green led of the RGB is connected to the Arduino pin 3. Since such a pin supports the PWM, the led brilliance can be set. Moreover, the led can be used for blinking or to indicate when a threshold is reached. The 2×16 LCD is a Displaytech 162B based on the HD44780 standard. Such standard means that the display supports almost all characters of the ASCII character table. Therefore, it is possible to display the most important characters. The display controller, which is integrated into the display, can generate these characters and send them to the matrix. In addition to the already 208 known characters, it is also possible to draw any other characters and signs. The display controller handles most of the operations, so the code for the microcontroller is very short [6]. Both 8 bit or 4-bit mode can be used to drive the display. The <LiquidCrystal.h> library supports the 4 bit communication. As shown in the figure, the Arduino Uno pins 5, 4, 13, 2 are used for the 4 bit communication (display pins 13, 14, 15, 16), while the Arduino Uno pins 7, 6 are used for the RS (Register Select) and for the E (Enable) (display pins 8, 6). The not used display data pins (9, 10, 11, 12) are simply not connected. The other display pins are used for the power supply (1,2) and to control the display light via the potentiometer (3,4). The display R/W pin (7) is simply connected to GND since only the write operation is required.

[6] https://www.aeq-web.com/atmega328-4bit-16x2-lcd-display-amtel-studio-c/?lang=en

Power supply

Each node is equipped with a Breadboard Power Supply Module MB120. The MB102 is able to provide up to 700 mA, with a voltage of 3.3V and/or 5V. It can be supplied with an external DC power supply, in the range of 6.5 - 12V. The required voltage can be selected by properly choice the onboard jumper position. Both 3.3V and 5V are required in the project.

Software, libraries and externals

The following libraries are required to run the example proposed below for the hands-on labs:

  • Liquid Crystal
  • DHT sensor Library (mandatory version 1.3.0)
  • Adafruit Unified Sensor
  • PMS
  • Ethernet
  • MQTT

LCD display requires a dedicated library. Of course, you can control it on the low-level programming, but we suggest using a library first. As there are many universal libraries, and many of them are incompatible with this display, we strongly recommend using "Liquid Crystal Library for Arduino". The LCD control library can be imported to the source code via:

#include <LiquidCrystal.h>

Then configure your LCD controller:

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 13, 2);

DHT11 and DHT22 sensors require some dedicated library. We strongly recommend using the “DHT sensor library” version 1.3.0, which is not the last version available on the repository. DHT sensor library depends on the “Adafruit Unified Sensor”, so it is mandatory to include this library. The DHT sensor library can be imported to the source code via:

#include <DHT.h>

Configure your DHT sensor:

#define DHTPIN 8 // Digital pin connected to the DHT sensor
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22 
// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);

PMS sensor requires a dedicated library. The Arduino library for Plantower PMS sensors, also “PMS” library, supports PMS x003 sensors (1003, 3003, 5003, 6003, 7003). The PMS sensor library can be imported to the source code via:

#include "PMS.h"

The PMS sensor is connected to pins 9 and 10: by using the <SoftwareSerial.h> library, such pins can be used as rx and tx of Arduino Uno, respectively.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(9,10); // Arduino Rx and Tx ports

Arduino Ethernet Shield requires a dedicated library. With the Arduino Ethernet Shield, the Ethernet.h library allows an Arduino board to connect to the Internet. The Arduino Ethernet Shield library can be imported to the source code via:

#include <Ethernet.h>

Then configure your Ethernet Shield:

// Enter a MAC address and IP address for your controller below.
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF};
byte ip[] = {192, 168, 0, 99};  // <- change to match your network

MQTT connectivity protocol requires a dedicated library. The MQTT.h library uses the Arduino Ethernet Client API for interacting with the underlying network hardware. This library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT. The Arduino Ethernet Shield library can be imported to the source code via:

#include <MQTT.h>

“platformio.ini” (Project Configuration File)

The Project configuration file is named platformio.ini.

[env:uno]
platform = atmelavr
board = uno
framework = arduino
 
lib_ldf_mode=deep+
lib_compat_mode=strict
 
lib_deps =
 DHT sensor library@1.3.0
 Adafruit Unified Sensor@1.0.3
 Ethernet@2.0.0
 MQTT@2.4.3
 PMS@1.1.0
 
lib_deps_external =
 https://github.com/arduino-libraries/LiquidCrystal.git#1.0.7

Communication

The user can connect and program the controller of each node by using the Distancelab environment by booking it for the time he needs. The user can use the MQTT protocol. MQTT stands for Message Queuing Telemetry Transport.

MQTT is a machine-to-machine (M2M) connectivity protocol usable for “Internet of Things” solutions. MQTT is a simple messaging protocol, designed for constrained devices with low-bandwidth. So, it’s the perfect solution for Internet of Things applications.

This publish/subscribe messaging pattern requires a message broker. The broker is responsible for distributing messages to interested clients based on the topic of a message. So a client must connect to a broker in order to:

  • publish messages specifying a topic so that other clients that have subscribed to that topic will be able to receive those messages;
  • receive messages subscribing to a specific topic.

Limits

At the same time, only one user can program the controller. But all users connected to the Distancelab MQTT broker can read the values if they are being transmitted over MQTT.

Support

gmerlino@unime.it, rdipietro@unime.it

en/iot-open/remotelab/ume/smartme.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0