interruptor táctil MOSFET de Arduino

0

Estoy intentando hacer un interruptor táctil utilizando un Arduino y un MOSFET. Me las arreglé para lograr que un LED se encienda cuando se toca el pad y parece que funciona bien (completamente encendido cuando lo toco y apagado cuando no lo hago). Sin embargo, cuando trato de reemplazar el LED por un pin Arduino alto (internamente) me encuentro con problemas. Algunas veces el interruptor se lee tan bajo cuando toco el pad, pero otras veces simplemente deja de responder. ¿Alguien podría ver a dónde me voy mal? Gracias.

    
pregunta user2105725

2 respuestas

1

Su enfoque es deficiente en varios aspectos.

Primero, cuando tocas el pad con el dedo, recibes una gran señal de CA, 50 / 60Hz. Cuando suelte el dedo, la carga de la puerta se puede dejar en cualquier fase, positiva o negativa. Es por eso que tu MCU lee bajo a veces. Más aún, es probable que la enorme amplitud de CA presione la entrada del MOSFET más allá de las especificaciones de voltaje, y se produce algún bloqueo.

Segundo, es muy probable que la ESD destruya su FET.

Para implementar la idea de botones táctiles sin contacto para varios controles en equipos electrónicos y domésticos, la industria electrónica desarrolló una clase especial de dispositivos llamados sensores táctiles. No son dispositivos simples. Varias compañías de semiconductores ofrecen circuitos integrados que proporcionan esta función de manera confiable. En muchos casos, la funcionalidad del sensor táctil se incluye en MCU directamente. Para tener una idea, consulte esta lista en Digi-Key . Esta es una muestra , directamente para su aplicación,

    
respondido por el Ale..chenski
0

En caso de que alguien esté interesado, he creado una solución a mi problema utilizando el código Arduino. Hasta ahora parece funcionar perfectamente. He añadido una resistencia de 5k en serie con la puerta, para reducir la probabilidad de dañar la puerta.

#define input_pin A0
#define led_pin 3

int input_data;
unsigned long timer;
bool setTimer;
bool touched = false;
bool first = true;
bool toggle = true;


void setup() {
  pinMode(input_pin, INPUT_PULLUP);
  pinMode(led_pin, OUTPUT);
  Serial.begin(9600);
}
void loop() {

  digitalWrite(led_pin, toggle);


  if (digitalRead(input_pin) == LOW) {
    touched = true; //set the variable on the first low which is read
    setTimer = true;
  }

  if (touched == true && first == true) { //only allow it to happen once
    first = false;
    toggle = !toggle;
    Serial.println(toggle);
  }

  if (setTimer == true) {
    timer = millis();
    setTimer = false;
  }

  if (millis() - timer > 100) {
    first = true;
    touched = false;
  }
}
    
respondido por el user2105725

Lea otras preguntas en las etiquetas