I am hardly a good statistician, but I'll try to contribute. Can't comment for now (not enough Reputation) so directly as an answer. Assuming you want a CI at 95% and normal distribution of your measurements, CI definition is
$CI= 1.96* (sd /\sqrt{N})$
with sd the standard deviation and N the number of samples.
Your measurements will be between $3-20$, so you might assume worst-case-scenario with large sd. Based on thin air I assumed a sd of $15$ but very simple (and perhaps unnecessary) R simulations showed sd to be between $4$ and $6.5$ for an expected range of $3-20$. A sd of $6.5$ may then help choose a "cautious" (i.e, quite large) sample size.
EDIT: simulations for sd estimation
# Ranges for outcomes
widest_range=seq(from=0,to=3000,by=1)
likely_range=seq(from=3,to=20,by=1)
# matrix to store the results
nb_sims=30
Mat_Results=matrix(0,ncol=2,nrow=nb_sims)
colnames(Mat_Results)=c("Widest_range","Likely_range")
# sims
for (i in (1:nb_sims)) {
# sampling assuming 10 measures (EDIT: uniform distribution)
measures_widest=sample(widest_range, 10, replace = FALSE, prob = NULL)
measures_likely=sample(likely_range, 10, replace = FALSE, prob = NULL)
# sd
Mat_Results[i,1]=sd(measures_widest)
Mat_Results[i,2]=sd(measures_likely)
}
x11()
par(mfrow=c(1,2))
boxplot(Mat_Results[,1],main="SD with widest range")
boxplot(Mat_Results[,2],main="SD with likely range")