I made this circuit for testing the sleep and wakeup features of Arduino using an external interrupt produced by a DS3231 real time clock with a programmed alarm. This feature is very useful when you want your Arduino project to run on batteries because sending the Arduino to sleep mode greatly reduces power consumption and extends the battery life.
For doing this I used a custom DS3231 library for Arduino (that I called RTClibExtended) that I produced modifying an existing library RTClib by Adafruit, which did not include the functionalities for programming alarms. You can download this library from https://github.com/FabioCuomo/FabioCuomo-DS3231/.
In my sketch I also use the Low-Power library for programming the sleep mode, that you can download from https://github.com/rocketscream/Low-Power/.
- Arduino (I used the Nano version for this project)
- A 9 Volts battery
- LM2596S Step-down voltage regulator, for reducing the power voltage to 5 Volts
- DS3231 module
Step 1: Connect All Parts
Connect all parts as indicated in the figure.
The Voltage regulator is a variable one: adjust the output voltage to 5 Volts before connecting the power to other components.
Step 2: Install the Libraries
Download the RTClibExtended and Low-Power libraries and install them in your Arduino library.
Step 3: The Sketch
Copy and past or download the sketch.
It programs an alarm on the DS3231 clock at a given time every day. Change the time for your test, compile the sketch and load it. The sketch is fully commented to explain what is done.
The test uses the on-board led on Arduino for evidencing the activity status.
When the sketch starts, the led should lit up for 1 second, to signal that it started correctly, than Arduino should enter the sleep mode: the led is set to OFF for indicating this.
At the programmed time, the DS3231 will produce an interrupt on the SQW pin connected to the Arduino D2 pin (which goes from the HIGH to the LOW level) which will wake up the Arduino from the sleep state, and the led should start to blink to indicate this.
You may use this feature in your projects.