Conectar 5 sensores de presion

Hola a tod@s:

Soy muy nuevo en Arduino y tengo en mente un proyecto de 5 sensores de presion como estos https://es.aliexpress.com/item/1005003498132047.html y arduino uno mi duda es la siguiente al ejecutar el codigo solo se toma la señal de un sensor y la replica con arduino uno di de prodian usar esa cantidad de sensores o yo estoy cometiendo un error en el codigo muchas gracias espero me puedan ayudar

Si, estas cometiendo un error en el código, mas exactamente en la línea 23.
Saludos

Pd: después me avisas si adivine correctamente.

hola muchas gracias por el comentario te puedo comparti mi codigo lo he realizado con lo poco que he ido recopilando de informacion pero creo si tiene varios errores ya que es la primera vez que hago un codigo.


#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

//This the variables that control system pressure 
int frontMin = 1;
int frontMax = 1.5;
const int pressureInput = A0; //select the analog input pin for the pressure transducer
const int pressureZero = 562; //analog reading of pressure transducer at 0psi
const int pressureMax = 921.6; //analog reading of pressure transducer at 100psi
const int pressuretransducermaxPSI = 100; //psi value of transducer being used
const int baudRate = 9600; //constant integer to set the baud rate for serial monitor
const int sensorreadDelay = 250; //constant integer to set the sensor read delay in milliseconds

float pressureValue = 0; //variable to store the value coming from the pressure transducer
float pressureValuePsi = 0;

//This the variables that control system pressure 
int frontMin1 = 1;
int frontMax1 = 1.5;
const int pressureInput1 = A1; //select the analog input pin for the pressure transducer
const int pressureZero1 = 562; //analog reading of pressure transducer at 0psi
const int pressureMax1 = 921.6; //analog reading of pressure transducer at 100psi
const int pressuretransducermaxPSI1 = 100; //psi value of transducer being used
const int baudRate1 = 9600; //constant integer to set the baud rate for serial monitor
const int sensorreadDelay1 = 250; //constant integer to set the sensor read delay in milliseconds

float pressureValue1 = 0; //variable to store the value coming from the pressure transducer
float pressureValuePsi1 = 0;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16,2);

}

void loop() {
  // put your main code here, to run repeatedly:
  pressureValue = analogRead(pressureInput); //reads value from input pin and assigns to variable
  pressureValuePsi = ((pressureValue-pressureZero)*pressuretransducermaxPSI)/(pressureMax-pressureZero); //conversion equation to convert analog reading to psi
  Serial.print(pressureValue, 1); //prints value from previous line to serial
  Serial.println("psi"); //prints label to serial
  lcd.setCursor(0,0); //sets cursor to column 0, row 0
  lcd.print("Pressure:"); //prints label
  lcd.print(pressureValuePsi, 1); //prints pressure value to lcd screen, 1 digit on float
  lcd.print("psi"); //prints label after value
  lcd.print("   "); //to clear the display after large values or negatives
  delay(sensorreadDelay); //delay in milliseconds between read values

  pressureValue1 = analogRead(pressureInput1); //reads value from input pin and assigns to variable
  pressureValuePsi1 = ((pressureValue-pressureZero)*pressuretransducermaxPSI)/(pressureMax-pressureZero); //conversion equation to convert analog reading to psi
  Serial.print(pressureValue1, 1); //prints value from previous line to serial
  Serial.println("psi"); //prints label to serial
  lcd.setCursor(1,1); //sets cursor to column 0, row 0
  lcd.print("Pressure:"); //prints label
  lcd.print(pressureValuePsi1, 1); //prints pressure value to lcd screen, 1 digit on float
  lcd.print("psi"); //prints label after value
  lcd.print("   "); //to clear the display after large values or negatives
  delay(sensorreadDelay1); //delay in milliseconds between read values

En el arduino uno tienes suficientes entradas analógicas para conectar 5 sensores ¿Cuál es tu pregunta/duda?

Hola @michcooper90 lo que publicaste es un código copiado y pasteado, porque no creo que comentes en inglés.

Tienes esto

const int pressureInput = A0; // <== primer SENSOR
const int pressureZero = 562; //analog reading of pressure transducer at 0psi
const int pressureMax = 921.6; //analog reading of pressure transducer at 100psi
const int pressuretransducermaxPSI = 100; //psi value of transducer being used
const int baudRate = 9600; //constant integer to set the baud rate for serial monitor
const int sensorreadDelay = 250; //constant integer to set the sensor read delay in milliseconds

float pressureValue = 0; //variable to store the value coming from the pressure transducer
float pressureValuePsi = 0;

//This the variables that control system pressure 
int frontMin1 = 1;
int frontMax1 = 1.5;
const int pressureInput1 = A1; // <== segundo SENSOR
const int pressureZero1 = 562; //analog reading of pressure transducer at 0psi
const int pressureMax1 = 921.6; //analog reading of pressure transducer at 100psi
const int pressuretransducermaxPSI1 = 100; //psi value of transducer being used
const int baudRate1 = 9600; //constant integer to set the baud rate for serial monitor
const int sensorreadDelay1 = 250; //constant integer to set the sensor read delay in milliseconds

Repite el criterio para los otros 3 y solo debes cambiar el pin de arduino que corresponde.

Esto es un error o no tiene sentido

// para el primer sensor
const int baudRate = 9600; //constant integer to set the baud rate for serial monitor
// para el segundo sensor
const int baudRate1 = 9600; //constant integer to set the baud rate for serial monitor

Esto no tiene razón de ser.
Solo necesitas uno para ver los datos en el monitor serie y tampoco lo usas porque esta pensado para visualizar datos en el LCD:
Bueno te vas a volver medio loco para ver 5 sensores en un LCD pero con paciencia puedes organizar todo para que se lean.

Muchas gracias por la ayuda ya tengo lectura de todos los sensores amigo solo tengo una nueva duda como le puedo quitar los decimales.

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // libreria para que funcione el display 20X4

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Establece la dirección I2C del LCD

int SENSOR;    // variable almacena valor leido de entrada analogica A0
int SENSOR1;   // variable almacena valor leido de entrada analogica A1
int SENSOR2;   // variable almacena valor leido de entrada analogica A2
int SENSOR3;   // variable almacena valor leido de entrada analogica A3

float PRESION;  // valor de presion en en decimales
float SUMA;   // valor de la suma de las 5 lecturas de presion

void setup() {                                
   // coloca tu código de configuración aquí, para ejecutarlo una vez:
Serial.begin(9600);
lcd.begin(16,2);
 }

void loop() {

  SUMA = 0;         // valor inicial de SUMA en cero
  for (int i=0; i < 5; i++){      // bucle que repite 5 veces
  SENSOR = analogRead(A0);      // lectura de entrada analogica A0
  PRESION = map(SENSOR, 102, 921, 0, 300);            // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A0)
  SUMA = PRESION + SUMA;      // suma de cada lectura de presion
  delay(100);         // demora de medio seg. entre lecturas
  }
  lcd.setCursor(10,0);         // cursor en primer fila y primer columna
  lcd.print("FR");             // escribe valor delantero
  lcd.setCursor(10,1);         // cursor en primer fila y primer columna  
  lcd.print("RR");             // escribe valor trasero
  lcd.setCursor(5, 0);         // cursor en primer fila y primer columna
  lcd.print(SUMA/5.0, 1);      // escribe valor promedio de 5 lecturas con un decimal
 
  SUMA = 0;         // valor inicial de SUMA en cero
  for (int i=0; i < 5; i++){      // bucle que repite 5 veces
  SENSOR1 = analogRead(A1);       // lectura de entrada analogica A0
  PRESION = map(SENSOR1, 102, 921, 0, 300);                           // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A1)
  SUMA = PRESION + SUMA;      // suma de cada lectura de presion
  delay(100);         // demora de medio seg. entre lecturas
  }
  lcd.setCursor(12, 0);        // cursor en primer fila y primer columna
  lcd.print(SUMA/5.0, 1);      // escribe valor promedio de 5 lecturas con un decimal
   
  SUMA = 0;         // valor inicial de SUMA en cero
  for (int i=0; i < 5; i++){      // bucle que repite 5 veces
  SENSOR3 = analogRead(A3);       // lectura de entrada analogica A3
  PRESION = map(SENSOR3, 102, 921, 0, 300);             // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A3)
  SUMA = PRESION + SUMA;      // suma de cada lectura de presion
  delay(100);         // demora de medio seg. entre lecturas
  }
  lcd.setCursor(12, 1);        // cursor en primer fila y primer columna
  lcd.print(SUMA/5.0, 1);      // escribe valor promedio de 5 lecturas con un decimal
 
  SUMA = 0;         // valor inicial de SUMA en cero
  for (int i=0; i < 5; i++){      // bucle que repite 5 veces
  SENSOR2 = analogRead(A2);       // lectura de entrada analogica A2
  PRESION = map(SENSOR2, 102, 921, 0, 300);            // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A2)
  SUMA = PRESION + SUMA;      // suma de cada lectura de presion
  delay(100);         // demora de medio seg. entre lecturas
  }
  lcd.setCursor(5, 1);        // cursor en primer fila y primer columna
  lcd.print(SUMA/5.0, 1);     // escribe valor promedio de 5 lecturas con un decimal

}

Reemplázalo con lcd.print((int) (SUMA/5.0), 1);`

Bueno yo te he hecho una versión mas simple de todo
Aca lo puedes simular, de paso úsalo si no lo conocías.

#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x27
#define LCD_COLUMNS 20
#define LCD_LINES   4
const int sensorPin[4]  = {A0, A1, A2, A3};  // Pines a los que esta asociado cada sensor
const int pos[4]        = {5, 13, 5, 13};   // posiciones para presentar los sensores en el LCD
int suma[4];
int sensor[4];
float presion[4];  // valor de presion en en decimales
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

void setup() {
  // Init
  lcd.init();
  lcd.backlight();
  // Print something
  lcd.setCursor(0, 0);
  lcd.print("Sensores Presion");
  Serial.begin(9600);
  Serial.println("Iniciamos.");
}

void loop() {
  int adc;

  for (int i = 0; i < 4; i++) {   // bucle que repite 5 veces
    suma[i] = 0;
    Serial.print("sensor[" + String(i) + "] = ");
    for (int j = 0; j < 5; j++) {   // bucle que repite 5 veces
      adc = map(analogRead(sensorPin[i]), 102, 921, 0, 300);  // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A0)
      Serial.print(String(adc) + " ");
      suma[i] += adc;                          // suma de cada lectura de presion
      delay(100);                                   // demora de medio seg. entre lecturas
    }
    presion[i] = suma[i] / 5.0;
    Serial.println(" ");
  }



  for (int i = 0; i < 4; i++) {   // bucle que repite 5 veces
    if (i % 2 == 0) {
      lcd.setCursor(10,2);         // cursor en primer fila y primer columna
      lcd.print("FR");             // escribe valor delantero
      lcd.setCursor(pos[i], i/2+2);         // cursor en primer fila y primer columna
      lcd.print(presion[i], 0);    // escribe valor promedio de 5 lecturas con un decimal
    } else {
      lcd.setCursor(10,3);         // cursor en primer fila y primer columna  
      lcd.print("RR");             // escribe valor trasero
      lcd.setCursor(pos[i], i/2+2);        // cursor en primer fila y primer columna
      lcd.print(presion[i], 0);    // escribe valor promedio de 5 lecturas con un decimal
    }
  }
}

Respecto del decimal si no quieres decimales le pones 0 y si quieres 1 le indicas con ese número entero su cantidad.
Como lo que muestras son enteros yo lo dejé asi, con 0.

Moderador
Movido a Software.
No reúne condiciones para sección Proyectos.

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