Bird
Raised Fist0
Arduinoprogramming~10 mins

Soil moisture sensor in Arduino - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Soil moisture sensor
Start
↓
Initialize sensor pin
↓
Read sensor value
↓
Convert value to moisture level
↓
Print moisture level
↓
Wait some time
↓
Read sensor value
The program starts by setting up the sensor pin, then repeatedly reads the sensor, converts the reading to moisture level, prints it, waits, and repeats.
Execution Sample
Arduino
const int sensorPin = A0;
int sensorValue = 0;

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

void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);
  delay(1000);
}
This code reads the soil moisture sensor value from analog pin A0 every second and prints it to the serial monitor.
Execution Table
StepActionsensorValueOutputDelay(ms)
1Initialize sensorPin to A0---
2Start Serial communication---
3Read sensor value from A0523Print 5231000
4Read sensor value from A0510Print 5101000
5Read sensor value from A0498Print 4981000
6Read sensor value from A0505Print 5051000
7Read sensor value from A0495Print 4951000
...Loop continues reading and printing.........
💡 The loop runs forever, reading and printing sensor values every 1000 ms.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5...final
sensorValue0523510498505495...
Key Moments - 3 Insights
Why does sensorValue change each time in the loop?
Because analogRead reads the current moisture level from the sensor each time (see execution_table steps 3-7), so sensorValue updates with new readings.
Why do we use delay(1000) after printing?
delay(1000) pauses the program for 1000 milliseconds (1 second) to avoid flooding the serial monitor with too many readings too fast (see execution_table Delay column).
What does Serial.begin(9600) do in setup()?
It starts serial communication at 9600 bits per second so the Arduino can send data to the computer (see execution_table step 2).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the sensorValue at step 4?
A523
B510
C498
D505
💡 Hint
Check the sensorValue column in execution_table row with Step 4.
At which step does the program first print the sensor value?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the Output column in execution_table to find when printing starts.
If delay(1000) was removed, how would the execution_table change?
AOutput would print faster without delay
BProgram would stop after first reading
CsensorValue would not change
DsensorPin would change
💡 Hint
Consider the Delay column and what delay(1000) controls in execution_table.
Concept Snapshot
Soil moisture sensor reads analog values from pin A0.
Use analogRead(sensorPin) to get moisture level.
Print values with Serial.println().
Use delay() to wait between readings.
Loop repeats to monitor moisture continuously.
Full Transcript
This Arduino program reads a soil moisture sensor connected to analog pin A0. It starts by setting sensorPin to A0 and begins serial communication at 9600 baud in setup(). In the loop(), it reads the sensor value using analogRead(sensorPin), stores it in sensorValue, and prints it to the serial monitor. Then it waits 1000 milliseconds before repeating. The sensorValue changes each loop because the sensor measures current moisture. The delay prevents flooding the output. This cycle repeats forever, giving continuous moisture readings.

Practice

(1/5)
1.

What does the analogRead() function do when using a soil moisture sensor with Arduino?

easy
A. It prints the sensor value to the serial monitor.
B. It reads the sensor's analog voltage value representing soil moisture.
C. It sends power to the soil moisture sensor.
D. It converts the sensor value to a digital HIGH or LOW.

Solution

  1. Step 1: Understand the purpose of analogRead()

    The analogRead() function reads the voltage from an analog pin and returns a value between 0 and 1023.
  2. Step 2: Connect to soil moisture sensor output

    The soil moisture sensor outputs an analog voltage that changes with moisture level, which analogRead() captures.
  3. Final Answer:

    It reads the sensor's analog voltage value representing soil moisture. -> Option B
  4. Quick Check:

    analogRead() reads analog sensor value [OK]
Hint: analogRead() always reads voltage from analog pins [OK]
Common Mistakes:
  • Thinking analogRead() sends power to sensor
  • Confusing analogRead() with Serial.println()
  • Assuming analogRead() returns digital HIGH or LOW
2.

Which of the following is the correct way to read a soil moisture sensor connected to analog pin A0 and print its value?

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

void loop() {
  int moisture = ?;
  Serial.println(moisture);
  delay(1000);
}
easy
A. moisture = analogRead(A0);
B. moisture = digitalRead(A0);
C. moisture = Serial.read(A0);
D. moisture = analogWrite(A0);

Solution

  1. Step 1: Identify correct function to read analog sensor

    Use analogRead() to read analog pin A0 for sensor value.
  2. Step 2: Confirm syntax matches Arduino standards

    The correct syntax is moisture = analogRead(A0); to store the sensor value.
  3. Final Answer:

    moisture = analogRead(A0); -> Option A
  4. Quick Check:

    Use analogRead() for analog sensor input [OK]
Hint: Use analogRead() for analog sensors, not digitalRead() [OK]
Common Mistakes:
  • Using digitalRead() for analog sensor
  • Trying to use Serial.read() to get sensor value
  • Using analogWrite() which outputs voltage, not reads
3.

What will be printed to the Serial Monitor when this Arduino code runs if the soil moisture sensor reads 512?

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

void loop() {
  int moisture = analogRead(A0);
  Serial.println(moisture);
  delay(1000);
}
medium
A. 0
B. 1023
C. 512
D. AnalogRead Error

Solution

  1. Step 1: Understand analogRead() output

    analogRead() returns a value between 0 and 1023 based on sensor voltage. Here it reads 512.
  2. Step 2: Serial.println() prints the value

    The code prints the value stored in moisture, which is 512.
  3. Final Answer:

    512 -> Option C
  4. Quick Check:

    analogRead() value printed = 512 [OK]
Hint: Serial.println() prints the sensor value read by analogRead() [OK]
Common Mistakes:
  • Expecting maximum 1023 always printed
  • Thinking analogRead() returns 0 or error
  • Confusing analogRead() with digitalRead() output
4.

Identify the error in this Arduino code snippet for reading a soil moisture sensor and printing its value:

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

void loop() {
  int moisture = analogRead(0);
  Serial.print(moisture);
  delay(1000);
}
medium
A. Serial.print() should be Serial.println() to add a new line.
B. Serial.begin() must be called inside loop().
C. delay() cannot be used inside loop().
D. analogRead() should use A0 instead of 0.

Solution

  1. Step 1: Check analogRead() argument

    Using analogRead(0) reads digital pin 0, which is incorrect for analog input.
  2. Step 2: Use A0 for analog pin 0

    The correct syntax is analogRead(A0) to read analog pin A0.
  3. Final Answer:

    analogRead() should use A0 instead of 0. -> Option D
  4. Quick Check:

    Use A0 constant for analog pins [OK]
Hint: Use A0, A1, etc. for analogRead() pins [OK]
Common Mistakes:
  • Using integer 0 instead of A0 in analogRead()
  • Thinking Serial.print() must be println() always
  • Believing delay() is not allowed in loop()
  • Calling Serial.begin() inside loop()
5.

You want to turn on a water pump when the soil moisture is below 300. Which code snippet correctly implements this using a soil moisture sensor on A0 and a pump connected to digital pin 7?

void setup() {
  Serial.begin(9600);
  pinMode(7, OUTPUT);
}

void loop() {
  int moisture = analogRead(A0);
  if (?) {
    digitalWrite(7, HIGH);
  } else {
    digitalWrite(7, LOW);
  }
  delay(1000);
}
hard
A. moisture < 300
B. moisture > 300
C. moisture == 300
D. moisture != 300

Solution

  1. Step 1: Understand the condition for watering

    The pump should turn on when soil is dry, meaning moisture value is less than 300.
  2. Step 2: Write the correct if condition

    The condition moisture < 300 triggers the pump ON with digitalWrite(7, HIGH);.
  3. Final Answer:

    moisture < 300 -> Option A
  4. Quick Check:

    Turn pump ON if moisture below threshold [OK]
Hint: Use if moisture < threshold to activate pump [OK]
Common Mistakes:
  • Using > instead of < for dry soil condition
  • Checking equality instead of range
  • Forgetting to set pinMode for pump pin
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard