Sensor fsr como contador

Hola,
Como podria programar un sensor fsr 406 como contador?
El sketch que tengo no me cuenta nada:

#include  <Wire.h>
#include  <LiquidCrystal_I2C.h>
#define fsrpin A0
int fsrreading; 
int CONTADOR=0;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{

  lcd.begin(16, 2);
 
  lcd.clear();
  lcd.print("     ESTORA");
  lcd.setCursor(0,1);
  lcd.print("COMPTA--PERSONES");
  
  delay(5000);
}

void loop(){
  
 
  lcd.clear();
  // Imprimir encabezado
  lcd.print("NUM. DE PERSONES");
  // Realizar la lectura analogica en A0
  fsrreading = analogRead(fsrpin);


  if (fsrreading =0) {
    lcd.clear();
    CONTADOR = CONTADOR +1;

  lcd.setCursor(0,1);
  lcd.print(CONTADOR);
    }
  

}

Adjunta un esquema de como tienes las conexiones, puedes hacerlo a mano y subir una foto del esquema, lo que importa es que se entienda.

El código tiene un error

if (fsrreading =0) {

debería ser

if (fsrreading == 0) {

Cuando postees en un foro se ordenado por favor. Usa el autoformato del IDE para presentar la informacón debidamente identada.

Tienes varios errores en tu código.
El primero es de hardware seguramente.
No se si lo he simulado correctamente creo que no, pero si no es el caso, usa una Resistencia contra VCC de tal manera que cuando la tension caiga a 0 como esperas te de una cuenta

#include  <Wire.h>
#include  <LiquidCrystal_I2C.h>
#define fsrpin A0
int fsrreading;
int contador = 0;
boolean flag = false;
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long previusMillis;

void setup() {
  lcd.begin(16, 2);
  lcd.print("     ESTORA");
  lcd.setCursor(0, 1);
  lcd.print("CUENTA--PERSONAS");

  delay(5000);
  lcd.clear();
}

void loop() {
  char buffer[16];
 
  // Realizar la lectura analogica en A0
  fsrreading = analogRead(fsrpin);

  if (fsrreading <= 50 && flag) {
    lcd.clear();
    contador++;
    lcd.setCursor(0, 0);
    sprintf(buffer, "Pesonas: %3d", contador);
    lcd.print(buffer);
    flag = false;
    previusMillis = millis();
  }
  if (fsrreading >= 800 && !flag) {
      if (millis()-previusMillis > 2000UL){
        // si se mantiene por 2 segundos en 800 o mas entonces 
        // puedo contar de nuevo
          flag = true;
      } 
  }
}

Hola,

Ok, es verdad.
Gracias.

Hola,
Lo siento, justo estoy aprendiendo.
El harward está bién porqué lo probé con otro sketch y funcionaba.
Hay puesta una resistencia de 10kohms.


Entonces primero no compares con 0, el 0 no siempre se alcanza.
Segundo establece un criterio para que cuando llegue a tu valor no cuente como loco.
Yo te hice algo que mas o menos funciona.

Si tienes una R de 10K a masa, y la celda a 5V, nunca vas a leer un valor 0 con el ADC.

Por eso te pedí que adjuntases el esquema, para ver cómo tienes conectada la celda.

Porque no? SI tenes una R muy grande, la tensión de salida se aproxima a 0V, se aproxima no será 0, pero a los fines prácticos si lo es.
Aca el ejemplo

Vout = [R1 / (R1+R2) ]*5V
Si R2 tiende a infinito o sea Mega Ohms, eso dará un cociente que tiende a 0V.

Si, puede ser, aunque mis calculos indican que para 10M para la celda sin presionar y con una R de 10K a masa, la tensión en el divisor será de 5mV.
Considerando el error del LSB, aunque el valor leído será 1, a veces, podría devolver 0.

Considerando que en mi codigo puse <= 50 no es importante creo.
Ademas ambos sabemos que comparar contra 0 es sin calificarlo muy optimista.

Hola Surbyte,
Hemos pobado el sketch con tus correcciones y funciona perfecto para nuestro propósito.
Muchísimas grácias! :top: :top: :top: :top:

Yo me basé en el código del PO, que fue a quien le dije que no podía obtener un valor 0 al aplicar presión.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.