Go Down

Topic: Monitoreo Cultivo Bacteriano (Read 262 times) previous topic - next topic

PP86lp

Hola gente, estuve mirando mucho este foro, y me gustaría compartir a medida que valla avanzando un proyecto en el que estoy trabajando para sacar adelante el sensado de determinadas variables en un sistema de cultivo bacteriano.
De momento encargue los siguientes para esta primera etapa.

Arduino Mega 2560 R3
Modulo Sensor De Intensidad De Luz Con Bh1750 Arduino Arm
Sensor Humedad Relativa Y Temperatura Dht22 Arduino
Mg-811 Mg 811 Mg811 Sensor Co2 Gases Arduino Avr Pic
Sensor Digital Temperatura Ds18b20 Cable Sumergible Arduino
Medidor De Ph Digital Sensor Remoto Waterproof Pehachimetro
Termómetro Digital Con Sensor Externo De 1 Metro Heladera

Apenas me lleguen empezare a trabajar y les iré comentando los avances =).

surbyte

seria interesante que mas allá de no tener aún los elementos expliques los objetivos del Proyecto.
Que vas a medir, como, porque elegiste estos sensores, etc, etc.
Como vas a presentar la información, o la grabarás en una SD para analisis posterior?

PP86lp

#2
Apr 13, 2015, 07:26 pm Last Edit: Apr 13, 2015, 07:31 pm by PP86lp
Hola de Nuevo,
Antes de explicar el uso, prometo explicarlo bien en breve, todavía estoy terminando de definir algunas cosas, voy a proseguir a acomodar mi Post, un poco para ir acorde al estilo del foro ;).
Les paso los enlaces que corresponden a los sensores mencionados anteriormente.

--Sensor de Intensidad de Luz:

--Sensor Humedad Relativa Y Temperatura Dht22 Arduino :

--Mg811 Sensor Co2 Gases Arduino Avr Pic.

--Sensor Digital Temperatura Ds18b20 Cable Sumergible Arduino


Medidor De Ph Digital Sensor Remoto Waterproof Pehachimetro
Termómetro Digital Con Sensor Externo De 1 Metro Heladera
Estos ultimos dos como comente antes no son sensores, ya que vienen con la pantalla incorporada, pero quizas a futuro intente un bypass. Pero es una idea sin ningun fundamento ni conocimiento sobre el tema.

Si bien de alguna manera dirijo este proyecto, espero seguir teniendo la suerte de no ser el unico involucrado, seguramente participen en este hilo, colegas mios que me estan dando una mano, y que estan mas capacitados que yo en temas mas relacionados con la automatización.

PP86lp

Avances 14/4/15.
Ayer fui a buscar los sensores , de los encargados me llegaron 2, el de humedad y temperatura, y el sensor de CO2. Respecto a este último, me vino solo en sensor, pero no el modulo...
La idea con el sensor de CO2, es medir la concentración del gas antes y despues, Y ver asi las fluctuaciones durante ya que esa información me permite obtener otros parámetros biológicos.
Estos días voy a tratar de conseguir el modulo o sino ver la posibilidad de fabricarlo. En breve mas novedades.

PP86lp

Siguiendo el tema del MG811 Encontre un esquema que parece ser apropiado para el sensor, sigo sin entender mucho, pero sigo acopiando material aquí :).

PP86lp

Mas Novedades 14/04.
En la semana entrante y la próxima llegan los sensores restantes, y el modulo del sensor de CO2(Lo Consegui :) ), junto a otros sensores y placas que encargue relacionadas a un Kit de Arduino para principiantes de la marca SaintSmart, el último contiene:

1 x MEGA 2560
1 x Prototype Shield V3
1 x Mini Breadboard
65x Jump Wires

Por ultimo ademas del Modulo de CO2, y el kit, me compre una joyita mas, ideal para la 2da parte de este proyecto que es el control. Esto último es el SainSmart iMatic 16 Channels Relay I/O Remote Control Controller Module, RJ45 Interface, Compatible with Arduino, Android iOS Device Control Under WiFi Connected Network (Controller Module + 16-CH Relay)

Prometo en breve subir enlaces y material de cada una de las partes a medida que valla activando.


Me gustaria saber igualmente si alguno de los que anda por aquí ha usado o tenido experiencias con algunas de las partes que he mencionado hasta ahora.

PP86lp

#6
Apr 15, 2015, 07:32 pm Last Edit: Apr 16, 2015, 02:55 am by PP86lp
Actualización 15/4/2015
Parte A.1 del proyecto.


Medición de Temperatura en Agua.


Sensor: Sensor Digital Temperatura Ds18b20 Cable Sumergible

Bueno todavía no tengo el sensor, calculo que entre hoy y mañana lo retiraré. Pero la idea es la siguiente, tener una lectura del sensor cada 15 minutos, que la lectura consista en un promedio de 5 lecturas, y que los datos se guarden en un archivo.

Apenas empiece a avanzar en esta parte, iré publicando las novedades.

Leyendo un poco mas encontré el siguiente tutorial basico, Ideal para los que empezamos a trabajar por primera vez con este sensor:

surbyte

COnsejo. Borra de tu programación la palabra delay()
mira BlinkWithoutDelay que usa millis(), juega con ella y todo tu programa lo haces usandola.

PP86lp

#8
Apr 16, 2015, 03:47 am Last Edit: Apr 16, 2015, 03:47 am by PP86lp
Ultimas novedades del día 15/4. Estuve mirando varios códigos y encontré el siguiente que me parecio apropiado para empezar. Si bien yo voy a tener un solo sensor, fue el que mas se acerca a lo que quiero dentro de los que ví.

Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>                 
#include <SD.h>

File myFile;
char filename[] = "Testfile.CSV";

#define ONE_WIRE_BUS_PIN 2
OneWire oneWire(ONE_WIRE_BUS_PIN);
DallasTemperature sensors(&oneWire);

const int chipSelect = 4;

float tempC, Temp01, Temp02, Temp03, Temp04, Temp05, Temp06, Temp07, Temp08, Temp09, Temp10;

DeviceAddress Probe01 = { 0x28, 0x27, 0x26, 0x51, 0x05, 0x00, 0x00, 0x2B };
DeviceAddress Probe02 = { 0x28, 0x1A, 0x9B, 0x40, 0x05, 0x00, 0x00, 0x98 };
DeviceAddress Probe03 = { 0x28, 0x06, 0x2A, 0x41, 0x05, 0x00, 0x00, 0xB3 };
DeviceAddress Probe04 = { 0x28, 0xDB, 0xD9, 0x50, 0x05, 0x00, 0x00, 0x62 };
DeviceAddress Probe05 = { 0x28, 0xED, 0x1C, 0x51, 0x05, 0x00, 0x00, 0x42 };
DeviceAddress Probe06 = { 0x28, 0x16, 0xC5, 0x40, 0x05, 0x00, 0x00, 0xD2 };
DeviceAddress Probe07 = { 0x28, 0xA4, 0x1B, 0x41, 0x05, 0x00, 0x00, 0xC8 };
DeviceAddress Probe08 = { 0x28, 0xF0, 0xDC, 0x40, 0x05, 0x00, 0x00, 0xC6 };
DeviceAddress Probe09 = { 0x28, 0xC1, 0x94, 0x40, 0x05, 0x00, 0x00, 0xCB };
DeviceAddress Probe10 = { 0x28, 0xB5, 0xE6, 0x40, 0x05, 0x00, 0x00, 0x61 };



void setup()   /****** SETUP: RUNS ONCE ******/
{
  // start serial port to show results
  Serial.begin(9600);
    delay(300);//Wait for newly restarted system to stabilize
  Serial.print("Initializing Temperature Control Library Version ");
  Serial.println(DALLASTEMPLIBVERSION);
 
    Serial.print("Initializing");
  delay(2000);

  pinMode(10, OUTPUT);

if (!SD.begin(chipSelect))
  {
  Serial.print("failed!");
    delay (2000);
    return;
  }
  Serial.println("  init. OK!");

 
  // Initialize the Temperature measurement library
  sensors.begin();
 
  // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
  sensors.setResolution(Probe01, 12);
  sensors.setResolution(Probe02, 12);
  sensors.setResolution(Probe03, 12);
  sensors.setResolution(Probe04, 12);
  sensors.setResolution(Probe05, 12);
  sensors.setResolution(Probe06, 12);
  sensors.setResolution(Probe07, 12);
  sensors.setResolution(Probe08, 12);
  sensors.setResolution(Probe09, 12);
  sensors.setResolution(Probe10, 12);

}//--(end setup )---

void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  delay(3000);
  Serial.println();
  Serial.print("Number of Devices found on bus = "); 
  Serial.println(sensors.getDeviceCount());   
  Serial.print("Getting temperatures... "); 
  Serial.println();   
 
  // Command all devices on bus to read temperature 
  sensors.requestTemperatures(); 
 
  Serial.print("Probe 01 temperature is:   ");
  printTemperature(Probe01);
  Serial.println();
  Temp01 = tempC;

  Serial.print("Probe 02 temperature is:   ");
  printTemperature(Probe02);
  Serial.println();
  Temp02 = tempC;

  Serial.print("Probe 03 temperature is:   ");
  printTemperature(Probe03);
  Serial.println();
  Temp03 = tempC;
   
  Serial.print("Probe 04 temperature is:   ");
  printTemperature(Probe04);
  Serial.println();
  Temp04 = tempC;
 
  Serial.print("Probe 05 temperature is:   ");
  printTemperature(Probe05);
  Serial.println();
  Temp05 = tempC;
 
  Serial.print("Probe 06 temperature is:   ");
  printTemperature(Probe06);
  Serial.println();
  Temp06 = tempC;

  Serial.print("Probe 07 temperature is:   ");
  printTemperature(Probe07);
  Serial.println();
  Temp07 = tempC;

  Serial.print("Probe 08 temperature is:   ");
  printTemperature(Probe08);
  Serial.println();
  Temp08 = tempC;
   
  Serial.print("Probe 09 temperature is:   ");
  printTemperature(Probe09);
  Serial.println();
  Temp09 = tempC;
 
  Serial.print("Probe 10 temperature is:   ");
  printTemperature(Probe10);
  Serial.println();
  Temp10 = tempC;
 
        myFile = SD.open(filename, FILE_WRITE);//<<<<<<<<<<<<< OPEN
  myFile.print(Temp01);
  myFile.print(",");
  myFile.print(Temp02);
  myFile.print(",");
  myFile.print(Temp03);
  myFile.print(",");
  myFile.print(Temp04);
  myFile.print(",");
  myFile.print(Temp05);
  myFile.print(",");
  myFile.print(Temp06);
  myFile.print(",");
  myFile.print(Temp07);
  myFile.print(",");
  myFile.print(Temp08);
  myFile.print(",");
  myFile.print(Temp09);
  myFile.print(",");
  myFile.print(Temp10);
  myFile.print(",");
  myFile.println();
       myFile.close();//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CLOSE
 
   
 
}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/
void printTemperature(DeviceAddress deviceAddress)
{

tempC = sensors.getTempC(deviceAddress);

   if (tempC == -127.00)
   {
   Serial.print("Error getting temperature  ");
   }
   else
   {
   Serial.print("C: ");
   Serial.print(tempC);
   //Serial.print(" F: ");
  // Serial.print(DallasTemperature::toFahrenheit(tempC));
   }
}// End printTemperature
//*********( THE END )***********

PP86lp

Lo revise un poco (intuitiva y lógicamente, sin ningún conocimiento ni nada mas que eso), cambie el parámetro delay por el comentado por el colega Surbyte y elimine todo lo que me pareció estar relacionado a los restantes sensores (2-10). Mire el código sin entender todavía, donde queda definido el tiempo y como determinar que realice una medida cada 15 minutos. Se agradecería muchísimo si alguien me puede decir que parte del código lo hace si es que se encuentra en el mismo.

Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>                 
#include <SD.h>

File myFile;
char filename[] = "Testfile.CSV";

#define ONE_WIRE_BUS_PIN 2
OneWire oneWire(ONE_WIRE_BUS_PIN);
DallasTemperature sensors(&oneWire);

const int chipSelect = 4;

float tempC, Temp01,

DeviceAddress Probe01 = { 0x28, 0x27, 0x26, 0x51, 0x05, 0x00, 0x00, 0x2B };

void setup()   /****** SETUP: RUNS ONCE ******/
{
  // start serial port to show results
  Serial.begin(9600);
    BlinkWithoutBlinkWithoutDelay(300);//Wait for newly restarted system to stabilize
  Serial.print("Initializing Temperature Control Library Version ");
  Serial.println(DALLASTEMPLIBVERSION);
 
    Serial.print("Initializing");
  BlinkWithoutDelay(2000);

  pinMode(10, OUTPUT);

if (!SD.begin(chipSelect))
  {
  Serial.print("failed!");
    BlinkWithoutDelay (2000);
    return;
  }
  Serial.println("  init. OK!");

 
  // Initialize the Temperature measurement library
  sensors.begin();
 
  // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
  sensors.setResolution(Probe01, 12);

}//--(end setup )---

void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  BlinkWithoutDelay(3000);
  Serial.println();
  Serial.print("Number of Devices found on bus = "); 
  Serial.println(sensors.getDeviceCount());   
  Serial.print("Getting temperatures... "); 
  Serial.println();   
 
  // Command all devices on bus to read temperature 
  sensors.requestTemperatures(); 
 
  Serial.print("Probe 01 temperature is:   ");
  printTemperature(Probe01);
  Serial.println();
  Temp01 = tempC;

        myFile = SD.open(filename, FILE_WRITE);//<<<<<<<<<<<<< OPEN
  myFile.print(Temp01);
  myFile.print(",");
  myFile.println();
       myFile.close();//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CLOSE
 
   
 
}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/
void printTemperature(DeviceAddress deviceAddress)
{

tempC = sensors.getTempC(deviceAddress);

   if (tempC == -127.00)
   {
   Serial.print("Error getting temperature  ");
   }
   else
   {
   Serial.print("C: ");
   Serial.print(tempC);
   //Serial.print(" F: ");
  // Serial.print(DallasTemperature::toFahrenheit(tempC));
   }
}// End printTemperature
//*********( THE END )***********

surbyte

Queda claro que tienes que leer muchos tutoriales mi amigo.
Yo me refería al ejemplo blinkwithoutdelay que esta entre los ejemplos del IDE, no que se use como una función.

Pero de todos modos no hace falta usar millis() porque delay esta en un lugar que no afecta el resto del programa, por ahora

Go Up