Difference between revisions of "Pressure/bend sensor"

From Interaction Station Wiki
Jump to navigation Jump to search
 
Line 126: Line 126:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
[[Category:Sensors]]
+
[[Category:Sensors]][[Category:Arduino]][[Category:Electronics]]

Latest revision as of 11:13, 18 November 2022

Making pressure and bend sensors


One of the most powerful tools you can plug into your Arduino is a sensor, a small electronic device that enables the microcontroller to take readings from its surroundings, reacting in accordance to its program.
Digital and analog are two methods of transmitting information. The Arduino world uses both methods.
The Arduino reserves some pins for digital input and output, and others for analog. A servo’s data wire plugs into a digital pin, whereas an analog light sensor sends its data reading to an analog pin. Which pins are which? You can easily tell just by looking at the Arduino.

Digital Sensors


Digital sensors are the sensors that gives 2 state (on/off, 5V/0V). You will connect them to digital Pins and set it as INPUT.
Digital data consists exclusively of 0s and 1s .
For example, consider a push button switch. This is one of the simplest forms of sensors. It has two discrete values. It is on, or it is off. Other 'discrete' sensors might provide you with a binary value.
Another example of a digital sensor is an accelerometer, which sends a series of data points (speed, direction, and so on) to the Arduino. Usually digital sensors need a chip in the sensor to interpret the physical data.

Analog Sensors


Analog sensors on the other hand, gives range. You connect this types of Analog sensors to Analog Input pins which is measuring the incoming voltage between 0V-5V*. Arduino converts this incoming voltage into the number between 0-1023.
Analog data is transmitted as a continuous signal, almost like a wave. In other words, an analog sensor doesn’t send a burst of 1s and 0s like digital sensors do; instead, the sensor modulates a continuous signal to transmit data.

Pressure sensor / Force Sensitive Resistor


The resistance of an FSR varies as the force on the sensor increases or decreases. When no pressure is being applied to the FSR, its resistance will be larger than 1MΩ. The harder you press on the sensor’s head, the lower the resistance between the two terminals drops.
Foam.png
Basically, the conductive foam in which many ICs are shipped is, well, conductive. It has a high resistance, but that resistance decreases when the foam is compressed — in other words, a sort of primitive variable resistor. I used this property to create a basic pressure sensor. We will place a small square of foam between two conductive materials. The object must be secured ( held in place) by tape, or other means.
It’s definitely not a precision instrument, however. But, hey it is a self-made sensor and it works!
Pressure.png

Voltage divider



Read the Sensor

const int sensor= A0;


// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
 
    
}

// the loop routine runs over and over again forever:
void loop() {
  int sensorValue = analogRead(sensor);
  Serial.println (sensorValue);
  delay(1);        // delay in between reads for stability
  
}


Map the values so we can control an led

const int led = 3;
const int sensor= A0;

int fadeval = 0;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
 // initialize led pin as an output:
  pinMode(led, OUTPUT);
    
}

// the loop routine runs over and over again forever:
void loop() {
  int sensorValue = analogRead(sensor);
 fadeval = map(sensorValue, 0, 1023, 0, 255);
 analogWrite( led, fadeval);
 delay(1);        // delay in between reads for stability
 //Serial.println (sensorValue);
}


Add a threshold value

const int led = 3;
const int sensor= A0;
const int threshold = 10;

int fadeval = 0;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
 // initialize led pin as an output:
  pinMode(led, OUTPUT);
    
}

// the loop routine runs over and over again forever:
void loop() {
  int sensorValue = analogRead(sensor);
  //Serial.println (sensorValue);
  fadeval = map(sensorValue, 0, 1023, 0, 255);
  if (fadeval > threshold) {
  analogWrite( led, fadeval);
  }else{
  analogWrite (led, LOW); 
  }
  delay(1);        // delay in between reads for stability
  Serial.println (sensorValue);
}