ARTE
BELLEZZA E BENESSERE
MESTIERE
CULTURA E STORIA
DIVERTIMENTO
AMBIENTE
CIBO E BEVANDE
INGEGNERIA INVERSA
SCIENZE
SPORT
TECNOLOGIA
INDOSSABILI
Activated Sludge
Bob

Creato da

Bob

28. agosto 2026BE
22
0
0
0
0

Activated Sludge

People had been blowing air through sewage since the 1880s. It worked, slowly, and it took weeks — long enough that nobody could build a works around it. The organisms doing the job were being washed out as fast as they grew. Edward Ardern and William Lockett, working at the Davyhulme works in Manchester, published the answer in April 1914 in a paper with a deliberately dull title: Experiments on the Oxidation of Sewage without the Aid of Filters. They aerated sewage in a bottle until it was clean, then poured off the clear liquid and KEPT the sludge at the bottom. Then they filled the bottle again with fresh sewage onto that same sludge. And again. Each cycle got faster. By the time they had accumulated enough sludge, sewage that once took five weeks was treated in about six hours. They called the retained sludge activated, borrowing the word from activated carbon, and the name stuck to the whole process. What they had actually invented was the decoupling of two times that everyone had assumed were one. The water passes through in hours. The organisms stay for days. Once you can set those two independently you can grow a dense population of exactly the organisms that eat your waste, and keep them. Everything else in the process follows from that. You need a settling tank, because the only way to hold the sludge back is to let it settle and pump it forward. You need the sludge to settle well, which turns out to be a biological property you can lose. And you need to waste some sludge deliberately every day, because the population grows, and how much you waste sets how long an organism stays — the sludge age — which is the single control knob over what kind of community you get. You will build a bench reactor with a settler, grow a culture, measure its density and its settling behaviour, and deliberately push it into the failure that plagues every real works: bulking.
Avanzato
6 hours to build, 6 weeks to a stable culture

Istruzioni

1

Build the reactor and the settler as one loop

The plant is two vessels and a return, and the return is what makes it a process rather than a bucket of aerated sewage. The aeration tank: a 10 litre clear container, tall rather than wide, with an air stone on the floor fed from an aquarium air pump. Tall matters — a bubble rising through 400 mm of liquid has roughly twice the contact time of one rising through 200 mm, and contact time is what transfers oxygen. Run enough air to keep the whole contents visibly rolling; you are mixing as well as aerating, and settled solids in the corner of an aeration tank go anaerobic and start making the smell that gets works closed. The settler: a cone-bottomed vessel of about 3 litres hung immediately after it. A cone, not a flat bottom, and a steep one — 60 degrees — so sludge slides to the point instead of sitting on a shelf. Feed it from the aeration tank near mid-depth, take clear effluent off a weir at the top, and take sludge from the very bottom of the cone. The return: a small peristaltic pump or an air lift moving settled sludge from the cone bottom back to the aeration tank. Set it initially at about the same rate as the feed — a 1:1 return ratio — which is ordinary practice. The return must run continuously. Sludge that sits in a cone for more than about half an hour goes anaerobic, releases the phosphorus it has taken up, and floats back to the surface in a mat, which people misread as bulking. It is not bulking, it is a stopped return. Feed with the same defined synthetic wastewater as the rest of this batch — per 10 litres, 1.5 g glucose, 1.5 g peptone, 0.5 g ammonium chloride, 0.2 g potassium dihydrogen phosphate, 0.5 g sodium bicarbonate — at roughly 40 litres per day, giving about six hours of hydraulic detention. Use a peristaltic pump on a timer, or a levelled constant-head bottle with a needle valve. Seed with two litres of return sludge from a working municipal plant if you can get it. If not, settled effluent from a septic tank will populate the reactor eventually, but expect to spend six weeks rather than two getting to a stable, well-settling culture.

Materiali per questo passaggio:

Acrylic Tube (100mm, Clear)Acrylic Tube (100mm, Clear)1 pezzo
Acrylic Sheet (5mm, Clear)Acrylic Sheet (5mm, Clear)1 square metre
Air PumpAir Pump1 pezzo
Air StoneAir Stone2 pezzi
Laboratory Peristaltic PumpLaboratory Peristaltic Pump2 pezzi
Silicone Tubing (6mm ID)Silicone Tubing (6mm ID)4 metre
Activated Sludge SeedActivated Sludge Seed2 litri

Strumenti necessari:

HacksawHacksaw
Acrylic Strip HeaterAcrylic Strip Heater
Digital Calipers - 152.4 mmDigital Calipers - 152.4 mm
Bucket (10L, Graduated)Bucket (10L, Graduated)
StopwatchStopwatch
2

Measure the culture: MLSS, the settled volume, and the index that joins them

Three measurements run this process. Take all three daily; they take twenty minutes together and nothing else tells you what the culture is doing. Mixed liquor suspended solids, MLSS, is how much biomass you are carrying. Filter a known volume of well-mixed aeration-tank contents through a dried, pre-weighed glass-fibre filter, dry it at 105 degrees Celsius to constant mass, and weigh again. Milligrams of solids per litre. Conventional plants run 1500 to 4000 mg/l. Below about 1000 you have too few organisms to do the work in the time available; above about 5000 the settler cannot cope with the solids loading and you lose sludge over the weir. The thirty-minute settled volume is the crude, fast one and it is the one operators actually watch. Fill a one litre measuring cylinder with mixed liquor, leave it thirty minutes, read the millilitres the sludge blanket occupies. It takes no equipment and it shows you the answer directly: a good sludge falls to a compact 200 to 300 ml with a sharp interface and clear water above. A bad one hangs. The sludge volume index joins them and is the number that means something: SVI is the volume in millilitres that one gram of sludge occupies after thirty minutes of settling. SVI = settled volume (ml/l) x 1000 / MLSS (mg/l) An SVI under 100 is a good, dense, well-settling sludge. Between 100 and 150 is workable. Over 150 the sludge is bulking — it occupies too much volume for its mass, the blanket in the settler rises, and eventually it goes over the weir and the plant fails visibly. The reason SVI is the right number rather than either input alone: a plant can carry 4000 mg/l of excellent sludge or 1500 mg/l of terrible sludge, and the settled volume alone cannot tell them apart. Normalising by mass can. While you have the cylinder in front of you, look at the water above the blanket. Crisp and clear with a sharp interface is a healthy sludge with protozoa grazing the free bacteria. Cloudy with fine particles that never settle is a young sludge, too low a sludge age, dispersed growth. Learn to read those two before you trust any instrument.

Materiali per questo passaggio:

Glass Fibre Filter Papers (1.2 micron)Glass Fibre Filter Papers (1.2 micron)100 pezzi
Distilled WaterDistilled Water5 litri

Strumenti necessari:

Graduated Cylinder (100 ml)
Measuring CylinderMeasuring Cylinder
Precision Digital Scale (0.01g)Precision Digital Scale (0.01g)
Buchner Funnel (Porcelain)Buchner Funnel (Porcelain)
StopwatchStopwatch
3

Sludge age, oxygen demand, and the two times you get to set separately

Loading Jupyter Notebook...

Strumenti necessari:

Desktop ComputerDesktop Computer
Notebook and PencilNotebook and Pencil
4

Log dissolved oxygen continuously — the one variable that changes faster than you can watch

Dissolved oxygen is the variable that moves on a timescale of minutes and decides everything. Below about 0.5 mg/l the floc goes anaerobic at its centre and filamentous organisms — which tolerate low oxygen better than floc-formers — take over, and you get bulking. Above about 3 mg/l you are simply wasting electricity, and on a real works aeration is most of the energy bill. A spot reading once a day tells you almost nothing, because DO swings with every feed dose. Log it. This sketch runs on an ESP32 with an analogue dissolved-oxygen probe and a DS18B20 temperature sensor, because DO saturation is strongly temperature-dependent and an uncompensated reading is not a measurement. It logs to an SD card every thirty seconds and prints to serial, and it computes percent saturation as well as milligrams per litre so you can see how hard the aeration is actually working. Calibrate before you trust it. Two points: zero, in a fresh solution of sodium sulfite which strips oxygen out of water completely; and saturation, in water vigorously aerated for twenty minutes at a known temperature. The saturation table is in the sketch. Run the logger through a feed dose and look at the trace. You should see DO drop sharply as the organisms get their food, then climb back as it is consumed. The depth of that dip is a direct measure of the culture's respiration rate, and watching it recover — or fail to — is the earliest warning you will get of a plant in trouble.
do_logger.inocpp
// Dissolved-oxygen + temperature logger for a bench activated-sludge reactor.
// Board: ESP32 DevKit v1.  Probe: analogue galvanic DO probe.  Temp: DS18B20.
//
// WHY TEMPERATURE IS NOT OPTIONAL: the oxygen a given water CAN hold falls by roughly
// 2% per degree C. An uncompensated mg/L reading drifts with the room and is not a
// measurement. This logs raw mV, temperature, mg/L and percent saturation so a bad
// calibration can be spotted after the fact instead of quietly poisoning the data.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <SD.h>

#define DO_PIN          34      // ADC1_CH6 - ADC2 is unusable while WiFi is on
#define ONE_WIRE_PIN     4
#define SD_CS_PIN        5
#define LOG_INTERVAL_MS 30000UL

// --- calibration, REPLACE WITH YOUR OWN -------------------------------------------
// Zero:       probe in fresh sodium sulfite solution (strips O2 completely).
// Saturation: probe in water aerated hard for 20 min, note the temperature.
const float CAL_ZERO_MV    = 0.0f;
const float CAL_SAT_MV     = 1180.0f;
const float CAL_SAT_TEMP_C = 20.0f;

// Saturated DO in fresh water at 1 atm, mg/L, 0..40 C in 1 C steps.
// Standard table - do not "simplify" to a linear fit; the curve is not linear.
const float DO_SAT_TABLE[41] = {
  14.62,14.22,13.83,13.46,13.11,12.77,12.45,12.14,11.84,11.56,
  11.29,11.03,10.78,10.54,10.31,10.08, 9.87, 9.67, 9.47, 9.28,
   9.09, 8.92, 8.74, 8.58, 8.42, 8.26, 8.11, 7.97, 7.83, 7.69,
   7.56, 7.43, 7.30, 7.18, 7.07, 6.95, 6.84, 6.73, 6.63, 6.53, 6.41
};

OneWire oneWire(ONE_WIRE_PIN);
DallasTemperature sensors(&oneWire);
unsigned long lastLog = 0;
bool sdReady = false;

float doSaturation(float tempC) {
  if (tempC <= 0)  return DO_SAT_TABLE[0];
  if (tempC >= 40) return DO_SAT_TABLE[40];
  int i = (int)tempC;
  float frac = tempC - i;
  return DO_SAT_TABLE[i] + frac * (DO_SAT_TABLE[i + 1] - DO_SAT_TABLE[i]);
}

float readProbeMv() {
  // 64 samples: the reactor is electrically noisy - a feed pump, an air pump, a heater.
  uint32_t acc = 0;
  for (int i = 0; i < 64; i++) { acc += analogRead(DO_PIN); delay(2); }
  return (acc / 64.0f) * (3300.0f / 4095.0f);   // mV, 3.3 V reference
}

void setup() {
  Serial.begin(115200);
  analogSetPinAttenuation(DO_PIN, ADC_11db);    // full 0-3.3 V range
  sensors.begin();

  sdReady = SD.begin(SD_CS_PIN);
  if (sdReady) {
    if (!SD.exists("/do_log.csv")) {
      File f = SD.open("/do_log.csv", FILE_WRITE);
      if (f) { f.println("millis,temp_c,probe_mv,do_mg_l,do_pct_sat"); f.close(); }
    }
  } else {
    Serial.println("SD card not found - serial output only");
  }
  Serial.println("millis,temp_c,probe_mv,do_mg_l,do_pct_sat");
}

void loop() {
  if (millis() - lastLog < LOG_INTERVAL_MS) return;
  lastLog = millis();

  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  if (tempC < -100) { Serial.println("# temp sensor not responding"); return; }

  float mv = readProbeMv();

  // The probe's saturation output itself drifts with temperature, so scale the
  // calibration point to the temperature we are actually reading at.
  float satMvNow = CAL_SAT_MV * (doSaturation(tempC) / doSaturation(CAL_SAT_TEMP_C));
  float pctSat   = (mv - CAL_ZERO_MV) / (satMvNow - CAL_ZERO_MV) * 100.0f;
  if (pctSat < 0) pctSat = 0;
  float doMgL    = pctSat / 100.0f * doSaturation(tempC);

  char line[96];
  snprintf(line, sizeof(line), "%lu,%.2f,%.1f,%.2f,%.1f",
           millis(), tempC, mv, doMgL, pctSat);
  Serial.println(line);

  if (sdReady) {
    File f = SD.open("/do_log.csv", FILE_APPEND);
    if (f) { f.println(line); f.close(); }
  }

  // Operating window: below 0.5 mg/L filaments outcompete floc-formers and the
  // sludge starts to bulk. Above 3 mg/L you are paying for air you do not need.
  if (doMgL < 0.5f)      Serial.println("# WARNING low DO - bulking risk");
  else if (doMgL > 3.0f) Serial.println("# note: over-aerated, throttle the pump");
}

Materiali per questo passaggio:

ESP32 Development BoardESP32 Development Board1 pezzo
Dissolved Oxygen Probe (Analogue)Dissolved Oxygen Probe (Analogue)1 pezzo
DS18B20 Temperature Sensor (Waterproof)DS18B20 Temperature Sensor (Waterproof)1 pezzo
MicroSD Card ModuleMicroSD Card Module1 pezzo
Sodium SulfiteSodium Sulfite100 gram

Strumenti necessari:

Soldering Station (Temperature-Controlled)Soldering Station (Temperature-Controlled)
Digital Multimeter (Lab Grade)Digital Multimeter (Lab Grade)
Dissolved Oxygen MeterDissolved Oxygen Meter
Desktop ComputerDesktop Computer
5

Break it deliberately: cause bulking, then cure it

Bulking is the characteristic failure of activated sludge, it is biological rather than mechanical, and the fastest way to understand it is to cause it on purpose in a system you can afford to lose. What it is: filamentous bacteria growing long threads that bridge between flocs and hold them apart. The sludge stops being a collection of dense compact particles and becomes an open lattice that traps water. It occupies far more volume for the same mass — SVI climbs past 150, then past 250 — the blanket in the settler rises steadily day after day, and finally solids go over the weir and the effluent is worse than the influent. The reactor is still eating the food perfectly well. It simply cannot separate itself from the water any more, and separation is half the process. To cause it, take away the thing floc-formers need and filaments do not. Filaments have a high surface-to-volume ratio, so they are better at scavenging when something is scarce. Any of these three will do it within one to two weeks: throttle the air until DO sits below 0.5 mg/l; drop the feed so F/M falls under about 0.05 with a very long sludge age; or leave out the potassium dihydrogen phosphate so nitrogen and phosphorus become limiting. Pick one, log MLSS and SVI daily, and plot SVI against time. You will see it climb before you see anything wrong in the settler — which is the point of measuring it. Look at a drop under a microscope at 100x if you have one: the threads are unmistakable, running between and through the flocs. Then cure it, and cure it by reversing the specific cause rather than by reaching for chemicals. Restore the DO to 2 mg/l, or restore the nutrient, or increase the feed. Recovery takes one to three sludge ages — a week or two — because you are not killing the filaments, you are letting the floc-formers out-grow them. There is no fast fix, which is exactly why operators watch SVI daily instead of waiting for the settler to tell them. Chlorinating the return sludge is the emergency measure a real works uses when the blanket is about to go over the weir. It damages filaments more than flocs because filaments have more surface exposed. It is a tourniquet, not a treatment: it buys days while you fix whatever caused it, and it harms the culture. Do not reach for it first. Record the whole excursion — cause, daily SVI, cure, days to recover. That record is worth more than the plant working perfectly for a month, because a process you have only ever seen working is a process you cannot yet run.

Materiali per questo passaggio:

Glass Fibre Filter Papers (1.2 micron)Glass Fibre Filter Papers (1.2 micron)50 pezzi
Potassium Dihydrogen PhosphatePotassium Dihydrogen Phosphate100 gram

Strumenti necessari:

Measuring CylinderMeasuring Cylinder
Precision Digital Scale (0.01g)Precision Digital Scale (0.01g)
Compound MicroscopeCompound Microscope
Dissolved Oxygen MeterDissolved Oxygen Meter
Notebook and PencilNotebook and Pencil

Materiali

15

Strumenti richiesti

15

CC0 Pubblico dominio

Questo progetto è rilasciato sotto CC0. Sei libero di copiare, modificare, distribuire e utilizzare quest'opera per qualsiasi scopo, senza chiedere permesso.

Supporta il Maker acquistando prodotti tramite il suo progetto dove guadagna una Commissione Maker stabilita dai venditori, oppure crea una nuova iterazione di questo progetto e includilo come collegamento nel tuo progetto per condividere i ricavi.

Commenti

(0)

Accedi per partecipare alla discussione

Caricamento commenti...