Saludos. Queria saber si me pueden ayudar adpatando un codigo, puesto que aun no se programar por mi mismo.
Estoy recien comenzando a experimentar con arduino y estoy preparando una presentacion para dentro de un mes donde voy a mostrar algunos sensores de temperatura, humedad y de viento conectados a una placa arduino enviando datos desde un mini tunel de viento. Los sensores de viento que quiero usar son estos: Wind Sensor Rev. P - Low Cost Anemometer | Modern Device
La placa arduino que voy a usar es una Arduino Mega 2560
La pagina provee un codigo para operar el sensor. Mi intencion es hacer correr cuatro sensores de viento en paralelo, para colocarlos en diferentes lugares del tunel de viento (los sensores estaran conectados con cables de extension a la placa de prueba). Mi problema es que no se como adaptar el codigo para trabajar con cuatro sensores a la vez en lugar de uno.
Este es el codigo:
/* A demo sketch for the Modern Device Rev P Wind Sensor
* Requires a Wind Sensor Rev P from Modern Device
* http://moderndevice.com/product/wind-sensor-rev-p/
*
* The Rev P requires at least at least an 8 volt supply. The easiest way to power it
* if you are using an Arduino is to use a 9 volt or higher supply on the external power jack
* and power the sensor from Vin.
*
* Hardware hookup
* Sensor Arduino Pin
* Ground Ground
* +10-12V Vin
* Out A0
* TMP A2
*
* Paul Badger 2014
* code in the public domain
*/
const int OutPin = A0; // wind sensor analog pin hooked up to Wind P sensor "OUT" pin
const int TempPin = A2; // temp sesnsor analog pin hooked up to Wind P sensor "TMP" pin
void setup() {
Serial.begin(9600);
}
void loop() {
// read wind
int windADunits = analogRead(OutPin);
// Serial.print("RW "); // print raw A/D for debug
// Serial.print(windADunits);
// Serial.print("\t");
// wind formula derived from a wind tunnel data, annemometer and some fancy Excel regressions
// this scalin doesn't have any temperature correction in it yet
float windMPH = pow((((float)windADunits - 264.0) / 85.6814), 3.36814);
Serial.print(windMPH);
Serial.print(" MPH\t");
// temp routine and print raw and temp C
int tempRawAD = analogRead(TempPin);
// Serial.print("RT "); // print raw A/D for debug
// Serial.print(tempRawAD);
// Serial.print("\t");
// convert to volts then use formula from datatsheet
// Vout = ( TempC * .0195 ) + .400
// tempC = (Vout - V0c) / TC see the MCP9701 datasheet for V0c and TC
float tempC = ((((float)tempRawAD * 5.0) / 1024.0) - 0.400) / .0195;
Serial.print(tempC);
Serial.println(" C");
delay(750);
}
Estare muy agradecido por cualquier ayuda que puedan darme.
Saludos
Por favor se preciso. 4 sensores de viento ya esta claro. Cuantos de temperatura y que mas, porque luego agregan y agregan cosas y el programa o la ayuda no termina mas.
No me malentiendas. Yo respondo muchos mensajes como este.. que empiezan por el problema real y luego suman y suman cosas.
Ahora te respondo con 4 sensores de viento.
y luego edito y lo posteo aca
Bueno te he puesto los 4 sensores desde A0 hasta A3 y el de temperatura en A4.
/* A demo sketch for the Modern Device Rev P Wind Sensor
* Requires a Wind Sensor Rev P from Modern Device
* http://moderndevice.com/product/wind-sensor-rev-p/
*
* The Rev P requires at least at least an 8 volt supply. The easiest way to power it
* if you are using an Arduino is to use a 9 volt or higher supply on the external power jack
* and power the sensor from Vin.
*
* Hardware hookup
* Sensor Arduino Pin
* Ground Ground
* +10-12V Vin
* Out A0
* TMP A2
*
* Paul Badger 2014
* code in the public domain
*/
const byte OutPin[] = {A0, A1, A2, A3}; // wind sensor analog pin hooked up to Wind P sensor "OUT" pin
const byte TempPin[] = A4; // temp sesnsor analog pin hooked up to Wind P sensor "TMP" pin
void setup() {
Serial.begin(9600);
}
void loop() {
// wind formula derived from a wind tunnel data, annemometer and some fancy Excel regressions
// this scalin doesn't have any temperature correction in it yet
// Leo comenzando en A0 hasta A3 y los presento
for (int i=0; i<4; i++){
int windADunits = analogRead(OutPin[i]);
float windMPH = pow((((float)windADunits - 264.0) / 85.6814), 3.36814);
Serial.print(windMPH);
Serial.print(" MPH\t");
}
// temp routine and print raw and temp C
int tempRawAD = analogRead(TempPin);
// Serial.print("RT "); // print raw A/D for debug
// Serial.print(tempRawAD);
// Serial.print("\t");
// convert to volts then use formula from datatsheet
// Vout = ( TempC * .0195 ) + .400
// tempC = (Vout - V0c) / TC see the MCP9701 datasheet for V0c and TC
float tempC = ((((float)tempRawAD * 5.0) / 1024.0) - 0.400) / .0195;
Serial.print(tempC);
Serial.println(" C");
delay(750);
}
Gracias por tu ayuda surbyte. Realmente lo aprecio. Me disculpo por lo confuso de mi consulta, pero es mi primera vez trabajando con arduino y no estoy habituado a las normas ni al lenguaje. Nunca pense que podia trabajar con sensores de viento y otros sensores en el mismo codigo. Pero creo que no me explique bien y se produjo una confusion. Para los sensores de temperatura y humedad estaba trabajando con sensores RHT03 funcionando con su propio codigo en un experimento previo. Ahora queria probar un grupo de sensores de viento en un nuevo experimento (sin los RHT03). El codigo que adjunte esta creado para funcionar con este tipo de sensor que son nuevos en el mercado Wind Sensor Rev. P - Low Cost Anemometer | Modern Device
Ahora, si te fijas estos sensores entregan dos senales analogas cada uno: uno que refiere a la velocidad del viento = Out (en millas por hora) y otro que refiere a temperatura =TMP, pues este sensor tiene incorporado un modulo que mide la temperatura. Asi, casa sensor entrega dos senales. Si son cuatro sensores seran 8 senales y no cinco como esta en el codigo que has editado. O estoy equivocado?
PD:
Me parece interesante eso de trabajar con los sensores RHT03 en el mismo codigo (aunque los sensores de viento entregan temperatura), asi no necesitaria repetir el experimento desconectando todo y cambiando sensores. Pero no se si pedir eso hace mas confusa y complicada mi consulta.
En todo caso los sensores RHT03 con los que he trabajado usan este otro codigo:
//
// FILE: dht_test.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.07
// PURPOSE: DHT Temperature & Humidity Sensor library for Arduino
// URL: http://arduino.cc/playground/Main/DHTLib
//
// Released to the public domain
//
#include <Wire.h>
#include <dht.h>
dht DHT;
#define DHT22_PIN1 5
#define DHT22_PIN2 6
#define DHT22_PIN3 7
#define DHT22_PIN4 8
int pin = 5; //set lowest pin number of the sequential set of pins
float DH0 = 0, DH1 = 0, DH2 = 0, DH3 = 0;
float DH[] = {
DH0, DH1, DH2, DH3};
float DT0 = 0, DT1 = 0, DT2 = 0, DT3 = 0;
float DT[] = {
DT0, DT1, DT2, DT3};
long time = 0;
int del = 200;
int del2 = 250;
int del3 = 250;
int del4 = 250;
void setup(){
Serial.begin(9600);
Serial.println("DHT TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}
void loop()
{
for (int i = 0; i < 4; i++){
// read Humidity and Temperature
DHT.read22(i+pin);
DH[i] = DHT.humidity;
DT[i] = DHT.temperature;
delay (del);
}
for (int i = 0; i < 4; i++){
Serial.print(DH[i]);
Serial.print("\t");
Serial.print(DT[i]);
Serial.print("\t");
}
Serial.print("\n");
delay (del2);
}
tuve que chequear cuantas entradas analogicas tiene el MEGA (16) de modo que tienes
4 para viento
4 para temperatura
Lo único que no me gusta es que hay mucho cálculo para obtener los resultados de velocidad de viento y temperatura. Pero no veo manera de simplificarlo. La única forma sería hacer los 1024 cálculos y crear una tabla indexada por el valor del ad y se obtiene la velocidad del viento.
Se podria guardar en la memoria FLASH.
Acá sumé los sensores de temperatura ubicados en A4..A7.
falt que sumes los DTH
/* A demo sketch for the Modern Device Rev P Wind Sensor
* Requires a Wind Sensor Rev P from Modern Device
* http://moderndevice.com/product/wind-sensor-rev-p/
*
* The Rev P requires at least at least an 8 volt supply. The easiest way to power it
* if you are using an Arduino is to use a 9 volt or higher supply on the external power jack
* and power the sensor from Vin.
*
* Hardware hookup
* Sensor Arduino Pin
* Ground Ground
* +10-12V Vin
* Out A0
* TMP A2
*
* Paul Badger 2014
* code in the public domain
*/
const int OutPin[4] = {A0, A1, A2, A3}; // wind sensor analog pin hooked up to Wind P sensor "OUT" pin
const int TempPin[4] = {A4, a5, A6, A7}; // temp sesnsor analog pin hooked up to Wind P sensor "TMP" pin
void setup() {
Serial.begin(9600);
}
void loop() {
// wind formula derived from a wind tunnel data, annemometer and some fancy Excel regressions
// this scalin doesn't have any temperature correction in it yet
// Leo comenzando en A0 hasta A3 y los presento
for (int i=0; i<4; i++){
int windADunits = analogRead(OutPin[i]);
float windMPH = pow((((float)windADunits - 264.0) / 85.6814), 3.36814);
Serial.print(windMPH);
Serial.print(" MPH\t");
// temp routine and print raw and temp C
int tempRawAD = analogRead(TempPin[i]);
// Serial.print("RT "); // print raw A/D for debug
// Serial.print(tempRawAD);
// Serial.print("\t");
// convert to volts then use formula from datatsheet
// Vout = ( TempC * .0195 ) + .400
// tempC = (Vout - V0c) / TC see the MCP9701 datasheet for V0c and TC
float tempC = ((((float)tempRawAD * 5.0) / 1024.0) - 0.400) / .0195;
Serial.print(tempC);
Serial.println(" C");
}
delay(750);
}
Gracias surbyte, te agradezco mucho que te tomaras la molestia de editar este codigo. voy a probar el codigo una vez termine de preparar los cables de los sensores.
Saludos y gracias.
Te falta agregar los RHT03 pero es facil, vas con cuidado sumando lo que necesites.
Un consejo, cuidado con el uso de delay en los programas. Recuerda que delay detiene la ejecución del programa.
Si quieres mantener un programa actualizado no uses delay, mira el ejemplo BlinkWithoutDelay que usa millis()