sábado, 28 de septiembre de 2013

Ecología urbana. La huella de carbono.

Ecología urbana. La huella de carbono.

Categoría: 2. Ciencia y tecnología.

En la ecología urbana existe el concepto de servicio ambiental, que se refiere a los beneficios que aportan las áreas verdes al medio ambiente en términos de fijación de carbono, generación de oxígeno, e incluso la producción de biomasa que eventualmente puede utilizarse para fabricar biocombustibles.
Kevin y col., 2013, mencionan que las áreas verdes urbanas dedicadas a mantener poblaciones arbóreas pueden almacenar o inmovilizar considerablemente mayores cantidades de carbono que las áreas cubiertas con césped, las cuales a pesar de tener una gran productividad en términos de biomasa, tienen la desventaja de que el carbono fijado es rápidamente liberado en forma de CO2 tras su degradación biológica. Las zonas urbanas son grandes consumidores de oxígeno por la combustión que mueve transportes y maquinaria industrial, por lo cual, las áreas verdes urbanas son importantes puntos de reposición, aunque parcial, del oxígeno consumido. Una tercera forma de servicio ambiental es la posibilidad de destinar la biomasa generada en áreas verdes urbanas para la fabricación de biocombustibles, de manera que el ciclo del carbono se cierra en el tiempo presente, lo que no sucede con el uso de combustible obtenido en depósitos fósiles.
Otra forma en que se puede obtener servicios ambientales en las zonas urbanas es mediante el aumento de la eficiencia de uso de la energía. Hay muchas formas en que se puede mejorar esta eficiencia, mediante el uso de energía solar para precalentar el agua y reducir el consumo de combustible para obtener la temperatura final, otra es la instalación de celdas fotovoltaicas para sustituir al menos una fracción del consumo eléctrico total, el uso de energía geotérmica para la calefacción de interiores se está popularizando en ciudades de latitudes norte o sur más allá de los trópicos. El uso de vehículos eléctricos (conectables) o híbridos (conectables o no conectables) también es una forma de aumentar la eficiencia en el consumo de energía en los medios de transporte.
La evaluación del ciclo de vida (life cycle assessment) que se realiza como parte del diseño de nuevos productos y procesos industriales permite conocer el grado en que la fabricación, uso y disposición final impacta en los diferentes componentes del medio ambiente, es decir, la generación de contaminantes atmosféricos, generación de residuos sólidos no reciclables, generación de residuos peligrosos no reutilizables y agua residual. De esta manera, los productos que contengan mayor porcentaje de componentes reciclables y reutilizables y cuya producción genere la menor cantidad neta de contaminantes atmosféricos y agua residual, serán los más eficientes en términos ambientales. El consumidor final se va a familiarizar paulatinamente con esta información y podrá utilizarla como criterio antes de realizar la adquisición. Uno de los primeros parámetros que el consumidor podrá utilizar para la adquisición de un producto o servicio será el llamado huella de carbono. Aunque en lo sucesivo se integrarán otros.
Los bonos de CO2 son un instrumento financiero internacional que sirven para financiar proyectos sustentables con recursos provenientes de empresas que por su naturaleza no pueden evitar emisiones de contaminantes a la atmósfera. Así aportan recursos para proyectos que secuestran carbono, proyectos que desplazan actividades que emiten gases perjudiciales (gases de efecto invernadero, gases que dañan la capa de ozono, gases que promueven la formación de ozono en las capas inferiores de la atmósfera, como los compuestos orgánicos volátiles y los óxidos de nitrógeno). Con esta medida se trata que las actividades contaminantes obligadas, puedan reducir su huella de carbono de manera indirecta.
Un concepto que sintetiza todos los anteriores es el de huella de carbono, que incluso puede medirse. Dentro de poco tiempo se tendrá la posibilidad de instalar una app en los teléfonos inteligentes que nos permitirá medir nuestra huella de carbono individual (carbon footprint).
Se estima que el 28 por ciento de las tierras agrícolas del mundo producen cultivos que se desperdician. En el proceso, se despilfarran 250 km³ de agua y la huella de carbono de los alimentos producidos y no consumidos se estima en 3,3 gigatoneladas de CO² equivalente (FAO, 2013 – La huella del desperdicio de alimentos, impacto en los recursos naturales)

Ejemplo de automatización.
Aumenta la eficiencia de tus procesos y reduce tu huella de carbono.
En esta entrada se propone un ejercicio sencillo o relativamente sencillo para hacer más eficiente el uso de energía eléctrica en el popular pasatiempo de la acuariofilia o bien, con algunas modificaciones, aplicarlo al cuidado de otras mascotas, como el calentamiento del hábitat para reptiles. Se propone un control automatizado que acciona la bomba de aire durante la mitad del tiempo, evitando mantenerla encendida continuamente (la relación tiempo encendido/apagado puede variarse a voluntad, según las necesidades particulares). En especies menos demandantes se puede mantener apagada la bomba de aire durante la noche, lo cual también se muestra en el control automático propuesto. El usuario puede identificar muchos otros casos cotidianos en los que puede aplicarse este control automático.
El proyecto tiene como base un pic programable (circuito integrado programable, pic). En este caso se propone utilizar la tarjeta de desarrollo Arduino UNO (ATMEGA328) que cuenta con 13 entradas/salidas digitales y con 6 entradas analógicas. La asignación de pines es como sigue:

A0 – entrada analógica con una fotorresistencia de 2Mohm.
I/O 3 – salida digital con un relevador de voltaje de 5V, 15A.
I/O 4 – salida digital con un LED rojo indicador de noche.
I/O 5 – salida digital con un LED verde indicador de noche.
I/O 6 – salida digital con un LED rojo indicador de encendido del dispositivo conectado al relevador de voltaje (bomba de aire de acuario).

Se escribieron tres versiones del programa que se va a cargar en el pic programable. Uno utiliza la función millis() para asignar el momento de encendido / apagado de los pines, con pulsos de encendido / apagado de igual duración. El segundo utiliza la función millis() para asignar el momento de encendido / apagado de los pines, con pulsos de encendido / apagado de distinta duración. El tercero utiliza la función delay() para asignar el momento de encendido / apagado de los pines, con pulsos de encendido / apagado de duración igual o diferente duración, a criterio del programador. La tercera forma del programa es la más simple y es la más recomendable para quienes no han tenido contacto previo con este tipo de programas. Los programas primero y segundo son más elaborados y permiten la programación de un gran número de eventos sucediendo simultáneamente pero con temporizaciones independientes unas de otras. En la práctica es la forma más versátil de programar eventos, pero la complejidad se incrementa rápidamente a medida que agregamos tareas al pic; aunque tiene la ventaja de que una vez que se ha programado un bloque de pines, este ya no se modifica cuando se programan los demás bloques.

El código para el primer programa queda de la siguiente manera:
/*
Programa: HuellaDeCarbonoUno
Este programa asigna intervalos de encendido / apagado de igual
duración (10 minutos)
Se utiliza la función millis() para manejar el momento de
encendido / apagado.
*/
const int ledPin =  13;
const int pinRelay = 3;
const int pinLedDia = 4;
const int pinLedNoche = 5;
const int pinLedRelay = 6;
int valorIluminacion;
unsigned long previousMillis = 0;       
unsigned long intervaloLed = 1000;  
unsigned long relayIntervalo = 600000; // 10 minutos
unsigned long previousRelayMillis;
byte ledState = LOW;
byte estadoRelay = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(pinRelay, OUTPUT);
  pinMode(pinLedDia, OUTPUT);
  pinMode(pinLedNoche, OUTPUT);
  pinMode(pinLedRelay, OUTPUT); 
}

void loop()
{
  unsigned long actualMillis = millis();
  if(actualMillis - previousMillis > intervaloLed) {
    previousMillis = actualMillis;  
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(ledPin, ledState);
  }

  valorIluminacion = analogRead(A0);
  if (valorIluminacion > 764)  {
    digitalWrite(pinLedDia, HIGH);
    digitalWrite(pinLedNoche, LOW);
    if (actualMillis - previousRelayMillis > relayIntervalo)  {
      previousRelayMillis = actualMillis;
      if (estadoRelay == LOW)  {
        estadoRelay = HIGH;  }
      else  {
        estadoRelay = LOW;              }
      digitalWrite(pinRelay, estadoRelay);
      digitalWrite(pinLedRelay, estadoRelay);  }  }
  else  {
    digitalWrite(pinRelay, LOW);
    digitalWrite(pinLedDia, LOW);
    digitalWrite(pinLedNoche, HIGH);  }  }
Tamaño binario del sketch: 1286 bytes, de un máximo de 32256 bytes.

El código para la segunda versión del programa queda de la siguiente manera:
/*
Programa: HuellaDeCarbonoDos
Este programa asigna intervalos de encendido / apagado de distinta
duración.
Se utiliza la función millis() para manejar el momento de
encendido / apagado.
*/
const int ledPin =  13;
const int pinRelay = 3;
const int pinLedDia = 4;
const int pinLedNoche = 5;
const int pinLedRelay = 6;
int valorIluminacion;
unsigned long previousMillis = 0;       
unsigned long intervaloLed = 1000;  
unsigned long relayIntervaloOn = 120000; // 2 minutos
unsigned long relayIntervaloOff = 480000;  // 8 minutos
unsigned long previousRelayMillis;
byte ledState = LOW;
byte estadoRelay = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(pinRelay, OUTPUT);
  pinMode(pinLedDia, OUTPUT);
  pinMode(pinLedNoche, OUTPUT);
  pinMode(pinLedRelay, OUTPUT); 
}

void loop()
{
  unsigned long actualMillis = millis();
  if(actualMillis - previousMillis > intervaloLed) {  // codigo para un bloque de pines
    previousMillis = actualMillis;  
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(ledPin, ledState);
  }

  valorIluminacion = analogRead(A0);
  if (valorIluminacion > 764)  {    // codigo para un segundo bloque de pines
    digitalWrite(pinLedDia, HIGH);
    digitalWrite(pinLedNoche, LOW);
      if (estadoRelay == HIGH)  {
        if (actualMillis - previousRelayMillis > relayIntervaloOff)  {
          previousRelayMillis = actualMillis;
          estadoRelay = LOW;
        digitalWrite(pinRelay, estadoRelay);
        digitalWrite(pinLedRelay, estadoRelay);  }  }
      if (estadoRelay == LOW)  {
        if (actualMillis - previousRelayMillis > relayIntervaloOn)  {
          previousRelayMillis = actualMillis;
          estadoRelay = HIGH;
        digitalWrite(pinRelay, estadoRelay);
        digitalWrite(pinLedRelay, estadoRelay);  }  }  }
  else  {
    digitalWrite(pinRelay, LOW);
    digitalWrite(pinLedDia, LOW);
    digitalWrite(pinLedNoche, HIGH);  }  }
Tamaño binario del sketch: 1386 bytes, de un máximo de 32256 bytes.

El código para la tercera versión del programa queda de la siguiente manera:
/*
Programa: HuellaDeCarbonoTres
Este programa asigna intervalos de encendido / apagado de distinta
duración.
Se utiliza la función delay() para manejar el momento de
encendido / apagado.
*/
const int ledPin =  13;
const int pinRelay = 3;
const int pinLedDia = 4;
const int pinLedNoche = 5;
const int pinLedRelay = 6;
int valorIluminacion;
// unsigned long previousMillis = 0;       
// unsigned long intervaloLed = 1000;  
// unsigned long relayIntervaloOn = 120000; // 2 minutos
// unsigned long relayIntervaloOff = 480000;  // 8 minutos
// unsigned long previousRelayMillis;
byte ledState = LOW;
// byte estadoRelay = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(pinRelay, OUTPUT);
  pinMode(pinLedDia, OUTPUT);
  pinMode(pinLedNoche, OUTPUT);
  pinMode(pinLedRelay, OUTPUT); 
}

void loop()
{
  if (ledState == HIGH)  {
    ledState = LOW;
    digitalWrite(ledPin, ledState);  }
  else  {
    ledState = HIGH;
    digitalWrite(ledPin, ledState);  }
   
  valorIluminacion = analogRead(A0);
  if (valorIluminacion > 764)  {   
    digitalWrite(pinRelay, HIGH);
    digitalWrite(pinLedRelay, HIGH);
    delay(480000);
   
    digitalWrite(pinRelay, LOW);
    digitalWrite(pinLedRelay, LOW);
    delay(120000);  }
  else  {
    digitalWrite(pinRelay, LOW);
    digitalWrite(pinLedDia, LOW);
    digitalWrite(pinLedNoche, HIGH);  }  }

Tamaño binario del sketch: 1272 bytes, de un máximo de 32256 bytes.

La lectura analógica para determinar si es de día o de noche, se utilizó como criterio un valor de 3(255)-1=764, que sería el 75% de la iluminación máxima detectada por el sensor. Este valor se tendría que ajustar (entre 0 y 1023 o 4(255)-1=1023) dependiendo de la ubicación del sensor.
El pin de entrada analógica (A0) no requiere declaración dentro de la función void setup(), pero si se desea, se le puede asignar un nombre de variable del mismo modo que se hizo con las salidas (o entradas, según sea el caso) digitales.
Como puede verse, estos sencillos programas ocupan muy poca memoria en el chip programable, por lo que se puede utilizar pines adicionales pines para manejar otras funciones, según se desee. En el caso de un hábitat para reptiles puede ser útil colocar un termistor para regular la temperatura, encendiendo y apagando la calefacción, a manera de un termostato.

El circuito electrónico
Para realizar el montaje de los diferentes circuitos electrónicos que comprende este pequeño proyecto se recomienda utilizar, como ya se mencionó, la tarjeta de desarrollo Arduino UNO y una tabla de montaje de prototipos (protoboard, como es su nombre en inglés). Si se trabaja con la tarjeta de desarrollo MSP430G2xx3, de Texas Instruments, utilizando el software Energia, se puede utilizar el mismo código, con algunas pequeñas modificaciones en la declaración de las entradas/salidas digitales y la entrada analógica, también se tendrán que utilizar los componentes electrónicos apropiados, como un relevador que trabaje a 3.3.Vcc y los valores apropiados de resistencias para los led’s.



El diodo en D1 puede ser un 1N4004.

Bibliografía
Kevin JG., Avila, JML., and Edmondson JL. 2013. Managing urban ecosystems for goods and services. Journal of Applied Ecology 2013:1-11.

Arduino. Sitio web. http://www.arduino.cc/.









Ecología urbana. La importancia de ser eficientes.

Ecología urbana. La importancia de ser eficientes.

Categoría: 2. Ciencia y tecnología.

Introducción
Cuando enfocamos alguno de los aspectos que observamos como problemas actuales de la humanidad, en realidad estamos ante la expresión de básicamente tres grandes problemas de nuestro tiempo. Uno, el abasto de energía para poder mantener el nivel actual de desarrollo; dos, la situación demográfica sin precedentes en la historia de la humanidad; y tres, el deterioro del medio ambiente, también sin precedentes en nuestra historia.
Aunque las fuentes de energía alternas a los hidrocarburos obtenidos del petróleo, el gas y el carbón mineral son múltiples, sólo algunas de ellas prometen un abasto continuo y confiable de energía para alimentar el desarrollo, ahora sí, sostenido de nuestra sociedad. La energía nuclear puede ser una base robusta, pero no debería aportar una fracción grande de la energía, por las dificultades en el manejo de sus residuos, en primer lugar, y por los riesgos que genera su manejo. La energía de la biomasa es una fuente confiable y de largo plazo, pero no puede soportar más que una fracción relativamente pequeña del abasto total de energía. La energía eólica y la hidráulica, incluyendo la generación hidroeléctrica y la obtención de energía de las mareas, son fuentes confiables pero que no aportarían gran porcentaje de la energía. La utilización de celdas electroquímicas utilizando el hidrógeno como fuente de electrones también es una fuente confiable de energía, pero para obtener hidrógeno de manera sustentable parece necesario recurrir a procesos biotecnológicos que están en desarrollo, debido a que por la vía de la electrólisis del agua se necesita una gran inversión de energía. La energía solar resulta ser una alternativa no tan confiable por su variabilidad en un mismo sitio, por lo que su aporte llegará a un máximo que no será un porcentaje alto del consumo total de energía.
La población humana actual, por su parte, nunca había alcanzado el tamaño que tiene ahora. En este momento la población humana total en el planeta es de unos 6,868 millones de personas (http://www.poodwaddle.com/clocks/worldclock/). Ante la magnitud nunca antes vista de este parámetro poblacional, aunado a la mayor esperanza de vida, también nunca antes vista, se genera una serie de retos como hacer llegar alimentos a los habitantes de todos los rincones del planeta, producir la cantidad suficiente de alimentos y bienes básicos, hacer llegar servicios de salud y educativos a todos los habitantes, proporcionar servicios de transporte, agua potable y alcantarillado. Esto por no hablar de servicios de telefonía, internet, radio o televisión. Una de las preocupaciones cuando se trata de la producción de energía a partir de la biomasa, es la competencia que se establecerá en la superficie cultivada para este objetivo y para la producción de alimentos. Esta es una disyuntiva que por lo pronto no se puede prever, pero se entiende que si la población humana alcanza su máximo alrededor del año 2050 como está previsto, en lo sucesivo se tendrá que producir alimentos para una población constante, y si el proceso se desarrolla de manera no catastrófica, la población comenzará a decrecer de manera armoniosa a partir de entonces.
El deterioro del medio ambiente no es algo novedoso. Las actividades industriales que demandan una gran cantidad de recursos y materias primas para producir los bienes que están destinadas a satisfacer, generan presiones sobre los recursos naturales y sociales de la zona en donde desarrollan sus actividades y cada vez más, en regiones más lejanas a la de su ubicación actual. Así por ejemplo, en la Nueva España, la actividad minera consumía grandes cantidades de madera que era quemada para calentar la roca y luego, con la adición de agua fría, fracturarla por el choque térmico. Esto consumía grandes cantidades de leña que era obtenida de los bosques más cercanos, acabando por deforestar y erosionar grandes superficies de bosques en regiones como Guanajuato o Pachuca. Tras la llegada de los colonizadores españoles, la actividad minera para extraer plata principalmente, no pudo sostenerse con la amalgamación con mercurio, ya que se conocían pocos yacimientos de este elemento. Así que los mineros españoles adoptaron la técnica prehispánica que utiliza la sal marina para el amalgamamiento de la plata, echando mano de un recurso lejano obtenido en las salinas de Colima y en menor medida, de los yacimientos localizados tierra adentro, como los lagos someros de Sayula en Colima o el lago de Texcoco en el Valle de México. Sin embargo, los procesos de deterioro ambiental no habían alcanzado las impresionantes magnitudes que tienen hoy en día. Esto no significa necesariamente que nos encontremos al borde de una catástrofe medio-ambiental, pero tampoco nos encontramos ante el futuro más halagüeño de los últimos tiempos. Los procesos naturales tienen capacidades sumamente grandes, no sólo de amortiguamiento de los efectos ambientales, sino también de procesamiento de desechos y su transformación a formas menos dañinas para los ecosistemas naturales. Además estamos ante una de las etapas de mayor generación de tecnologías anticontaminantes y también de diseño de procesos más eficientes y más limpios de producción.
De esta manera, todo va caminando por el rumbo de un alivio de las condiciones de vida en el planeta, tanto para la especie humana, como para los ecosistemas que lo acompañan. Sólo esperamos que todos ellos lleguen a la meta antes de que se presenten procesos de deterioro catastróficos.
Información general
En el sitio web PoodWaddle.com (http://www.poodwaddle.com/clocks/worldclock/) se presenta una aplicación web que despliega algunos datos que pueden ser de utilidad para enfocar el punto de vista mostrado en esta entrada. Un dato interesante es que la población humana acumulada, si no hubiera muerto ninguna persona nacida, es de 106,798,975,642 personas. Este dato junto con el de la población mundial actual, 6,868,130,092, puede ser de utilidad para elaborar un modelo de crecimiento poblacional de tipo exponencial. Además hace falta el dato de que la especie humana (Homo sapiens) apareció sobre la Tierra hace aproximadamente 150,000 a 200,000 años.
El número de nacimientos, por otro lado es de 18,479,495, en lo que ha transcurrido del año 2013, 149 días; por su parte, el número de nacimientos en el mismo periodo es de 8,017,945. De este modo, el número de nacimientos supera en más del doble al número de decesos, de manera que la población mundial aumenta en 10,461,550 personas en 149 días, esto es algo así como 2,092,310 personas por mes. En este momento esto es el 0.03% de incremento mensual o el 0.37% de incremento anual. Según datos del Banco Mundial, en los próximos 35 años la población humana se va a incrementar en 2500 millones de habitantes, aunque indica que las tasas de nacimiento y de mortalidad han decrecido en las últimas décadas.
Las naciones en vías de desarrollo muestran una pirámide poblacional adelgazada en la parte superior y ensanchada en la parte inferior. Esta característica indica que una creciente población juvenil se incorporará en pocos años a un mercado de trabajo ya de por sí debilitado, además de que un creciente número de personas alcanzarán la edad en que dejan de trabajar y deben continuar recibiendo ingresos para su sustento, lo cual incrementa la presión sobre los ingresos generados por la población trabajadora. En las naciones desarrolladas, por otro lado, la pirámide poblacional es más homogénea en los diferentes estratos de edad e incluso unas pocas naciones muestran un pirámide poblacional invertida, típica de los países con tasa de crecimiento poblacional negativa. Estos dos últimos tipos de comportamiento demográfico indican que la cantidad de nacimientos es reducida, la cantidad de jóvenes que se integra a la población económicamente activa es baja y la cantidad de adultos que dejan de trabajar y se incorporan a la población jubilada es también reducida. Esto reduce la presión para proporcionar sustento y seguridad a las poblaciones vulnerables, niños y ancianos.




Datos demográficos, de la industria y medio-ambientales acumulados anuales al día 30 de mayo de 2013, 149 días transcurridos. (Del sitio web: http://www.poodwaddle.com/clocks/worldclock/)



Bibliografía

Curtis, Helena y Sue Barnes. 2000. Biología. Sexta Edición. Editorial médica Panamericana.

PoodWaddle. Consulta el 30 de mayo de 2013. Sitio web: http://www.poodwaddle.com/clocks/worldclock/








miércoles, 25 de septiembre de 2013

Diseño de reactores. Parte 24. Lodos activados. Efecto de la temperatura.

Diseño de reactores. Parte 24. Modelación del proceso de lodos activados. Efecto de la temperatura.

Categoría: 2. Ciencia y tecnología.

Este ejercicio está basado en ejercicios del capítulo 6 de Martínez y Rodríguez (2005).

Ejercicio VI-2
Con base en el efecto de la temperatura en la velocidad específica de crecimiento (ecuación VI-15), introduzca el efecto de la temperatura y desarrollo el programa para evaluar este efecto en un sistema de tratamiento de agua residual doméstica mediante lodos activados utilizando esas mismas ecuaciones y los parámetros correspondientes.

Se debe resolver el sistema de ecuaciones siguiente:

ds/dt=(Qf*Sf)/V-(Qf*S)/V-(mumax/Y)*(S/(Ks+S))*(Co2/(KOH+Co2))*X+kd*(1-fn)*X
dX/dt=(Qf*X)/V+mumax*(S/(Ks+S))*(Co2/(KOH+Co2))*X-kd*X
dCo2/dt=-(Qo*Co2)/V-(mumax/Yo2)*(S/(Ks+S))*(Co2/(KOH+Co2))*X+kla*(Cosat-Co2)

KOH= coeficiente de saturación de oxígeno (mg/L)
Yo2= coeficiente de rendimiento de O2 (mg biomasa generada/mg de O2 consumido)

El código en MATLAB se escribió en dos programas, lodosactivadostemp.m y lodosactivadostemprun.m. En el primero de ellos se planteó el sistema de ecuaciones y en el segundo se colocaron las instrucciones para ejecutar la solución y generar los gráficos (Figuras 13 a 16). En el programa lodosactivadostemprun.m se utilizó el signo % de manera que se generaba el gráfico para un parámetro a la vez. El código de estos dos programas se muestra a continuación:

% lodosactivadostemp
function dy=lodosactivadostemp(t,y)
Sf=310;
Tw=16;
if t<1460
    Tw=16;
elseif t<2920
    Tw=19;
elseif t<4380
    Tw=23;
elseif t<5840
    Tw=25;
elseif t<7300
    Tw=28;
elseif t<8760
    Tw=30;
end
% coeficientes de la ecuacion VI-15
a1=0.1373;
b1=22.91;
c1=17.59;
% ecuacion VI-15
mumax=a1*exp(-((Tw-b1)/c1)^2);
Y=0.71;
fn=0.1;     % fraccion de inertes en los SSV
Ks=35;
kd=0.002*1.05^(Tw-20);  % ecuacion VI-19
Yo=2.03;
Koh=0.2;
O2o=0.3;
kla20=6.0;
kla=kla20*1.02^(Tw-20);     % ecuacion III-10a
beta=0.985;
O2sat=((0.0035*Tw^2)-0.3355*Tw+14.465)*beta;    % ecuacion VI-21
Qf=120;
Qr=15;
Qw=5;
V=500;
Vs=100;
% sistema de ecuaciones
dy=zeros(4,1);
% ecuacion de comportamiento de sustrato en el reactor
dy(1)=(Qf/V)*Sf-((Qf+Qr)/V)*y(1)-((mumax/Y)*y(1)*y(2)/(Ks+y(1)))*((y(4)/(Koh+y(4))))+(1-fn)*y(2)*kd;
% ecuacion de comportamiento de SSV en el reactor
dy(2)=(Qr/V)*y(3)-((Qf+Qr)/V)*y(2)+((mumax*y(1)*y(2))/(Ks+y(1)))*(y(4)/(Koh+y(4)))-kd*y(2);
% ecuacion de comportamiento de SSv en el sedimentador
dy(3)=((Qf+Qr)/Vs)*y(2)-((Qr+Qw)/Vs)*y(3);
% ecuacion de comportamiento de oxigeno en el reactor
dy(4)=kla*(O2sat-y(4))+(Qf/V)*O2o-((Qf+Qr)/V)*y(4)-(((1/Yo)*mumax*y(1)*y(2))/(Ks+y(1)))*(y(4)/(Koh+y(4)));

% lodosactivadostemprun
[t,y]=ode45('lodosactivadostemp',[0 8760],[250 120 1000 4]);

% grafico para DQO
%plot(t,y(:,1),'k-')
%xlabel('tiempo (h)')
%ylabel('DQO (mg/L)')
%title('comportamiento dinamico de la DQO en diferentes temperaturas')
%text(730,90,'16°C')
%text(2190,90,'19°C')
%text(3650,90,'23°C')
%text(5110,90,'25°C')
%text(6570,90,'28°C')
%text(8030,90,'30°C')

% grafico para SSV
%plot(t,y(:,2),'k-')
%xlabel('tiempo (h)')
%ylabel('SSV (mg/L)')
%title('comportamiento dinamico de SSV en el reactor a diferentes temperaturas')
%text(730,675,'16°C')
%text(2190,675,'19°C')
%text(3650,675,'23°C')
%text(5110,675,'25°C')
%text(6570,675,'28°C')
%text(8030,675,'30°C')

% grafico para SSVS
%plot(t,y(:,3),'k-')
%xlabel('tiempo (h)')
%ylabel('SSVS (mmg/L)')
%title('comportamiento dinamico de SSVS en el sedimentador a diferentes temperaturas')
%text(730,1500,'16°C')
%text(2190,1500,'19°C')
%text(3650,1500,'23°C')
%text(5110,1500,'25°C')
%text(6570,1500,'28°C')
%text(8030,1500,'30°C')
%axis([0 9000 500 5000])

% grafico para OD
plot(t,y(:,4),'k-')
xlabel('tiempo (h)')
ylabel('OD (mg/L)')
title('comportamiento dinamico de OD en el reactor a diferentes temperaturas')
text(730,7.5,'16°C')
text(2190,7.5,'19°C')
text(3650,7.5,'23°C')
text(5110,7.5,'25°C')
text(6570,7.5,'28°C')
text(8030,7.5,'30°C')


Figura 13. Gráfico del comportamiento dinámico de la DQO en el efluente a diferentes temperaturas.


Figura 14. Gráfico del comportamiento dinámico de SSV dentro del reactor a diferentes temperaturas.


Figura 15. Gráfico del comportamiento dinámico de la concentración de SSV en el fondo del sedimentador a diferentes temperaturas.


Figura 16. Gráfico del comportamiento dinámico de la concentración de oxígeno disuelto dentro del reactor a diferentes temperaturas.

Bibliografía


Martínez D., Sergio A. y Miriam G. Rodríguez R.2005. Tratamiento de aguas residuales con MATLAB. Editorial Reverté. Universidad Autónoma Metropolitana. México, DF, México.








Diseño de reactores. Parte 23. Lodos activados. Variación de Qr y Qw.

Diseño de reactores. Parte 23. Modelación del proceso de lodos activados. Variación de Qr y Qw.

Este ejercicio está basado en ejercicios del capítulo 6 de Martínez y Rodríguez (2005).

Variación de Qr y Qw
El programa lodosactivados.m se modifica de la siguiente manera:
                function dy=lodosactivados(t,y)                              Esta instrucción cambia por:
                function dy=lodosactivadosQrQw(t,y,unused,Qr,Qw)

Para ejecutar la solución del sistema de ecuaciones se escribe el programa lodosactivadosQrQwrun.m con las siguientes instrucciones:

% lodosactivadosQrQwrun
% este programa ejecuta el sistema de ecuaciones planteado en el
% programa lodosactivadosQrQw.m
% Se ejecuta el sistema de ecuaciones con diferentes valores para Qr y Qw
for Qr=1000:250:3000
    for Qw=400:200:1000
        [t,y]=ode45('lodosactivadosQrQw',[0 20],[668 1000 6500 2],[],Qr,Qw);
        Qr,Qw
        [t(end),y(end,1),y(end,2),y(end,3),y(end,4)]
        pause
    end
end

Los resultados desplegados en la ventana de comandos son como sigue:

EDU>> lodosactivadosQrQwrun
Qr = 1000     Qw =  400     ans =       1.0e+003 *
    0.0200    0.0478    0.5701    4.4794    0.0062
Qr = 1000     Qw =  600     ans =       1.0e+003 *
    0.0200    0.0675    0.4311    2.9636    0.0062
Qr = 1000     Qw =  800     ans =       1.0e+003 *
    0.0200    0.0860    0.3564    2.1781    0.0062
Qr = 1000     Qw = 1000     ans =       1.0e+003 *
    0.0200    0.1033    0.3090    1.6994    0.0063
Qr = 1250     Qw =  400     ans =       1.0e+003 *
    0.0200    0.0406    0.6528    4.4510    0.0062
Qr = 1250     Qw =  600     ans =       1.0e+003 *
    0.0200    0.0575    0.4893    2.9758    0.0062
Qr = 1250     Qw =  800     ans =       1.0e+003 *
    0.0200    0.0736    0.4015    2.2031    0.0062
Qr = 1250     Qw = 1000     ans =       1.0e+003 *
    0.0200    0.0889    0.3458    1.7288    0.0062
                .
                .
                .
Qr = 2750     Qw =  400     ans =       1.0e+003 *
    0.0200    0.0238    1.0330    4.1814    0.0062
Qr = 2750     Qw =  600     ans =       1.0e+003 *
    0.0200    0.0335    0.7638    2.9069    0.0062
Qr = 2750     Qw =  800     ans =       1.0e+003 *
    0.0200    0.0431    0.6144    2.2068    0.0062
Qr = 2750     Qw = 1000     ans =       1.0e+003 *
    0.0200    0.0526    0.5191    1.7650    0.0062
Qr = 3000     Qw =  400     ans =       1.0e+003 *
    0.0200    0.0226    1.0821    4.1374    0.0062
Qr = 3000     Qw =  600     ans =       1.0e+003 *
    0.0200    0.0317    0.8003    2.8899    0.0062
Qr = 3000     Qw =  800     ans =       1.0e+003 *
    0.0200    0.0408    0.6430    2.1999    0.0062
Qr = 3000     Qw = 1000     ans =       1.0e+003 *
    0.0200    0.0498    0.5424    1.7630    0.0062
EDU>>

Un gráfico 3D para cada parámetro se puede obtener introduciendo los vectores caudal de reciclaje, Qr, y caudal de purga o de desecho, Qw, de la siguiente manera:
Qr=[1000:250:3000]
Qw=[400:200:1000]
A continuación se introduce la matriz con los resultados de DQO obtenidos para los diferentes Qr y Qw:
DQOL=[47.8 67.5 86.0 103.3;
40.6 57.5 73.6 88.9;
35.6 50.5 64.8 78.6;
32.0 45.3 58.2 70.8;
29.2 41.3 53.2 64.8;
27.0 38.1 49.1 59.9;
25.2 35.6 45.8 55.9;
23.8 33.5 43.1 52.6;
22.6 31.7 40.8 49.8];
surf(Qw,Qr,DQOL);
shading interp
colorbar;
xlabel('SSVS Qw (mg/L)')
ylabel('SSV Qr (mg/L)')
zlabel('DQO (mg/L)')


Figura 9. Gráfico de concentraciones de DQO en las simulaciones con Qw de 400:200:1000 m3/d y Qr de 1000:250:3000 m3/d. Caudal de desecho de los fondos del sedimentador, Qw, y caudal de reciclaje de lodos, Qr.

Se procedió de la misma manera con los datos que se generaron para las variables SSV, SSVS y OD.


Figura 10. Gráfico de concentraciones de SSV en el biorreactor en las simulaciones con Qw de 400:200:1000 m3/d y Qr de 1000:250:3000 m3/d. Caudal de desecho de los fondos del sedimentador, Qw, y caudal de reciclaje de lodos, Qr.


Figura 11. Gráfico de concentraciones de SSVS en el sedimentador en las simulaciones con Qw de 400:200:1000 m3/d y Qr de 1000:250:3000 m3/d. Caudal de desecho de los fondos del sedimentador, Qw, y caudal de reciclaje de lodos, Qr.


Figura 12. Gráfico de concentraciones de OD en el biorreactor en las simulaciones con Qw de 400:200:1000 m3/d y Qr de 1000:250:3000 m3/d. Caudal de desecho de los fondos del sedimentador, Qw, y caudal de reciclaje de lodos, Qr.

Bibliografía

Martínez D., Sergio A. y Miriam G. Rodríguez R.2005. Tratamiento de aguas residuales con MATLAB. Editorial Reverté. Universidad Autónoma Metropolitana. México, DF, México.