GolamMostafa:
First of all, thanks for availing the opportunity to pick up the fragrances of pleasure by doing the remaining 2-point checks which were, in fact, my job.
I think you reached a little too far there for a fancy compliment. A "fragrance" typically refers to a nice smell, like flowers or perfume. "Fragrances of pleasure" sounds a bit erotic.
Most of the time I can understand the meaning of your broken English, but this one is just weird.
I have made a test run of the measurement process using the equation T = 0.9765*ADCT - 260.4545 and the Serial Monitor; the read out is about 79.170C. The room temperature is about 270C. When I put my fingers over the chip, the temperature seems to be changing!
Did you type that number incorrectly? 50 degrees of error is way too much.
How are you reading the temperature sensor? If you are doing analogRead(8), it won't work. Here are some lines pulled from the analogRead() function in the core:
if (pin >= 14) pin -= 14; // allow for channel or pin numbers
...
ADMUX = (analog_reference << 6) | (pin & 0x07);
The subtraction allows the symbols A0-A5 (defined as digital pins 14-19) to be used in analogRead(), so that A0 becomes channel 0, A1 becomes channel 1, etc. This part only gets in the way of trying to set the internal reference as the input, since that's channel 14. And it's easy to work around, since you can just add A0 to the intended channel number and it will be subtracted out. The temp sensor is channel 8, so it won't be affected by this. Just be aware that it's there.
It's the second line that's the real problem. It is the one thing in the Arduino core that I can say legitimately infuriates me. Masking the pin channel with 0x7 means that no matter what argument you pass into the function, only channels 0-7 can be selected. The temperature sensor (channel 8), the internal reference (channel 14, useful for trying to measure the Arduino's own supply voltage), and GND (channel 15) are impossible to select with analogRead().
Because the channel selection is masked, if you use the statement analogRead(8), you are actually selecting channel 0, which is pin A0. Since you've probably got that unconnected for this test, the reading will be pretty random.
If you are properly selecting the temperature input, then you might have a controller with a internal reference on the lower end of the tolerance range, and a temperature sensor reading higher than average.
Once the projects are done by the students, I will post the photos in this thread, if allowed.
Photos are definitely allowed.
Any suggestion in respect of alternative ways/methods/algorithms for realizing the project would be highly appreciated!
If the aim is to explore the limitations of the method itself and not just the Arduino software, a good exercise could be to have the students all share their results with each other, or have a few groups share them with you to write them up on a whiteboard, so they can see how the results vary over multiple chips and get a better idea of how rough and imprecise this sensor really is.
If resources allow it, another phase of the activity can be to use a more accurate external reference to see if that improves the results. Calculations can be made about how much inaccuracy is from the internal reference and how much is from the temperature sensor.
The datasheet doesn't say, but I'm pretty sure the temperature sensor is just a few diodes in series with a current source, like this diagram from a PIC datasheet:

That could lead into a discussion of what better ways might exist to measure temperature, such as an NTC resistor or a thermocouple.
