This circuit allows for easy adjustment of a threshold you define for some sensor input. For example, you use a photocell to detect ambient light; if it gets dark enough, play a sound. You define the threshold in code as some number, but when you install the piece in a different space with different ambient light, the threshold needs to be changed. Rather than need to open up your piece, connect a computer, and reprogram, you can just turn a knob to “trim” the threshold value up or down.
You can test the above circuit using a potentiometer instead of the force sensor shown, remember it can be a simple voltage divider like the trimmer is, or you can use 2 legs and a fixed resistor.
For the fixed resistor, try between 1/10 and 1/2 of the highest value of your variable resistor. E.g. if you’re using a 5k variable resistor (or part of a potentiometer), which goes between 0 and 5000 ohms, try a 500-2500 ohm fixed resistor with it (a 1K prob easiest to find).
The optimal value for you math people is
SQRT (minimum * maximum)
https://ericjformanteaching.wordpress.com/2013/02/04/voltage-divider-circuit/
In practice the true minimum might be zero which messes up the equation, and the true maximum might be in the millions, with a very steep curve. So it’s important to test the real-world boundaries. It usually doesn’t matter too much if you are fairly close to optimal. The only way to really tell what’s going on is to graph the “response curve” – i.e. the resulting voltage output as you interact with the sensor – either with an oscilloscope or by sending arduino data to processing. We’ll do the latter in class soon.
/* Analog input with "trimmer" calibration; serial output The circuit: - analog input connected to analog pin 0. - If potentiometer, center pin to analog 0, side pins to +5V and ground - If variable resistor, one pin to +5V, other pin to both analog 0 AND to a fixed resistor to ground - trim pot to analog pin 1 (as voltage divider, see above) */ int threshold = 250; void setup() { Serial.begin(9600); } void loop() { // read the analog input into a variable: int analogValue = analogRead(0); // read the trimpot analog input: int trimmer = analogRead(1); // convert trimmer # into a range which will be added to analogValue: trimmer = map(trimmer,0,1023,-50,50); // print the result: Serial.print(analogValue); Serial.print(" + "); Serial.println(trimmer); // if analogValue is over the "trimmed" threshold, do something: if(analogValue > (threshold + trimmer)) { Serial.println("HEY!!!!!!!!!!!!!!!!!!!"); } }
Leave a Reply