Thermistor MCP9701

 

Met de thermistor MCP9701 is het eenvoudig en goedkoop mogelijk om temperatuur metingen te US181 Hall Effect Sensorverichten. De elektrische weerstand is lineair afhankelijk is van de temperatuur en goed te combineren met een Netduino. Deze heb ik gekocht bij iPrototype

Met onderstaande c# code voor een Netduino werkt dit redelijk. De metingen zijn niet erg nauwkeurig maar voldoende voor mijn toepassing.

    public class MCP9701
    {
        private const int READCOUNT = 50; // read the digital value from the ADC X times every 10 msec. and take the average

        protected AnalogInput adcPort;

        /// <summary>
        /// Initialize the analog pin where the MCP9701 is connected to
        /// </summary>
        /// <param name="pin">pin: the analog pin where the MCP9701 is connected to</param>
        public MCP9701(Cpu.Pin pin)
        {
            // Assign the pin
            this.adcPort = new AnalogInput(pin);
        }

        /// <summary>
        /// Read clean Digital Value for reference and debugging
        /// </summary>
        public int ReadDigitalValue
        {
            get { return adcPort.Read(); }
        }

        /// <summary>
        /// Get the Temp in Celsius
        /// </summary>
        public double Celsius
        {
            get {
                int digitalVal = this.ReadSmooth();

                double digitalValue = (double)this.ReadSmooth();
                // Calculate now according to documentation: Vout = Tc * Ta + Vo
                // Ta = (Vout - Vo) / Tc, or: Ta = (Vout - 400 mV) / 19,5 Mv/oC
                // digitalValue = ((digitalValue / 1023 * 3.3) - 0.400) / 0.0195;
                // digitalValue = digitalValue * 0,1654259718775848 - 20,51282051282051
                return digitalValue * 0.1654259718775848 - 20.51282051282051;
            }
        }

        /// <summary>
        /// Get the Temp in Farenheit
        /// </summary>
        public double Farenheit
        {
            get { return ((Celsius * 9.0) / 5.0) + 32; }
        }

        /// <summary>
        /// Read the temperature as an digital value (0..1023) from the MCP9701
        /// </summary>
        /// <returns>Temperature in Celsius</returns>
        public int ReadSmooth()
        {
            int digitalTotal = 0;
            // Read the values a READCOUNT times and take the average
            for (int i = 1; i <= READCOUNT; i++)
            {
                digitalTotal += adcPort.Read();
                Thread.Sleep(10);
            }
            return digitalTotal / READCOUNT;
        }
    }
 Posted by at 21:51

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>