Things used in this project
Hardware components
| Base RAKwireless – RAK19003 |
×1
| Core RAKwireless - RAK4630 |
×1
| Enviroment Sensor RAK1906 |
×1
| PCB Antenna for LoRa |
×1
×1
Software apps and online services

Hand too…
Things used in this project
Hardware components
| Base RAKwireless – RAK19003 |
×1
| Core RAKwireless - RAK4630 |
×1
| Enviroment Sensor RAK1906 |
×1
| PCB Antenna for LoRa |
×1
×1
Software apps and online services

Hand tools and fabrication machines

| Multitool, Screwdriver |
Story
Concept:
RAK1906 is an environmental sensor module, it is designed to measure various atmospheric
conditions such as air, moisture, pressure they can be viewed remotely through TTN (TheThings Network). It is typically applied for Indoor air quality monitoring Environmental data logging RAK1906 doesn’t work on it’s own it has to be connected to a core and base, for this project the core we will be using will be RAK4630, base RAK19003. When the base is connected to a computer with a USB C cable, we can upload code to the core which will display the data from the sensor in the monitoring screen. Programs capable of this are Arduino and Visual Studio Code with the Platform.io plugin.
How does it work?
The most unique feature of the RAK1906 is its MOX (Metal Oxide Semiconductor) gas sensor.
- How it works: The sensor contains a small internal heater and a metal oxide layer. When the heater is active, oxygen is adsorbed on the sensitive layer.
- Detection: When Volatile Organic Compounds (VOCs) like paints, cleaning supplies, or smoke come into contact with the heated layer, a chemical reaction occurs that changes the electrical resistance of the oxide.
- Result: The RAK1906 measures this change in resistance and converts it into an IAQ score (typically 0–500), telling you how "clean" or "polluted" the air is.
2. Humidity Sensing
It uses a capacitive humidity sensor.
- How it works: The sensor has a dielectric polymer layer that absorbs or releases water vapor from the surrounding air.
- Result: As the moisture level changes, the capacitance of the sensor changes. The chip measures this electrical shift to provide a highly accurate relative humidity percentage.
3. Barometric Pressure Sensing
The RAK1906 uses piezoresistive technology to measure atmospheric pressure.
- How it works: It contains a microscopic silicon diaphragm that bends slightly under the weight of the air.
- Result: This bending changes the resistance of the silicon (the piezoresistive effect). Because air pressure decreases as you go higher, this sensor is often used to calculate altitude (altimeter).
4. Temperature Sensing
While it provides temperature readings, this sensor’s primary job is to calibrate the other three sensors.
- How it works: It uses a thermistor to measure the ambient heat.
- Note: Because the gas sensor has an internal heater, the temperature reading can sometimes be slightly higher than the actual room temperature. The software usually compensates for this "self-heating" effect.
Gateway: Setup and Configuration
To avoid damage to the gateway, make sure to connect the antenna before turning it on!
This step is thoroughly explained in the guide - IoT Education Kit - Setup the Gateway RAK7268V2 - that can be found on https://www.hackster.io/520073/iot-education-kit-setup-the-gateway-rak7268v2-6b222f
Mounting the WisBlock Components
-
Place the microprocessor (RAK4630) in the dedicated slot on the motherboard, aligning the pins and holes correctly.
-
Press lightly until you hear a click, then secure it using the screws and screwdriver in the kit.
-
Carefully connect the LoRa 863-870MHz antenna to its designated location.
-
Assemble the Enviroment Sensor RAK1906 module by mounting on SENSOR SLOT A of motherboard.
-
Conect the USB cable to the base:
Development Environment Configuration
- Install Arduino IDE/PlatformIO and support for the RAK4630 board. Install the necessary libraries for the sensors.
- Uploading the program code:
#include <Arduino.h>#include <Wire.h>#include <Adafruit_Sensor.h>#include <Adafruit_BME680.h>Adafruit_BME680 bme;// Kintamasis sensoriaus adresuiuint8_t bme_address = 0;void setup() {Serial.begin(115200);while (!Serial);Serial.printIn("RAK4630 + RAK1906 BME680 testas");Wire.begin(); // naudoja default I2C, Slot A// 12C scan: ieskome BME680 adresy 0x76 ir Ox77Serial.printIn("leskoma BME680 adresy 0x76 ir 0x77...");for (uint8_t addr = 0x76; addr <= 0x77; addr++) {Wire. beginTransmission(addr);if (Wire.endTransmission() == O) {bme_address = addr;Serial.print(""Rasta BME680 adresu: Ox");Serial.printIn(bme_address, HEX);break;}}if (ome_address == 0) {Serial.printin(" X Nerasta BME680 Slot A!");Serial.printIn("Patikrink VCC/GND/SDA/SSCL ir Slot A.");while (1); // sustoja}// \Inicijuojame sensoriyif (Ibme.begin(bme_address)) {Serial.printIn(" X€ Nepavyko inicijuoti BME680!");while (1);}// Sensoriaus nustatymaibme.setTemperatureOversampling(BME680_OS_8xX);bme.setHumidityOversampling(BME680_OS_2xX);bme.setPressureOversampling(BME680_OS_4xX);bme.setlIRFilterSize(BME680_FILTER_SIZE_3);bme.setGasHeater(320, 150); // 320°C 150msSerial.printIn(" J Sensorius paruostas skaitymui!");Serial.printIn("--------------------------------- ");}void loop() {if (lbme.performReading()) {Serial.printIn("Nepavyko nuskaityti BME680 duomeny!");delay(2000);return;}Serial.print(""Temperatdra: "); Serial.print(bme.temperature); Serial.printIn(" °C");Serial.print("Drégme: "); Serial.print(bme.humidity); Serial.printin(" %");Serial.print("Slégis: "); Serial.print(bme.pressure / 100.0); Serial.printin(" hPa");Serial.printIn("--------------------------------- ");delay(2000);}
- It shows us the temperature, moisture and pressure and because it is on a loop, it is constantly updating.
**Read more