Arduino UNO Q - Kraftsensor

Ein Kraftsensor (FSR — Force Sensitive Resistor) ändert seinen Widerstand je nach Druckstärke. Verbunden mit dem 12-Bit-ADC des Arduino UNO Q mit einem Pull-Down-Widerstand erhalten Sie einen Wert von 0 (kein Druck) bis 4095 (maximales Drücken). Mit Bridge und Telegram können Sie sofortige Benachrichtigungen erhalten und Druckstufen aus der Ferne abfragen.

In diesem Tutorial lernen Sie:

Arduino UNO Q Force Sensor

Hardware erforderlich

1×Arduino UNO Q
1×USB-Kabel für Arduino Uno Q
1×Kraftsensor (FSR)
1×10 kΩ Widerstand
1×Steckbrett
1×Jumper-Kabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Kraftsensor

Der Kraftsensor (auch FSR genannt — Force Sensitive Resistor) ist ein dünnes, flexibles Bauteil, das wie ein variabler Widerstand wirkt:

  • Kein Druck angewendet: Sehr hoher Widerstand (mehrere MΩ) → nahezu Nullspannung am analogen Pin
  • Mehr Druck angewendet: Niedriger Widerstand → höhere Spannung → höherer ADC-Wert
Force Sensor Pinout

Der Kraftsensor hat zwei identische Pins (er ist ein Widerstand — Polarität spielt keine Rolle). Er ist nicht für präzise Gewichtsmessungen in Gramm oder Pfund geeignet, aber hervorragend zum Erkennen von Berührungen, Drücken oder Druckereign issen.

Spannungsteiler-Verdrahtung

Da der FSR nur ein Widerstand ist, muss er in einem Spannungsteiler mit einem bekannten Pull-Down-Widerstand (10 kΩ) verdrahtet werden, um eine messbare Spannung zu erzeugen:

3.3V ─── [FSR] ─── A0 ─── [10kΩ] ─── GND
  • Wenn der FSR-Widerstand hoch ist (kein Druck), liest A0 nahezu 0
  • Wenn der FSR-Widerstand sinkt (Druck angewendet), liest A0 höher

12-Bit-ADC auf Arduino UNO Q

Der UNO Q MCU verwendet einen 12-Bit-ADC (0–4095) mit einer 3,3V-Referenz. Die Druckklassifizierungsschwellen in diesem Tutorial sind entsprechend skaliert (R4 verwendet 10-Bit 0–1023; alle Schwellen werden für UNO Q mit 4 multipliziert).

Schaltplan

Arduino UNO Q Force Sensor Wiring Diagram

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Komponente Arduino UNO Q MCU
Kraftsensor Pin 1 3.3V
Kraftsensor Pin 2 A0
10 kΩ Widerstand Pin 1 A0
10 kΩ Widerstand Pin 2 GND

Programmierung des Kraftsensors

  • Lesen Sie die Analogspannung am Kraftsensor-Pin:
int reading = analogRead(FORCE_SENSOR_PIN); // 0-4095
  • Klassifizieren Sie die Druckpegel anhand des ADC-Werts (12-Bit, 0–4095):
if (reading < 40) Serial.println(" -> no pressure"); else if (reading < 800) Serial.println(" -> light touch"); else if (reading < 2000) Serial.println(" -> light squeeze"); else if (reading < 3200) Serial.println(" -> medium squeeze"); else Serial.println(" -> big squeeze");

Arduino UNO Q Code

Der Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten:

  • Der STM32 MCU liest den Analogwert des Kraftsensors jede Sekunde und klassifiziert die Druckpegel
  • Der Qualcomm MPU führt Debian Linux mit Wi-Fi aus — in diesem Abschnitt wird nur der MCU programmiert. Ein späterer Abschnitt zeigt, wie beide Prozessoren über Bridge zusammenarbeiten.
/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-force-sensor */ // Force Sensor (FSR) — Analog reading via voltage divider with 10kΩ pull-down resistor // Arduino UNO Q MCU: 12-bit ADC (0-4095), 3.3V reference #define FORCE_SENSOR_PIN A0 // The Arduino UNO Q MCU pin connected to the FSR void setup() { Serial.begin(9600); Serial.println("Arduino UNO Q Force Sensor ready"); } void loop() { int reading = analogRead(FORCE_SENSOR_PIN); // 0-4095 Serial.print("Force sensor reading = "); Serial.print(reading); if (reading < 40) // no pressure Serial.println(" -> no pressure"); else if (reading < 800) // light touch Serial.println(" -> light touch"); else if (reading < 2000) // light squeeze Serial.println(" -> light squeeze"); else if (reading < 3200) // medium squeeze Serial.println(" -> medium squeeze"); else // big squeeze Serial.println(" -> big squeeze"); delay(1000); }

Schnelle Schritte

Erste Schritte mit Arduino UNO Q? Folgen Sie dem Tutorial Erste Schritte mit Arduino UNO Q bevor Sie fortfahren.

  • Verbinden: Verdrahten Sie den Kraftsensor und Widerstand wie im Schaltplan gezeigt mit dem Arduino UNO Q MCU.
  • Arduino App Lab öffnen: Starten Sie Arduino App Lab und warten Sie, bis es Ihren Arduino UNO Q erkennt.
  • Eine neue App erstellen: Klicken Sie auf die Schaltfläche Neue App erstellen.
Create New App in Arduino App Lab on Arduino UNO Q
  • Geben Sie der App einen Namen, z.B.: ForceSensor
  • Klicken Sie zum Bestätigen auf Erstellen.
Arduino App Lab App folders and files on Arduino UNO Q
  • Sketch einfügen: Kopieren Sie den MCU-Code oben und fügen Sie ihn in sketch/sketch.ino ein.
  • Hochladen: Klicken Sie in Arduino App Lab auf die Schaltfläche Ausführen.
Click Run button in Arduino App Lab on Arduino UNO Q
  • Drücken Sie sanft auf den Kraftsensor und dann stärker — beobachten Sie, wie die Messwerte im Seriellen Monitor ändern.

App Lab Konsolenausgabe

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q Force Sensor ready [2026-04-29 09:00:02] Force sensor reading = 0 -> no pressure [2026-04-29 09:00:03] Force sensor reading = 0 -> no pressure [2026-04-29 09:00:04] Force sensor reading = 528 -> light touch [2026-04-29 09:00:05] Force sensor reading = 588 -> light touch [2026-04-29 09:00:06] Force sensor reading = 1576 -> light squeeze [2026-04-29 09:00:07] Force sensor reading = 2428 -> medium squeeze [2026-04-29 09:00:08] Force sensor reading = 3164 -> medium squeeze [2026-04-29 09:00:09] Force sensor reading = 3684 -> big squeeze [2026-04-29 09:00:10] Force sensor reading = 0 -> no pressure

Bridge: Linux + MCU

Dieser Abschnitt zeigt, wie Sie beide Prozessoren des Arduino UNO Q programmieren, damit die Linux-Seite Kraftwerte empfangen und Druckereignisse über Bridge empfangen kann:

  • Der Kraftsensor ist mit dem MCU verbunden — der MCU liest den Analogwert alle 500 ms und speichert ihn
  • Der MPU kann den analogen Pin nicht direkt auslesen — er ruft Bridge-Funktionen auf, um den Rohwert, Druckpegel oder ein neues Druckereignis zu erhalten
  • Der MPU verfügt über Wi-Fi — mit vollständigem Debian Linux kann er Telegram-Benachrichtigungen im Moment senden, wenn Kraft ausgeübt wird
  • Arduino_RouterBridge ermöglicht die RPC-Kommunikation zwischen den beiden Prozessoren
  • ⚠️ /dev/ttyHS1 (Linux) und Serial1 (MCU) sind RESERVIERT vom Router — öffnen Sie diese niemals in Benutzercode

MCU-Code (Bridge)

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-force-sensor */ #include "Arduino_RouterBridge.h" #define FORCE_SENSOR_PIN A0 // The Arduino UNO Q MCU pin connected to the FSR // Cached values int cached_value = 0; String cached_pressure = "no_pressure"; bool pressure_event = false; bool prev_pressed = false; unsigned long last_read_ms = 0; const unsigned long READ_INTERVAL = 500; String get_value(String arg) { return String(cached_value); } String get_pressure(String arg) { return cached_pressure; } String get_event(String arg) { if (pressure_event) { pressure_event = false; return "pressure_detected"; } return "none"; } String classify(int reading) { if (reading < 40) return "no_pressure"; if (reading < 800) return "light_touch"; if (reading < 2000) return "light_squeeze"; if (reading < 3200) return "medium_squeeze"; return "big_squeeze"; } void setup() { Bridge.begin(); Monitor.begin(); Bridge.provide("get_value", get_value); Bridge.provide("get_pressure", get_pressure); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q Force Sensor Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= READ_INTERVAL) { last_read_ms = now; cached_value = analogRead(FORCE_SENSOR_PIN); cached_pressure = classify(cached_value); bool is_pressed = (cached_value >= 40); if (is_pressed && !prev_pressed) { pressure_event = true; Monitor.print("Pressure detected: "); Monitor.println(cached_pressure); } else if (!is_pressed && prev_pressed) { Monitor.println("Released — no pressure."); } prev_pressed = is_pressed; } }

Python-Code (Bridge)

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-force-sensor */ from arduino.app_utils import * import time def loop(): value = Bridge.call("get_value") pressure = Bridge.call("get_pressure") print(f"Force value: {value} Pressure: {pressure}") time.sleep(1) App.run(user_loop=loop)

Schnelle Schritte

  • Verbinden: Verdrahten Sie den Kraftsensor und Widerstand wie im Schaltplan gezeigt.
  • Arduino App Lab öffnen und eine neue App mit dem Namen ForceSensorBridge erstellen.
  • MCU-Sketch einfügen in sketch/sketch.ino.
  • Python-Code einfügen in die Python-Datei.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
Add sketch library in Arduino App Lab on Arduino UNO Q
  • Search for Arduino_RouterBridge created by Arduino and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
Arduino_RouterBridge Arduino

This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

0.4.1
Install
More Info
  • Hochladen: Klicken Sie auf die Schaltfläche Ausführen.
Click Run button in Arduino App Lab on Arduino UNO Q
  • Drücken Sie auf den Kraftsensor — beobachten Sie das Ereignis und die Druckpegel in beiden Konsolen.

App Lab Konsolenausgabe

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q Force Sensor Bridge ready [2026-04-29 09:00:06] Pressure detected: light_touch [2026-04-29 09:00:08] Released — no pressure. [2026-04-29 09:00:12] Pressure detected: big_squeeze [2026-04-29 09:00:15] Released — no pressure.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Force value: 0 Pressure: no_pressure [2026-04-29 09:00:03] Force value: 0 Pressure: no_pressure [2026-04-29 09:00:06] Force value: 528 Pressure: light_touch [2026-04-29 09:00:08] Force value: 0 Pressure: no_pressure [2026-04-29 09:00:12] Force value: 3684 Pressure: big_squeeze

Telegram

Erhalten Sie Telegram-Benachrichtigungen, wenn Kraft auf den Arduino UNO Q Kraftsensor ausgeübt wird, und fragen Sie Druckpegel aus der Ferne ab.

MCU-Sketch: Behalten Sie denselben MCU-Sketch aus dem vorherigen Bridge-Abschnitt.

Python-Code (Telegram)

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-force-sensor */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): # Auto-alert on pressure detection event = Bridge.call("get_event") if event == "pressure_detected": pressure = Bridge.call("get_pressure") value = Bridge.call("get_value") print(f"Pressure detected: {pressure} value: {value}") send_message(CHAT_ID, f"⚡ Force detected: {pressure} (raw: {value})") # Handle Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q Force Sensor Bot\n" "/value - Read raw ADC value (0-4095)\n" "/pressure - Pressure level classification\n" "Automatic alert when force is applied") elif text == "/value": result = Bridge.call("get_value") send_message(chat_id, f"Force sensor value: {result}") elif text == "/pressure": result = Bridge.call("get_pressure") send_message(chat_id, f"Pressure level: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.5) App.run(user_loop=loop)

Schnelle Schritte

  • Ersetzen Sie YOUR_TELEGRAM_BOT_TOKEN durch Ihr echtes Bot-Token von BotFather.
  • Ersetzen Sie YOUR_CHAT_ID durch Ihre Telegram-Chat-ID.
  • Fügen Sie diesen Python-Code in die Python-Datei Ihrer App ein (behalten Sie denselben MCU-Sketch).
  • Klicken Sie auf die Schaltfläche Ausführen — drücken Sie auf den Kraftsensor, um eine Telegram-Benachrichtigung auszulösen.

App Lab Konsolenausgabe

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:00] Waiting for Telegram messages... [2026-04-29 09:10:05] Pressure detected: light_touch value: 528 [2026-04-29 09:10:10] Received: /value [2026-04-29 09:10:15] Received: /pressure
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
⚡ Force detected: light_touch (raw: 528)
10:15 AM
/value
10:16 AM ✓✓
Force sensor value: 0
10:17 AM
/pressure
10:18 AM ✓✓
Pressure level: no_pressure
10:19 AM
⚡ Force detected: big_squeeze (raw: 3684)
10:20 AM
/pressure
10:21 AM ✓✓
Pressure level: big_squeeze
10:22 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on Arduino Uno Q - OpenClaw Tutorial

Projektideen

Sie können viele nützliche Projekte mit dem Kraftsensor und Arduino UNO Q erstellen:

  • Smart Doorbell: Montieren Sie den FSR unter einer Fußmatte — wenn jemand darauf tritt, sendet der MPU eine Telegram-Benachrichtigung "Jemand ist an der Tür!", wodurch eine unsichtbare druckgesteuerte Türklingel entsteht
  • Trainingsgerät für Griffstärke: Drücken Sie den FSR als Teil eines Griffstärke-Trainingsprogramms — Python verfolgt den Spitzenwert der Druckpegel jede Sitzung und sendet eine Telegram-Zusammenfassung mit Ihrem stärksten Drücken des Tages
  • Paketgewicht-Monitor: Platzieren Sie den FSR unter einem Paket auf einem Regal — wenn das Paket entfernt wird (Druck fällt auf Null), sendet der MPU sofort eine "Paket entfernt"-Telegram-Benachrichtigung
  • Druckzähler: Zählen Sie, wie oft Kraft pro Stunde erkannt wird — protokollieren Sie die Anzahl in einer CSV-Datei und senden Sie einen stündlichen Telegram-Bericht (nützlich für Tastendrücke in Kiosken oder Maschinen)
  • Bettenbeleg-Sensor: Platzieren Sie mehrere FSRs unter einer Matratze — Python empfängt Druckereignisse und sendet eine Telegram-Benachrichtigung, wenn das Bett belegt oder verlassen ist (nützlich für die Überwachung älterer Menschen oder Patienten)

Herausford ere dich selbst

Bereit, weiter mit dem Kraftsensor auf Arduino UNO Q zu gehen? Probieren Sie diese Herausforderungen:

  • Einfach: Fügen Sie einen /peak Telegram-Befehl hinzu: Python verfolgt den höchsten je seit dem Start gelesen Rohwert des ADC und gibt ihn auf Anfrage zurück — nützlich zum Finden der maximal ausgeübten Kraft während des Tests.
  • Mittel: Implementieren Sie einen Tracker für Druckdauer: notieren Sie den Zeitstempel, wenn Druck beginnt (Wert ≥ 40) und wann er endet — senden Sie eine Telegram-Nachricht mit der Dauer jedes Mal, wenn Kraft freigegeben wird.
  • Fortgeschritten: Erstellen Sie einen Tippen-Zähler mit Entprellfilter: erkennen Sie schnelle Druckpressen (Tippen) in Python, indem Sie überprüfen, ob das pressure_detected-Ereignis mehr als einmal innerhalb von 2 Sekunden auftritt — zählen Sie Tippsequenzen und senden Sie eine Telegram-Nachricht wie "3 Tippen erkannt!" für Muster, die Sie definieren.

Verwandte Tutorials

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!