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.