Zum Inhalt springen
Home » Home » Projekte » Neuer Sensor als Endschalter-Alternative

Neuer Sensor als Endschalter-Alternative

Ich hatte die Möglichkeit, folgenden Sensor zu testen: kapazitiver Differenz Sensor W01. Der Sensor besitzt zwei gegenüberliegende Messelektroden (A und B) welche für die Erkennung einer kapazitiven Änderung zuständig sind. Zu jeder Messelektrode existiert ein entsprechender Ausgang. Durch diesen speziellen Aufbau ist der Sensor theoretisch unempfindlicher gegenüber Temperaturänderungen und anderen äußeren Einflüssen. Da beide Messelektroden von diesen Einflüssen gleichermaßen beeinflusst werden, ändert sich nichts an der Differenz der beiden Kapazitäten.

Funktionsprinzip

Der kapazitive Differenz-Sensor (analog – nicht linear) erfasst berührungslos Objekte, die sich in seinem Erfassungsbereich befinden. Sobald das Objekt hier eintritt, verändert sich die Kapazität zu der entsprechenden Messelektrode und somit die Ausgangsspannung des entsprechenden Ausgangs. Damit lässt sich etwa der Abstand des Objekts zur Messelektrode bestimmen. Bei gleicher Kapazität zwischen den beiden Messelektroden (A, B) und Masse beträgt die Ausgangsspannung an den jeweiligen Ausgängen 2,5 V. Die Differenz der beiden Spannungen beträgt somit 0 V (Ruhezustand). Bei Änderung der Kapazität einer der Messelektroden (A oder B) erhöht sich die Ausgangsspannung des entsprechenden Ausgangs, während sich der Ausgang der anderen Messelektrode im gleichen Maße verringert (Differenz Beispiel). Die Ausgangsspannungen können somit jeweils einen Wert zwischen 0 V und 5 V annehmen. [Datenblatt]

Nutzung als Endschalter für einen Diodenlaser

Da der Sensor auf beiden Seiten Objekte im Erfassungsbereich feststellen kann, kam mir die Idee, ihn als Endschalter für meine Diodenlaser einzusetzen. Normalerweise werden hier zwei mechanische Schalter an beiden Enden eingesetzt. Mit diesem Sensor ist es möglich, nur einen Sensor zu nutzen. Und zwar mit folgendem Aufbau in der Machbarkeitsstudie:

Der Sensor wird auf dem beweglichen Schlitten des Laserkopfs montiert. Links und rechts werden entsprechende Platten montiert, um den Sensor auszulösen. [Prototypischer Aufbau]

Beschaltung des Sensors

Damit der Sensor wie ein typischer Endschalter funktioniert, benötigen wir keine analoge Ausgangsspannung, sondern ein Trigger-Signal, das binär anzeigt, ob ein Hindernis erkannt wurde. Um das umzusetzen, habe ich prototypisch einen Arduino Nano verwendet, ein Attiny85 würde hier aber auch völlig ausreichen. Die Schaltung ist sehr einfach, das Laser-Mainboard hat einen Steckplatz mit drei Pins. VCC und GND versorgen die Schaltung und Leitung S wird bei aktivem Schalter auf Masse gezogen. Damit erkennt der Laser einen gedrückten Endschalter. An den Nano wird der Sensor W01 angeschlossen, sowohl die Spannungsversorgung als auch die beiden kapazitiven Ausgänge, die mit analogen Eingängen des Nano verbunden werden. Die 5V des Laser-Boards reichen aus, den Sensor zu versorgen, er kann laut Hersteller auch mit 5V betrieben werden, anstatt der 6V, die im Datenblatt genannt werden.

Code

Der Code ist für diese Studie sehr einfach gehalten. Grundsätzlich wäre interessant, den Schwellwert digital oder über ein Poti einstellbar zu machen, so dass man den Abstand im Betrieb einstellen kann. Zusätzlich sollte noch Logik implementiert werden, um Rauschen und Prellen des Ausgangs zu vermeiden. Das alles wurde hier vernachlässigt.

//Variables
const int analogInPinOne = 4;  
const int analogInPinTwo = 5; 
const int outputPin = 5;

int sensorValueOne = 0; 
int sensorValueTwo = 0; 
double outputValueOne = 0; 
double outputValueTwo = 0;
const double voltage = (double)5 / (double)1023;
double voltageDiff = 0;
const double threshold = 0.10;

//Setup
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(outputPin, OUTPUT);
}

void loop() {
  // read sensor 1
  sensorValueOne = analogRead(analogInPinOne);
  //delay(10);
  
  // read sensor 2
  sensorValueTwo = analogRead(analogInPinTwo);
  //delay(10);
  
  // calculate voltages and difference
  outputValueOne = voltage * sensorValueOne;
  outputValueTwo = voltage * sensorValueTwo;
  voltageDiff = outputValueOne - outputValueTwo;

  //check if difference inside threshold (nothing there)
  if (voltageDiff<threshold&&voltageDiff>-threshold){
    //turn off LED and disable laser limit switch
    digitalWrite(LED_BUILTIN, LOW);
    digitalWrite(outputPin, HIGH);
  }
  else{
    // if values outside threshold (obstacle detected): turn on led, activate laser limit switch
    digitalWrite(LED_BUILTIN, HIGH);
    digitalWrite(outputPin, LOW);
  }
  
  delay(50);
}

Tests

In den folgenden Videos sieht man den Schalter im Betrieb. Er funktioniert auf Anhieb gut, wobei es aber auch Situationen mit einem prellenden Effekt kam, die den Laser-Kontroller stören. Homing hat funktioniert sowie auslösen der Hard-Limits auf der anderen Seite als Begrenzung des Arbeitsbereichs.

Noch ein Bild des Tests-Aufbaus mit Arduino fliegend verdrahtet an der Seite.

Fazit

Der Sensor eignet sich grundsätzlich gut für ähnliche Einsatzzwecke. Er wurde in diesem Fall möglicherweise etwas zweckentfremdet, was aber trotzdem reibungslos funktioniert hat. Insgesamt muss man den Aufbau natürlich noch verbessern und die Verarbeitung der Sensordaten stark verbessern, um z. B. robuster gegen Störungen zu sein. Allerdings würde sich ein solcher Sensor unter anderem sogar dazu eignen, gerade bei Störungen auszulösen, beispielsweise, wenn ein Mensch in den Arbeitsbereich greift. In diesem Fall wäre ein Auslösen sogar günstig. Ein weiterer Anwendungsfall wäre ein Z-Abstandssensor zur Erkennung eines Werkstücks und zusätzlich sogar zur Erkennung, ob das Werkstück rechtwinklig zum Laserkopf ausgerichtet ist.

Ich bedanke mich noch einmal für die Möglichkeit, den Sensor zu testen und werde in Zukunft vielleicht noch die eine oder andere Spielerei damit ausprobieren. Weitere Videos zu dem Sensor befinden sich hier: YouTube-Kanal und hier: Instructables-Projekt.