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
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
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
}
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.