Hi guys, welcome to this tutorial. One of the most important things everyone wants to keep track of daily is, time and with easy to use platforms like the arduino it is very easy to create your own timepiece and in the case of this tutorial add a temperature monitor to it.
For this tutorial, we will be creating a real-time clock and temperature monitor using the simple and easy to use DS module. The DS is a very low power RTC chip, it has the ability to keep time with incredible accuracy such that even after power has been disconnected from your product, it can run for years on a connected coin cell battery. The module also comes with a quite accurate temperature sensor which we will be using to get temperature readings.
Real Time Clock and Temperature Monitor using DS3231 Module
The following components will be needed for this tutorial. They can be purchased via the links attached. Arduino Mega, or any other variation 4. Jumper wires 5. Potentiometer if not using an LCD shield 6. Small Breadboard. Connect all components as shown in the Fritzing schematics below, kindly note the LCD connection will not be needed if using the shield. Next connection is between the LCD and the Arduino.
If you are using the screen and keypad shield whose link is attached above, all you will just need to do is plug it in to your arduino as shown below. Code With the connections done, lets jump into writing the code. The first thing we need to do is to download the arduino library for the ds RTC. To do a break down of the code, the first thing we do in the code is to include the libraries that carry some of the dependencies needed for our code to run.
The Libraries include wire. The code is a modified version of the example found in the arduino library. The first thing we will be doing with the code is setting the time of the ds The time is set using this line under the setup section. The device does not come with time preset but after setting it once, the action will no longer be needed. The next thing after this is to move into the loop function. After uploading the code for the first time, the time setting part in the setup is then commented out and the code can be uploaded again.
A youtube video on how the project works can be found here. The video tutorial is created by educ8s. I want to do the same thing but with arduino uno not mega how to make the architecture wires…. Anyway, lest be serious. Libraries get updated and a whole lot of things get swapped out.
I believe that is what you are currently experiencing.Post a Comment. We can use w: ntpd for date and time synchronizing with NTP servers. But what we can do if we do not want to use NTP? What we can do if we want to use our RPi standalone? Also, Raspbian OS which based on Debian uses " fake hwclock " module:.
Some machines don't have a working realtime clock RTC unit, or no driver for the hardware that does exist. This will stop some of the problems that may be caused by a system believing it has travelled in time back tosuch as needing to perform filesystem checks at every boot.
But we need to have real hwdclock and abilities for standalone work! First, we need find and buy hardware. Then, we need buy this RTC. It's very expensive and we can make bargain deal. We can use modules for Arduino. They have much lower cost. For example, we can buy DS from aliexpress. The main difference - connectors.
We must connect all pins from DS to the our Raspberry Pi. DS DIY module. So, now we must find pin numbers for GPIO. As you see, all of them located near each other: 3. After wires attached it will look like this:. Be careful when wiring, you can damage your RTC when wiring in wrong way. Also, you can see that my RPi have passive cooling system :.
First, I installed i2c library which used for DS searching and connection checking. Make sure your Raspberry Pi is connected to the internet when installing the drivers. The new Raspbian distro already have the I2C driver installed but they are disabled by default. To enable it all you need to do is comment out a line by putting in front. At the prompt type. Now we can continue and set-up our new device. After I2C setup by previous commands we have i2c module loaded at startup. So, now we must only configure our DS I found this command many times.
But there is no i2c-1 on my Raspberry Pi because I have model B revision 1. After that we can test how linux can communicate with you new RTC:. You should see a response with what the chip thinks is the date. Mine said or some such. No problem. If you have problems with system date and time you must fix it before writing it to the DSGitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
If nothing happens, download GitHub Desktop and try again. If nothing happens, download Xcode and try again. If nothing happens, download the GitHub extension for Visual Studio and try again. This library was written because other libraries I had seen seemed less than satisfactorily simple. This library makes it a very simple job to handle all the functions of the clock, and extremely easy to log data of arbitrary data types with essentially just one command - for example if you wanted to log the results of an analogReadthen simply Upload the example to your Arduino and open the Serial Terminal at Baud.
The HelloWorld sketch will prompt you to set the time, the battery on your module will keep the time ticking away once it is set. I recommend to just look at the examples which show you how to use all the features, but if you want the nitty-gritty then here is the full class reference.
Skip to content. Dismiss Join GitHub today GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. Sign up. Branch: master. Find file. Sign in Sign up. Go back. Launching Xcode If nothing happens, download Xcode and try again.
Latest commit. Latest commit dd5 Sep 20, What is this module? Why this library? How do I connect my module? These modules are I2C devices, so that's easy as pie.Wayne's Tinkering Page. I did not base my library on any other library for the DS so, if you've been using another library for the DS, you'll find my API to be different. See source and header files for license details.
Constructor for the DS library. Should be declared as a global variable, such as:. Initializer function. Returns ' true ' if the input string was successfully parsed, else false. Here are some examples of valid time input strings:. Note: leading zeroes are not required on h,m or s values, but are allowed.
Note: time array must be of length 7, or larger. Does nothing if value in time is already the requested format. The hours value in time is adjusted to convert to new mode. Note: time array must be of length 7. Uses Zeller's Congruence to compute and set the 'day of week' value in time. Returns 'true' if the input string was successfully parsed, else false. Note: leading zeroes are not required on m,d,y,h,m or s values, but are allowed.
Set current time copying values in time array to DS 's registers. Get current time by reading DS 's registers into the time array.
Here are some example output strings:. Add the number of seconds to the time value in the time array. Returns ' true ' if addition caused wrap around to new day. Note: time array must be of length 7or larger. Here are the valid ' type ' values for Alarm Retreive a previously set Alarm time and copy into the time array.Pages: .
Topic: How ds works? Read 1 time previous topic - next topic. How ds works? Helloo world! Re: How ds works? How does it work, on what level? From the perspective of the user, you install the battery, connect it to the I2C pins, and then your sketch talks to it using an RTC library there are several to choose from over I2C using the Wire library ; I think you have to first upload a sketch to set the time, and thereafter it keeps time and when your sketch asks for the time over I2C, the RTC returns it see the examples for the library you're using to see how to do that.
In terms of how the chip works "under the hood" see the datasheet - it gives a detailed technical description, in far more detail than you need in order to use it unless you needed to write the library yourself, but you don't because there already exist several, which are widely used and well maintained.
Here are pointers to a couple of useful starts for your research The RTC chip maintains such an accurate timing by virtue of a built-in 'temperature compensated crystal oscillator subsystem Fig-2 ' which provides 1 Hz timing signal for Clock, Calendar, and Alarms.
The oscillator is always on when the chip is powered by the Vcc-pin Fig The 'Hours Register' will be presented a short time later Why? It is apparently complicated due to the presence of too many signal signatures! Thus, 00 seconds are coded as ; 01 seconds are coded as ; Here, we observe that only 7-bit is good enough to hold the range 00 - 59 of the seconds of the clock; accordingly, the size of the Seconds Register is 7-bit Fig-3 ; the lower 4-bit accommodate the value - with positional weight of 1 one and the upper 3-bit accommodate the value - with positional weight of 10 ten.
For example: assume that the current content of the Seconds Register is What is the value of seconds?How to set DS3231 Real time clock module for Arduino
After that the Clock will be at running condition; we will read the current values of minutes and seconds from the RTC chip and will display them on the top line of the LCD. Forget the Hours readings. Code: [Select]. Let us accept that Sunday is the 1st day; Monday is the 2nd day; Tuesday is the 3rd day; Wednesday is the 4th day; Thursday is the 5th day; Friday is the 6th day; Saturday is the 7th day. We may assign the following bit pattern at Bit-2 to Bit-0 positions of the Day Register Fig-8 for the days of the week: Code: [Select].We all know that most MCUs we use for our projects are time-agnostic; simply put they are unaware of the time around them.
It manages all timekeeping functions and features a simple two-wire I2C interface which can be easily interfaced with any microcontroller of your choice.
The chip maintains seconds, minutes, hours, day, date, month, and year information. The date at the end of the month is automatically adjusted for months with fewer than 31 days, including corrections for leap year valid up to It also provides two programmable time-of-day alarms.
The other cool feature of this board comes with SQW pin, which outputs a nice square wave at either 1Hz, 4kHz, 8kHz or 32kHz and can be handled programmatically. This can further be used as an interrupt due to alarm condition in many time-based applications.
Most RTC modules come with an external 32kHz crystal for time-keeping. But the problem with these crystals is that external temperature can affect their oscillation frequency. This change in frequency can be negligible but it surely adds up. Right next to the integrated crystal is a temperature sensor. This sensor compensates the frequency changes by adding or removing clock ticks so that the timekeeping stays on track.
DS comes with an external 32kHz crystal for time-keeping whose oscillation frequency is easily affected by external temperature. This usually results with the clock being off by around five or so minutes per month.
DS is still a great value RTC and serves you well, but for projects that require more accurate time-keeping, DS is recommended. The DS incorporates a battery input, and maintains accurate timekeeping when main power to the device is interrupted. The built-in power-sense circuit continuously monitors the status of VCC to detect power failures and automatically switches to the backup supply.
So, you need not worry about power outages, your MCU can still keep track of time.
The bottom side of the board holds a battery holder for 20mm 3V lithium coincells. Any CR battery can fit well. It can be used to save settings or really anything.
Each one of these is used to hardcode in the address.Just setting the time is pretty complex, not mentioning the code. Therefore I have found a great and easy to use library which really enhances the use of the DS chip. Let's get right onto it. Did you use this instructable in your classroom? Add a Teacher Note to share how you incorporated it into your lesson.
Of course, you will need to connect the chip first. It is very easy, do it according to the pictures or below:. There are also two other pins which are the32K and SQW ones but we will not use them as we get the full functionality through the I2C interface. We will use a library from Henning Karlsen which is great.
Thanks a lot for that! There are some basic functions such as reading time and date and writing time and date. Download the library here:.
I will just use an example sketch from the library which will include lots of comments for you to read, enjoy:. Tip 2 months ago on Step 3.
Question 1 year ago.
Arduino - DS3231 Real Time Clock
I've connected the RTC to the arduino exactly as it shown above also run the code. The only problem is whenever i turn on my arduino, it displays the time and date which i've set in my code. Any explanation for this? Answer 11 months ago. I had the same problem too but here's what I did: 1.
Uncomment the lines with rtc. Set the day and time correctly 3. Set the date by day, month and year first rather than month, day and year as the comment in the code says 4. Upload the sketch 5. Comment back again the lines with rtc. Upload the sketch again That should do it. Question 1 year ago on Step 3. Reply 1 year ago.
Real Time Clock Using DS3231 (EASY)
In the bottom righthand corner of your serial monitor is the baud rate at which the serial monitor runs at. The baud rate in this code is set atwhile you serial monitor is set to baud. To fix this you must make the baud rates match by either change the line of code from Serial. Reply 3 years ago. Click on the drop-down menu, and choose ", baud" and it will start to work for you. This is a relatively disappointing 'ible in my opinion!