Being as how today is ' day' (date is 3/14 if you put the month number first), I thought I would present a way of estimating by experiment, rather than by calculating it using one of the many methods.
There are several ways to estimate by experiment. Two of the best known are Buffon's needle and Monte Carlo Integration, and before we had computers people did do physical experiments, to demonstrate these techniques really do give an estimate of . Today it is easier to simulate the experiments using a computer. Although these approaches only converge very slowly and are not of practical use for finding , they are of considerable interest from a recreational mathematics standpoint.
The idea I'm going to describe uses the concept of a random wall on the number line, in the guise of the Drunkard's Walk'.

Initially the drunkard is clinging to the lamp-post at 0 but he sets off, staggering randomly along the number line. At each stage he moved to an adjacent number, either the one to the left or the one to the right ,with equal probability. So when is at his next position will be or , each with probability .
Where does come in? Well, rather surprisingly, after a large number of such moves his expected (absolute) distance from the origin is close to . So if we simulate a large number of long walks and take the average of the distances each walk end up from the origin we can reverse the formula to estimate . Specifically if the walks are moves and the average we find is the estimate for is ,
With the aid of a Python program you can find at the end of this post I simulated 1,000,000 random walks of 10,000 moves, and got 3.142857142857143, an error about 0.04%. That's not spectacularly close but it does support the idea that the simulation is converging to |(\pi\) as expected.
Of course you could make it a practical experiment if you wanted — just flip a coin and keep track of the number of heads vs tails. but it would be a bit tedious to do 10,000 flips
Fun Fact
Our drunkard will return to the origin with probability 1, so return is certain, but it is not possible to set a finite value for the expected number of steps this will take.
Credit to Copilot for the drunkard and lamp-post picture.
Code
import random
import math
N = 10000
moves = [-1,1]
total = 0
for trial in range (1000000):
x = 0
for step in range(N):
x = x + random.choice(moves)
total = total + abs(x)
avg = total/1000000
pi_estimate = 2*N/avg**2
print(pi_estimate)