W tym artykule przeprowadzę testy na dwóch czujnikach nacisku FSR 402. Testy te wykażą zależność siły nacisku oraz miejsca uciskania na odbierane przez port analogowy napięcie. Do przeprowadzenia testów wykorzystam również moduł przetwornika czujników tensometrycznych MCP 60021 oraz wyświetlacz oled 128×64.
Spis treści
- Krótki opis
- Specyfikacja
- Przebieg testów
- Pliki do pobrania
Krótki opis
Czujniki jakie będę wykorzystywał podczas wykonywania testów pomiarowych to : FSR 402 110 mm 20 g – 10 kg oraz FSR 402 18 mm 20 g – 6kg. Siłę nacisku na czujnik odczytujemy z napięcia na pinie analogowym podłączonym do niego.
-
Rezystancyjny czujnik siły FSR402 18 mm 20g~6kg25.00zł
-
Rezystancyjny czujnik siły FSR402 7 mm 30g~1500g21.20zł
-
Rezystancyjny czujnik siły FSR402 4 mm 5g~600g20.22zł
-
Moduł Przetwornika Czujników tensometrycznych MCP6002118.13zł
-
Rezystancyjny czujnik siły FSR402 4 mm 1kg~15kg19.91zł
-
Rezystancyjny czujnik siły FSR402 4 mm 50g~2kg21.20zł
Specyfikacja
- FSR 402
- Długość: 110 mm
- Zakres: od 20g do 10kg
- Model: FSR-402
2.FSR 402
- Długość : 18mm
- Model: FSR-402
- Zakres: od 0.2 N do 20 N
- Masa: 0,25 g
Testy
Elementy:
- Arduino Uno lub Mega
- FSR 402 110 mm
- FSR 402 18mm
- Oled 128×64
- 2x moduł przetwornika czujników tensometrycznych MCP 60021
Połączenie
- FSR 402 – MCP 60021
- wtyk 1 – D0
- wtyk 2 – A0
- MCP60021 – Arduino
- GND – GND
- VCC – 5V
- A0 – A0 (MCP 60021 dla FSR 18mm)/ A0 – A1 (MCP 60021 dla FSR 110mm)
- D0 – 2 (FSR 18mm)/ D0 – 3(FSR 110mm)
- Oled – Arduino
- GND – GND
- VCC – 5V
- SCL – SCL / A5 (Uno)
- SDA – SDA / A4 (Uno)
Program
Na początku definiujemy bibliotekę i zmienne dla naszego oled-u. Jak działa oled i odpowiedzi na możliwe problemy dotyczące wyświetlacza znajdziesz w tym artykule ->
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) // The pins for I2C are defined by the Wire-library. // On an arduino UNO: A4(SDA), A5(SCL) // On an arduino MEGA 2560: 20(SDA), 21(SCL) // On an arduino LEONARDO: 2(SDA), 3(SCL), ... #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Potem w funkcji void setup ustawiamy dla dwóch pinów analogowych tryb wejściowy. Znajduję się w niej również if sprawdzający poprawność działania wyświetlacza.
void setup() { // put your setup code here, to run once: pinMode(A0, INPUT); pinMode(A1, INPUT); if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } }
Ostatnie w funkcji void loop() ustawiamy najpierw warunki dla wyświetlacza: Rozmiar czcionki, punkt startowy dla kursora oraz kolor napisu. Po tym znajdują się 3 if-y które w zależności od tego jak wysoki będzie poziom napięcia wyświetlą nam komunikaty dotyczące tego jak mocno ścisnęliśmy czujnik. Po tym aktywujemy funkcję wyświetlającą obraz na oledz-ie. Informacje będą wyświetlane jednocześnie dla obu czujników
void loop() { // put your main code here, to run repeatedly: display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(0,0); display.print(analogRead(A0)); display.setCursor(0,10); if(analogRead(A0) < 20) { display.print("A0: Brak nacisku"); } if(analogRead(A0) < 50 ) { display.print("A0: Slaby nacisk"); } if(analogRead(A0) > 50 && analogRead(A0) < 100) { display.print("A0: Sredni nacisk"); } if(analogRead(A0) > 100) { display.print("A0: Mocny nacisk"); } display.setCursor(0, 30); display.print(analogRead(A1)); display.setCursor(15,30); if(analogRead(A0) < 20 ) { display.print("A1: Brak nacisku"); } if(analogRead(A1) < 30 && analogRead(A0) > 20 ) { display.print("A1: Lekki nacisk"); } if(analogRead(A0) > 30 && analogRead(A0) < 40) { display.print("A1: Sredni nacisk"); } if(analogRead(A0) > 40) { display.print("A1: Mocny nacisk"); } display.display(); delay(20); }
Ja dla bardziej przejrzystego wykonania testów wykonałem pomiary oddzielnie a nie jednocześnie. (Nadal używałem tego programu)
Czujnik siły FSR402 110 m
Czujnik siły FSR402 18 mm