Bird
Raised Fist0
Arduinoprogramming~30 mins

Arduino sleep modes - Mini Project: Build & Apply

Choose your learning style10 modes available
Arduino Sleep Modes
📖 Scenario: You have a small Arduino project that runs on battery power. To save battery, you want the Arduino to sleep when it is not doing anything and wake up when a button is pressed.
🎯 Goal: Build a simple Arduino program that puts the board into sleep mode and wakes it up using a button press.
📋 What You'll Learn
Use the avr/sleep.h library to control sleep modes
Set up a button on pin 2 to wake the Arduino from sleep
Put the Arduino into sleep mode inside the loop()
Print a message to the Serial Monitor when the Arduino wakes up
💡 Why This Matters
🌍 Real World
Battery-powered devices like remote sensors or wearable gadgets use sleep modes to save power and extend battery life.
💼 Career
Understanding sleep modes is important for embedded systems engineers working on low-power IoT devices and hardware optimization.
Progress0 / 4 steps
1
Setup button input and Serial communication
Write code to set pin 2 as an input with an internal pull-up resistor. Also, start Serial communication at 9600 baud in the setup() function.
Arduino
Hint

Use pinMode(2, INPUT_PULLUP); to set the button pin. Use Serial.begin(9600); to start serial communication.

2
Configure sleep mode and interrupt
Add code to set the sleep mode to SLEEP_MODE_PWR_DOWN and attach an interrupt to pin 2 that will wake the Arduino when the button is pressed.
Arduino
Hint

Use set_sleep_mode(SLEEP_MODE_PWR_DOWN); to set the sleep mode. Use attachInterrupt(digitalPinToInterrupt(2), wakeUp, LOW); to attach the interrupt.

3
Put Arduino to sleep inside loop
Inside the loop(), add code to put the Arduino to sleep using sleep_enable() and sleep_cpu(). Make sure to disable sleep after waking up.
Arduino
Hint

Use sleep_enable(); before sleep_cpu(); and sleep_disable(); after waking up. Print messages before and after sleep.

4
Test and observe output
Upload the complete program and observe the Serial Monitor. The Arduino should print Going to sleep..., then sleep until the button on pin 2 is pressed, then print Woke up!. Write the exact output you see after pressing the button once.
Arduino
Hint

Open the Serial Monitor at 9600 baud. Press the button connected to pin 2 once. You should see the messages printed before and after sleep.

Practice

(1/5)
1. Which Arduino function is used to set the type of sleep mode before entering sleep?
easy
A. set_sleep_mode()
B. sleep_cpu()
C. attachInterrupt()
D. delay()

Solution

  1. Step 1: Understand sleep mode setup

    The function set_sleep_mode() is used to choose which sleep mode the Arduino will enter.
  2. Step 2: Differentiate from sleep execution

    The function sleep_cpu() actually puts the CPU to sleep, but does not set the mode.
  3. Final Answer:

    set_sleep_mode() -> Option A
  4. Quick Check:

    Set mode = set_sleep_mode() [OK]
Hint: Set mode first with set_sleep_mode() before sleeping [OK]
Common Mistakes:
  • Confusing set_sleep_mode() with sleep_cpu()
  • Thinking attachInterrupt() sets sleep mode
  • Using delay() to enter sleep
2. Which of the following is the correct syntax to put the Arduino into sleep mode after setting it?
easy
A. sleep_mode();
B. sleep_cpu();
C. sleep();
D. enter_sleep();

Solution

  1. Step 1: Identify the sleep function

    The function sleep_cpu() is the correct call to put the CPU into sleep mode after setting it.
  2. Step 2: Check other options

    sleep_mode() is not a valid function, nor are sleep() or enter_sleep().
  3. Final Answer:

    sleep_cpu(); -> Option B
  4. Quick Check:

    Sleep call = sleep_cpu() [OK]
Hint: Use sleep_cpu() to enter sleep after setting mode [OK]
Common Mistakes:
  • Using sleep_mode() instead of sleep_cpu()
  • Trying to call sleep() which doesn't exist
  • Confusing function names
3. What will the following Arduino code do?
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
// CPU sleeps here
sleep_disable();
medium
A. The CPU enters power-down sleep mode and stays asleep until an interrupt wakes it
B. The CPU enters power-down sleep mode and wakes immediately
C. The CPU does not sleep because sleep_enable() is missing
D. The CPU enters idle mode instead of power-down

Solution

  1. Step 1: Analyze sleep mode setting

    The code sets the sleep mode to power-down with set_sleep_mode(SLEEP_MODE_PWR_DOWN);.
  2. Step 2: Understand sleep flow

    Calling sleep_enable() then sleep_cpu() puts the CPU to sleep in power-down mode. It stays asleep until an interrupt or reset wakes it. After waking, sleep_disable() disables sleep.
  3. Final Answer:

    The CPU enters power-down sleep mode and stays asleep until an interrupt wakes it -> Option A
  4. Quick Check:

    Power-down sleep = stays asleep until interrupt [OK]
Hint: Power-down sleep waits for interrupt to wake CPU [OK]
Common Mistakes:
  • Assuming CPU wakes immediately without interrupt
  • Forgetting sleep_enable() disables sleep
  • Confusing idle mode with power-down
4. Identify the error in this Arduino sleep code snippet:
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_cpu();
sleep_enable();
medium
A. set_sleep_mode() is missing a parameter
B. No error, code is correct
C. sleep_cpu() should be replaced with sleep_mode()
D. sleep_enable() must be called before sleep_cpu()

Solution

  1. Step 1: Check function order

    The function sleep_enable() must be called before sleep_cpu() to enable sleep mode properly.
  2. Step 2: Verify other parts

    set_sleep_mode() is correctly called with a valid mode. sleep_cpu() is the correct function to enter sleep.
  3. Final Answer:

    sleep_enable() must be called before sleep_cpu() -> Option D
  4. Quick Check:

    Enable sleep before sleeping [OK]
Hint: Call sleep_enable() before sleep_cpu() to avoid errors [OK]
Common Mistakes:
  • Calling sleep_cpu() before sleep_enable()
  • Confusing sleep_cpu() with sleep_mode()
  • Missing parameters in set_sleep_mode()
5. You want to save maximum power on your Arduino but still wake it up using a button press on pin 2. Which sleep mode and wake method should you use?
hard
A. Use SLEEP_MODE_IDLE and poll the button in loop()
B. Use SLEEP_MODE_STANDBY and wake with delay()
C. Use SLEEP_MODE_PWR_DOWN and attach an external interrupt on pin 2
D. Use SLEEP_MODE_ADC and check button state with analogRead()

Solution

  1. Step 1: Choose lowest power sleep mode

    SLEEP_MODE_PWR_DOWN uses the least power by shutting down most parts of the chip.
  2. Step 2: Select wake method

    To wake from power-down mode, an external interrupt on pin 2 (using attachInterrupt) is needed because polling or delay() won't wake the CPU.
  3. Final Answer:

    Use SLEEP_MODE_PWR_DOWN and attach an external interrupt on pin 2 -> Option C
  4. Quick Check:

    Lowest power + external interrupt wake = Use SLEEP_MODE_PWR_DOWN and attach an external interrupt on pin 2 [OK]
Hint: Lowest power sleep needs external interrupt wake [OK]
Common Mistakes:
  • Using idle mode which uses more power
  • Trying to wake with delay() which doesn't work
  • Polling button instead of using interrupt
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