Library Requirements:
 Adafruit_BMP280_Library
 Adafruit-GFX-Library
 Adafruit_SSD1306
 MFRC522
 Adafruit_MPU6050.h
1. Soil moisture threshold check to actuate the relay
Code:
sensorValue = analogRead(sensorPin);
Set threshold to 400
If the sensor value is > the threshold
Trigger relay
To trigger relay
if (sensorValue > threshold limit) {
digitalWrite(A2, HIGH);
}
else {
digitalWrite(A2, LOW);
}
delay(1000);
}
Pin Connection
3V --> VCC
GND --> GND
A0 --> A0
2. Read Temperature & pressure using BMP sensor.
Note that, you can change the I2C address without modifying the library, just
type: bmp.begin(0x77);
Code:
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C Interface
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
bmp.begin();
}
void loop() {
Serial.print(F("Temperature = "));
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(bmp.readPressure()/100); //displaying the Pressure
in hPa, you can change the unit
Serial.println(" hPa");
Serial.print(F("Approx altitude = "));
Serial.print(bmp.readAltitude(1019.66));
//The "1019.66" is the pressure(hPa) at sea
level in day in your region
Serial.println(" m");
//If you don't know it, modify it until you
get your current altitude
Serial.println();
delay(2000);
}
3. Using RFID to display welcome message on Serial
OLED Display - Arduino
Vcc - 3.3V
GND - GND
SCL - Analog Pin 5
SDA - Analog Pin 4
Code:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC[4];
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
RFID Reader - Arduino
RST ▶ Digital Pin 9
IRQ ▶ Unconnected
MISO ▶ Digital Pin 12
MOSI ▶ Digital Pin 11
SCK ▶ Digital Pin 13
SDA ▶ Digital Pin 10
}
void loop() {
// Reset the loop if no new card present on the sensor/reader.
This saves the entire process when idle.
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
else Serial.println(F("Card read previously."));
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
/**
* Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}
4. Ultrasonic sensor to find the distance & height
int trigPin = 6; // HC-SR04 trigger pin
int echoPin = 7; // HC-SR04 echo pin
float duration, distance;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT); // define trigger pin as output
}
void loop()
{
digitalWrite(echoPin, LOW); // set the echo pin LOW
digitalWrite(trigPin, LOW); // set the trigger pin LOW
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // set the trigger pin HIGH for 10μs
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // measure the echo time (μs)
distance = (duration/2.0)*0.0343; // convert echo time to
distance (cm)
if(distance>400 || distance<2)
Serial.println("0");
else
{
Serial.print("90, ");
Serial.print(distance, 1);
Serial.println(" ,cm");
}
delay(1000);
}
5. Accelerometer to find out the vibrations and see the plottings
// Basic demo for accelerometer readings from Adafruit MPU6050
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
mpu.begin();
mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("");
delay(100);
}
void loop() {
/* Get new sensor events with the readings */
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print(a.acceleration.x);
Serial.print(",");
Serial.print(a.acceleration.y);
Serial.print(",");
Serial.print(a.acceleration.z);
Serial.print(", ");
Serial.print(g.gyro.x);
Serial.print(",");
Serial.print(g.gyro.y);
Serial.print(",");
Serial.print(g.gyro.z);
Serial.println("");
delay(10);
}

Solution doc

  • 1.
    Library Requirements:  Adafruit_BMP280_Library Adafruit-GFX-Library  Adafruit_SSD1306  MFRC522  Adafruit_MPU6050.h 1. Soil moisture threshold check to actuate the relay Code: sensorValue = analogRead(sensorPin); Set threshold to 400 If the sensor value is > the threshold Trigger relay To trigger relay if (sensorValue > threshold limit) { digitalWrite(A2, HIGH); } else { digitalWrite(A2, LOW); } delay(1000); } Pin Connection 3V --> VCC GND --> GND A0 --> A0 2. Read Temperature & pressure using BMP sensor. Note that, you can change the I2C address without modifying the library, just type: bmp.begin(0x77); Code: #include <Adafruit_BMP280.h> Adafruit_BMP280 bmp; // I2C Interface void setup() { Serial.begin(9600); Serial.println(F("BMP280 test")); bmp.begin(); } void loop() {
  • 2.
    Serial.print(F("Temperature = ")); Serial.print(bmp.readTemperature()); Serial.println("*C"); Serial.print(F("Pressure = ")); Serial.print(bmp.readPressure()/100); //displaying the Pressure in hPa, you can change the unit Serial.println(" hPa"); Serial.print(F("Approx altitude = ")); Serial.print(bmp.readAltitude(1019.66)); //The "1019.66" is the pressure(hPa) at sea level in day in your region Serial.println(" m"); //If you don't know it, modify it until you get your current altitude Serial.println(); delay(2000); } 3. Using RFID to display welcome message on Serial OLED Display - Arduino Vcc - 3.3V GND - GND SCL - Analog Pin 5 SDA - Analog Pin 4 Code: #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class MFRC522::MIFARE_Key key; // Init array that will store new NUID byte nuidPICC[4]; void setup() { Serial.begin(9600); SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } RFID Reader - Arduino RST ▶ Digital Pin 9 IRQ ▶ Unconnected MISO ▶ Digital Pin 12 MOSI ▶ Digital Pin 11 SCK ▶ Digital Pin 13 SDA ▶ Digital Pin 10
  • 3.
    } void loop() { //Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle. if ( ! rfid.PICC_IsNewCardPresent()) return; // Verify if the NUID has been readed if ( ! rfid.PICC_ReadCardSerial()) return; Serial.print(F("PICC type: ")); MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); Serial.println(rfid.PICC_GetTypeName(piccType)); if (rfid.uid.uidByte[0] != nuidPICC[0] || rfid.uid.uidByte[1] != nuidPICC[1] || rfid.uid.uidByte[2] != nuidPICC[2] || rfid.uid.uidByte[3] != nuidPICC[3] ) { Serial.println(F("A new card has been detected.")); // Store NUID into nuidPICC array for (byte i = 0; i < 4; i++) { nuidPICC[i] = rfid.uid.uidByte[i]; } Serial.println(F("The NUID tag is:")); Serial.print(F("In hex: ")); printHex(rfid.uid.uidByte, rfid.uid.size); Serial.println(); Serial.print(F("In dec: ")); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); } else Serial.println(F("Card read previously.")); // Halt PICC rfid.PICC_HaltA(); // Stop encryption on PCD rfid.PCD_StopCrypto1(); } /** * Helper routine to dump a byte array as hex values to Serial. */ void printHex(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } }
  • 4.
    /** * Helper routineto dump a byte array as dec values to Serial. */ void printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], DEC); } } 4. Ultrasonic sensor to find the distance & height int trigPin = 6; // HC-SR04 trigger pin int echoPin = 7; // HC-SR04 echo pin float duration, distance; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); // define trigger pin as output } void loop() { digitalWrite(echoPin, LOW); // set the echo pin LOW digitalWrite(trigPin, LOW); // set the trigger pin LOW delayMicroseconds(2); digitalWrite(trigPin, HIGH); // set the trigger pin HIGH for 10μs delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); // measure the echo time (μs) distance = (duration/2.0)*0.0343; // convert echo time to distance (cm) if(distance>400 || distance<2) Serial.println("0"); else { Serial.print("90, "); Serial.print(distance, 1); Serial.println(" ,cm"); } delay(1000); } 5. Accelerometer to find out the vibrations and see the plottings // Basic demo for accelerometer readings from Adafruit MPU6050 #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> Adafruit_MPU6050 mpu;
  • 5.
    void setup(void) { Serial.begin(115200); mpu.begin(); mpu.setAccelerometerRange(MPU6050_RANGE_16_G); mpu.setGyroRange(MPU6050_RANGE_250_DEG); mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); Serial.println(""); delay(100); } voidloop() { /* Get new sensor events with the readings */ sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); /* Print out the values */ Serial.print(a.acceleration.x); Serial.print(","); Serial.print(a.acceleration.y); Serial.print(","); Serial.print(a.acceleration.z); Serial.print(", "); Serial.print(g.gyro.x); Serial.print(","); Serial.print(g.gyro.y); Serial.print(","); Serial.print(g.gyro.z); Serial.println(""); delay(10); }