Aplicații

E-mail 1001 Solutii

Arduino Soil Moisture Sensor

 How the Soil Moisture Sensor Works

Resistive Sensor

Uses two metal probes to measure electrical resistance. Wet soil has lower resistance, while dry soil has higher resistance.

Capacitive Sensor

Measures changes in soil capacitance and has no exposed metal parts. It provides more stable and long-lasting performance.

Both sensors provide an analog output that Arduino reads.

Wiring the Soil Moisture Sensor

Soil Sensor → Arduino
VCC         → 5V
GND         → GND
AO          → A0

The digital output (DO) pin is optional and can be used with a preset threshold.

Arduino Code (Basic Reading)


int soilPin = A0;
int soilValue = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  soilValue = analogRead(soilPin);

  Serial.print("Soil Moisture Value: ");
  Serial.println(soilValue);

  delay(1000);
}

Understanding Soil Moisture Values

Sensor Value Soil Condition
0 – 300 Very Wet
300 – 600 Moist
600 – 900 Dry
900 – 1023 Very Dry

Values may vary depending on soil type. Always calibrate with dry and wet soil.

Improved Code with Moisture Status


int soilPin = A0;
int soilValue = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  soilValue = analogRead(soilPin);

  Serial.print("Soil Moisture: ");
  Serial.print(soilValue);

  if (soilValue < 300) {
    Serial.println(" - WET");
  }
  else if (soilValue < 600) {
    Serial.println(" - MOIST");
  }
  else {
    Serial.println(" - DRY");
  }

  delay(1000);
}

Testing the Sensor

  1. Upload the code to Arduino
  2. Open the Serial Monitor
  3. Set baud rate to 9600
  4. Insert the sensor into soil
  5. Add water and observe changes

Wet soil produces lower values, while dry soil produces higher values.

Troubleshooting

  • Always reads 1023: Sensor not properly inserted
  • No value change: Loose wiring or faulty sensor
  • Unstable readings: Electrical noise or dry air
  • Corrosion: Use capacitive sensor instead of resistive

Optional Upgrades

  • Add relay and water pump for automatic irrigation
  • Add LCD or OLED display
  • Use ESP8266/ESP32 for IoT monitoring
  • Log data to SD card for analysis.
[mai mult...]

Arduino Fingerprint Sensor

Required Components

Component Quantity Description
Arduino Uno / Nano / Mega 1 Main controller
Fingerprint Sensor (R307 / ZFM-20 / Adafruit) 1 Biometric identification
16×2 LCD with I2C Module 1 Display user messages
12V Solenoid Lock 1 Door/box locking mechanism
5V Relay Module 1 Controls solenoid lock
12V Power Supply 1 Powers solenoid
Jumper Wires Connections

The fingerprint sensor scans the user’s finger. Arduino checks if the fingerprint matches a stored ID. If it matches, the relay is activated and unlocks the solenoid lock. The LCD shows:

  • Scanning
  • Access Granted
  • Access Denied

Fingerprint Sensor → Arduino

VCC → 5V
GND → GND
TX  → D2
RX  → D3

I2C LCD → Arduino

VCC → 5V
GND → GND
SDA → A4
SCL → A5

Relay Module → Arduino

IN  → D8
VCC → 5V
GND → GND

Solenoid Lock Power Wiring

12V+ → COM on Relay
NO   → Solenoid +
Solenoid - → 12V -

IMPORTANT: Use a diode (1N4007) across solenoid terminals to prevent voltage spikes.

Arduino Code (Copy & Paste)

This code controls the fingerprint module, LCD display, and solenoid lock.


#include <Adafruit_Fingerprint.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>

SoftwareSerial fingerSerial(2, 3); // RX, TX
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerSerial);
LiquidCrystal_I2C lcd(0x27, 16, 2);

int relayPin = 8;

void setup() {
lcd.init();
lcd.backlight();

pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // lock OFF at start

lcd.setCursor(0, 0);
lcd.print("Fingerprint");
lcd.setCursor(0, 1);
lcd.print("Access System");

delay(2000);
lcd.clear();

finger.begin(57600);
if (finger.verifyPassword()) {
lcd.print("Sensor Ready");
} else {
lcd.print("Sensor Error");
while (1);
}
delay(2000);
lcd.clear();
}

void loop() {
lcd.setCursor(0, 0);
lcd.print("Place Finger...");
lcd.setCursor(0, 1);
lcd.print(" ");

int result = getFingerprintID();

if (result >= 0) {
lcd.clear();
lcd.print("Access Granted");
unlockDoor();
} else if (result == -1) {
lcd.clear();
lcd.print("Access Denied");
delay(1500);
}

lcd.clear();
}

int getFingerprintID() {
finger.getImage();
if (finger.image2Tz() != FINGERPRINT_OK) return -1;
if (finger.fingerSearch() != FINGERPRINT_OK) return -1;

return finger.fingerID; // valid ID returned
}

void unlockDoor() {
digitalWrite(relayPin, HIGH); // open lock
delay(3000); // unlock duration
digitalWrite(relayPin, LOW); // lock again
}

You must add fingerprints before using the system.

  1. In Arduino IDE, go to File → Examples → Adafruit Fingerprint Sensor Library → Enroll
  2. Upload the sketch
  3. Open Serial Monitor
  4. Type the fingerprint ID number (1–127)
  5. Place finger twice when instructed

Fingerprint is now stored.

LCD Display Messages

Event Message
Startup Fingerprint Access System
Ready Sensor Ready
Waiting Place Finger…
Match Access Granted
No Match Access Denied

Troubleshooting

  • Fingerprint not detected: TX/RX wiring reversed
  • LCD not showing text: Wrong I2C address (try 0x3F)
  • Solenoid not activating: Check relay NO/COM wiring
  • Machine resets: Solenoid drawing current — use separate 12V supply.
[mai mult...]