RPi-Pico Berührungssensor                  

              

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry            


Aus RPi Pico Schaltungen und Projekte Kap. 22

Der Berührungssensor verwendet den Pin P26 (A0) als RC-Oszillator mit den Pull-Widerständen und der Kapazität des Ports. Der AD-Wandler fragt laufend die Spannung ab und versucht sie zwischen 1/3 und 2/3 der Betriebsspannung zu halten. Bei einer Berührung steigt die Kapazität, und die Eigenschaften des Oszillators ändern sich. Zum Schutz gegen HF-Abstrahlungen liegt ein Widerstand von 1 kΩ in Reihe zum Sensorkontakt. Die analogen Messungen sollen so ausgewertet werden, dass eine Berührung eindeutig erkannt wird. In diesem Fall wird dann der Ausgang P0 eingeschaltet.

//Pico_RC3 Touch
#include "pico/stdlib.h"
#include "hardware/adc.h"

void setup() {
  Serial.begin(115200);
  adc_init();
  adc_gpio_init(26);
  gpio_pull_up(26);
  adc_select_input(0);
  gpio_init(0);
  gpio_set_dir(0, true);
 
int u1, u2, u, u0;
  int n=0;
 
while(true){
    u=0;
    n++;
    for (int n=0; n<100; n++){
      u1=adc_read();
      if (adc_read() > 2730){
        gpio_pull_down(26);
        u+=u1;
     }
     u2=adc_read();
     if (u2 < 1365){
        gpio_pull_up(26);
         u-=u2;
      }
    }
    u/=100;
    Serial.println(u);    
    sleep_ms(50);
    if (n==2) u0=u;
    if (n>3) n=3;
    if (abs(u-u0) > 100) gpio_put(0,1);  else gpio_put(0,0);
 
}
}

void loop() {}

Eine Untersuchung des Oszillatorsignals zeigt, dass Frequenz im Leerlauf ca. 60 kHz beträgt. Das Programm ist zu langsam, um die Spannung in den vorgesehenen Grenzen zu halten. Die Amplitude reicht daher bis  ca. 3,3 V. Die Auswertung erfasst die Spannungsdifferenz zwischen dem oberen S und dem unteren Schaltpunkt im Mittel von 100 Durchläufen. Der Mittelwert liegt z.B. bei 500.

Bei einer Berührung des Sensorkontakts steigt die Kapazität, und die Frequenz sinkt z.B. auf 40 kHz. Wenn die gemittelte Spannungsamplitude sich um mehr als 100 ändert, wird der Schaltvorgang ausgeführt.

Eine zweite Variante des Berührungssensors verwendet einen digitalen Eingang zum Aufbau eines schnellen RC-Generators. Gleichzeitig läuft hier eine Frequenzmessung mit der Auflösung 1 kHz.  Je nach Art des angeschlossenen Kabels oder des Berührungskontakts werden Frequenzen von 600 kHz oder mehr gemessen. Bei einer Berührung sinkt die Frequenz deutlich unter 500 kHz. Der Sensorkontakt liegt an P2 und der Ausgang an P0.

//Pico_RC5   Touch2
#include "pico/stdlib.h"

void setup() {}

void loop() {}

void setup1() {
  gpio_init(0);
  gpio_set_dir(0, true);
  gpio_init(2);
  while (true) {
    uint32_t f = 0;
    uint32_t t = time_us_32() + 1000;
    while (t>time_us_32()){
      while (gpio_get(2)==1);
        gpio_pull_up(2);
        f++;
      while (gpio_get(2)==0);
        gpio_pull_down(2);
    }
    if (f < 500) gpio_put(0,1);
    else gpio_put(0,0);
    Serial.print(f);    
    Serial.println(" kHz   ");
    sleep_ms(100);
  }

void loop1() {}

Zu Kontrollzwecken wird die gemessene Frequenz ausgegeben. Im Beispiel wurde eine Alufolie als Sensorkontakt angeschlossen. Bei einer direkten Berührung sank die Frequenz unter 400 kHz. Je nach Sensorfläche und eingestellter Frequenzschwelle eignet sich das Programm auch für einen kapazitiven Näherungssensor ohne direkte Berührung. Es reicht dann, die Hand auf etwa 2 cm anzunähern. Auch eine isolierende Fläche zwischen Sensor und Hand kann verwendet werden.

 


Elektronik-Labor  Projekte  Mikrocontroller  Raspberry