A DS1307 can be configured to output a 1Hz square wave that could be used to generate an interrupt that would wake the microcontroller from sleep mode.
That sounds like it’s a ways off from the 30-minute requirement, but it can work quite well by simply counting the wake-ups, and when 30 minutes (1800 wake-ups) have elapsed, take the measurements. Else it just increments the counter and goes right back to sleep. This can happen fast enough that the current used by the microcontroller waking up every second is negligible.
Actually a similar result can be achieved without an external RTC by using one of the MCU’s internal timers or the watchdog to generate an interrupt. Accuracy in this case is dependent on the accuracy of the MCU’s system clock, which often will not be as accurate as an external RTC, but still can be good enough for many applications.
So this can all work very well indeed, but there is a major problem when using a Uno for this kind of project.
The ATmega328P microcontroller is not the only thing on the Uno board that draws current. In fact, the other stuff on the board draws more current than the MCU and continues to do so even if the MCU is sleeping! The MCU itself will draw 11 or 12mA when running, and in the deepest sleep mode, less than 1µA, which for most practical purposes can be considered to be zero. I measured the current drawn by an Uno at about 42mA with the MCU running, and about 31mA with the MCU in power-down sleep mode.
This is one reason why Arduinos are called “prototyping platforms”. The solution to this particular problem is to design a circuit that consists of a microcontroller and only whatever other circuitry is required to do the job.