Reading OCV (Open-Circuit Voltage) can let you estimate the amp-hour capacity, with a three limitations.
The first is that the battery isn't under load. Voltage dips under load, so you don't know if 11.5V is a dead battery or a fully charged battery that's supplying several amps.
The second is that the battery hasn't been loaded or charged recently. Chemical reactions are slow, particularly for lead-acid. If you start and then stop a heavy load (like starting a car) then immediately monitor the voltage, you will see voltage steadily climb for many minutes as the battery recovers (which is why, if you run your battery 'down' trying to start your car, you can wait half an hour and it'll have enough juice to try again). Similarly, it is possible to put a "surface charge" to 13.8V on a battery, disconnect it from the charger, and then watch as voltage falls to only 13.4V over several minutes.
There is a third proviso, but more on that later.
The most accurate battery capacity meter is a columb counter. If you start with the battery in a known state (such as the OCV with the provisos mentioned above), you continuously monitor the amps going in and out of it and keep a running total.
Since a columb counter does not have infinite resolution, periodic re-calibration with OCV will be required or else drift will occur.
An ACS712 or similar hall-effect ammeter is what I would use in conjunction with an Arduino for this project. With it, you will be able to sense and display the current net charge/discharge rate as well as implement a columb counter for tracking capacity. A separate resistor voltage divider will give you battery voltage.
One interesting application of a columb counter is to detect long-term battery degradation that OCV cannot. (This is the third problem with OCV as mentioned above). A new battery might have 220Ah, but after many charge/discharge cycles (especially if it's not refilled with distilled water), it will hold significantly fewer amp-hours. Such a battery may show a "healthy" 13.8V after a charge, but drop to a completely useless 6V when a load is placed on it. Smart software on the Arduino can detect this condition in the early stages and signal the user to obtain a replacement battery before it gets really bad.