Component | Count |
---|---|
Full Size Breadboard | 2 |
Photoresistor (approx. 10 kOhm - 30 kOhm) | 1 |
Temperature Sensor (TMP36 or LM35) | 1 |
Slide DIP Switch (2 or 4 positions) | 1 |
10 kOhm Resistor | 2 |
Shift Register (74HC595, 14-DIP) | 2 |
4 digit 7-Segment LED Clock Display (Common Anode) | 2 |
220 Ohm Resistor | 8 |
Spindle of Wire (22 Gauge Solid) | 1 |
analogRead(...)
function returns a value
in the range of [0, 1023], where 0 corresponds to 0 V and 1023
corresponds to the reference voltage (5 V by default). Thus, to
convert the raw value to voltage, we must apply
$$V = \frac{a}{1023}V_\mathrm{ref},$$
where \(a\) is the raw analog value, and \(V_\mathrm{ref}\) is the reference
voltage of 5 V.
The TMP36 temperature sensor has voltage-temperature characteristics described in the specifications sheet as Thus, we can compute a temperature from the output voltage using the equation $$T = 100 (V - 0.5),$$ where voltage is measured in volts, and temperature in degrees Celsius. To convert Celsius to Kelvin, we add 273.15.
The light sensing circuit is created using a voltage divider with a 10 kOhm resistor and a photocell (also referred to as a photoresistor). The datasheet for the photocell specifies a linear relationship between the log of the resistance and the log of illumination: $$\log(L) = M \log(R) + b,$$ where \(L\) is luminance measured in lux, and \(R\) is the resistance of the photocell. The output voltage of the voltage divider is given by $$V = \frac{R_D}{R+R_D}V_\mathrm{ref},$$ where \(R_D\) is the 10 kOhm resistance, and \(V_\mathrm{ref}\) is the reference voltage of 5 V. Putting these equations together, we have $$L = \exp\left[M\log\left(R_D[V_\mathrm{ref}-V]/V\right) + b\vphantom{\sum}\right]$$ By measuring luminance in a variety of lightings using a free phone application, as well as the corresponding output voltages of the voltage divider, we experimentally determined the parameters for our particular photocell as \(M = -1.4\), \(b = 15.76\). These values may need to be calibrated for your photocell (e.g. see this tutorial).
For this program, we provide a library to handle the displayWrite(...)
functionality, since this is not part of the Arduino API. This library assumes
the exact hardware configuration as given in the Hardware Setup
above.
To add these files to your program in the Arduino IDE, download them somewhere known on your computer, and go to "Sketch > Add File..." and select both files. In Visual Studio with Visual Micro, right-click on the project and select "Add > Existing Item..." to add the both the header and source files.
analog.ino