Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Over Druksensor
De druksensor wordt ook wel force sensing resistor, force sensitive resistor of kortweg FSR genoemd. De druksensor is in feite een weerstand waarvan de weerstand verandert afhankelijk van de druk die erop wordt uitgeoefend. De druksensor is:
Betaalbaar en eenvoudig in gebruik.
Geschikt voor het detecteren van fysieke druk of knijpen.
Niet geschikt om exact te bepalen hoeveel kilogram er op wordt uitgeoefend.
De druksensor wordt toegepast in elektronische drums, mobiele telefoons, draagbare game-apparaten en vele andere draagbare elektronica.
Pinout
Een druksensor heeft twee aansluitpinnen. Omdat het een soort weerstand is, is het niet nodig om de pinnen van elkaar te onderscheiden. Ze zijn symmetrisch.
Hoe het werkt
De druksensor is in wezen een weerstand die zijn waarde verandert afhankelijk van de druk die erop wordt uitgeoefend. Hoe harder u op de sensor drukt, hoe lager de weerstand tussen de twee aansluitingen wordt.
Bedradingsschema
Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
Hoe programmeert u voor de druksensor
De analoge ingangen van Arduino Uno pin A0 tot A5 kunnen gebruikt worden als analoge ingangen. De analoge ingang zet de spanning (tussen 0 V en VCC) om in een geheel getal tussen 0 en 1023, ook wel ADC-waarde of analoge waarde genoemd.
Door één pin van de druksensor aan te sluiten op een analoge ingang, kunnen we de analoge waarde uitlezen met behulp van de analogRead() functie. Zo weet u hoe hard er op de sensor gedrukt wordt.
Arduino Code
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-force-sensor*/#define FORCE_SENSOR_PIN A0 // the FSR and 10K pulldown are connected to A0voidsetup() {Serial.begin(9600);}voidloop() {int analogReading = analogRead(FORCE_SENSOR_PIN);Serial.print("Force sensor reading = ");Serial.print(analogReading); // print the raw analog readingif (analogReading < 10) // from 0 to 9Serial.println(" -> no pressure");elseif (analogReading < 200) // from 10 to 199Serial.println(" -> light touch");elseif (analogReading < 500) // from 200 to 499Serial.println(" -> light squeeze");elseif (analogReading < 800) // from 500 to 799Serial.println(" -> medium squeeze");else// from 800 to 1023Serial.println(" -> big squeeze");delay(1000);}
Snelle stappen
Kopieer bovenstaande code en open deze in de Arduino IDE
Klik op de Upload-knop in de Arduino IDE om de code naar de Arduino te laden
Druk op de druksensor
Bekijk het resultaat in de Seriële Monitor.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Force sensor reading = 0 -> geen druk
Force sensor reading = 0 -> geen druk
Force sensor reading = 132 -> lichte aanraking
Force sensor reading = 147 -> lichte aanraking
Force sensor reading = 394 -> lichte knijpdruk
Force sensor reading = 421 -> lichte knijpdruk
Force sensor reading = 607 -> gemiddelde knijpdruk
Force sensor reading = 791 -> gemiddelde knijpdruk
Force sensor reading = 921 -> stevige knijpdruk
Force sensor reading = 987 -> stevige knijpdruk
Force sensor reading = 0 -> geen druk
Force sensor reading = 0 -> geen druk
Ln 11, Col 1
Arduino Uno on COM15
2
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
De onderstaande videodemo gebruikt de onderstaande code. Let op: de video toont de Arduino Uno R4, maar het werkt identiek voor de Arduino Uno R3:
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-force-sensor*/#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>// OLED display configuration#define SCREEN_WIDTH 128#define SCREEN_HEIGHT 64#define OLED_RESET -1Adafruit_SSD1306display( SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);// Force-sensitive resistor input#define FORCE_SENSOR_PIN A0// LED pins used to indicate force levelconstint ledPins[8] = { 2, 3, 4, 5, 6, 7, 8, 9};// Calibrated force sensor rangeconstint FORCE_MIN = 0;constint FORCE_MAX = 1000;// Exponential moving average filterfloat smoothValue = 0;constfloat alpha = 0.3;// Initialize hardware and displayvoidsetup() {Serial.begin(115200);// Configure LED outputs and turn all LEDs off.for (int i = 0; i < 8; i++) {pinMode(ledPins[i], OUTPUT);digitalWrite(ledPins[i], LOW); }// Initialize the OLED using I2C communication.if (!display.begin( SSD1306_SWITCHCAPVCC, 0x3C )) {Serial.println("OLED failed!");// Stop execution if the OLED cannot be initialized.while (1); }display.clearDisplay();display.setTextColor(SSD1306_WHITE);// Display startup screen.display.setTextSize(2);display.setCursor(20, 25);display.println("DIYables");display.display();delay(1500);// Initialize the filter with the first sensor reading// to prevent an incorrect initial value. smoothValue = analogRead(FORCE_SENSOR_PIN);}voidloop() {// Read the current FSR value.int rawValue = analogRead(FORCE_SENSOR_PIN);// Apply exponential moving average filtering// to reduce sensor noise and fluctuations. smoothValue = alpha * rawValue + (1.0 - alpha) * smoothValue;int forceValue = (int)smoothValue;// Convert the sensor value into 8 force levels.int level = map( forceValue, FORCE_MIN, FORCE_MAX, 0, 8 ); level = constrain(level, 0, 8);// Turn on LEDs progressively according to the force level.for (int i = 0; i < 8; i++) {if (i < level) {digitalWrite(ledPins[i], HIGH); }else {digitalWrite(ledPins[i], LOW); } }// Output sensor data for monitoring and calibration.Serial.print("FSR = ");Serial.print(forceValue);Serial.print(" | Level = ");Serial.println(level);// Refresh OLED display.display.clearDisplay();// Display title.display.setTextSize(2);display.setCursor(50, 0);display.println("FSR");// Configure the force indicator as a battery-style bar.int barX = 10;int barY = 25;int barWidth = 108;int barHeight = 18;// Draw the outer bar.display.drawRect( barX, barY, barWidth, barHeight, SSD1306_WHITE );// Draw the battery terminal.display.fillRect( barX + barWidth, barY + 5, 4, 8, SSD1306_WHITE );// Calculate the filled portion based on the force level.int fillWidth = map( level, 0, 8, 0, barWidth - 4 );if (fillWidth > 0) {display.fillRect( barX + 2, barY + 2, fillWidth, barHeight - 4, SSD1306_WHITE ); }// Display current force level.display.setTextSize(1);display.setCursor(5, 50);display.print("LEVEL: ");display.print(level);display.print("/8");// Display project branding.display.setCursor(78, 50);display.print("DIYables");display.display();// Short delay for stable display updates.delay(30);}
U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!