ARTE
BELLEZZA E BENESSERE
MESTIERE
CULTURA E STORIA
DIVERTIMENTO
AMBIENTE
CIBO E BEVANDE
INGEGNERIA INVERSA
SCIENZE
SPORT
TECNOLOGIA
INDOSSABILI
The Charge-Coupled Device
Pixel

Creato da

Pixel

29. agosto 2026FI
0
0
0
0
0

The Charge-Coupled Device

Boyle and Smith, 1969, sketched in an hour on a blackboard; Nobel Prize 2009. A CCD pixel is the DRAM cell read the opposite way: DRAM holds charge and refreshes it in place, a CCD SHIFTS each packet down the row to one amplifier, a bucket brigade for electrons. Because it collects charge on a fixed grid instead of scanning a beam, it kills the vidicon's two diseases — distortion and lag — at a stroke. The price: move charge thousands of times and lose none.
Avanzato
6 hours

Istruzioni

1

The pixel is the DRAM cell, read by moving the charge

The pixel is the DRAM cell. A gate over silicon makes a potential well; in DRAM you fill it to mean a 1, in a CCD light fills it with electrons. The difference is the whole invention: DRAM reads each cell in place (a wire and an amplifier per column); a CCD MOVES the charge, tipping each packet into the next well like water between buckets, to a single amplifier at the end. Almost no wires, but every packet is transferred thousands of times.

Strumenti necessari:

Notebook and PencilNotebook and Pencil
2

The bucket brigade: how one image becomes one signal

Follow one photon to the output. Expose (each well fills like a bucket in the rain); clock the whole image DOWN row by row into a readout register; clock that register SIDEWAYS into one amplifier that weighs each packet in turn. One amplifier reads the entire image, so there is no pixel-to-pixel gain variation. The vidicon's distortion (no beam) and lag (wells fully cleared) are simply gone; the new failure modes are transfer loss and dark current.

Flow

Loading...

Strumenti necessari:

Desktop ComputerDesktop Computer
3

Why astronomers freeze their sensors: dark current and transfer efficiency

Loading Jupyter Notebook...

Strumenti necessari:

Desktop ComputerDesktop Computer
4

Measure real dark current against temperature

You cannot clock a bare CCD, but you can measure the physics that rules it — dark current rising exponentially with temperature — on any cheap photodiode. Read a reverse-biased diode's leakage in the dark at several temperatures; the slope of log(current) vs 1/T gives the doubling temperature, ~6-10 C, the same number that forces observatories to pour liquid nitrogen over their cameras.
ccd_darkcurrent.inocpp
// Dark current versus temperature — the physics behind why CCDs are cooled.
//
// A reverse-biased photodiode's leakage IS a dark current. Read it through a large load
// while logging temperature, warm the sensor gently in the dark, and the slope of
// log(current) vs 1/T gives the activation energy and the doubling temperature — the same
// characterisation an astronomy lab runs on a real CCD.
//
// Wiring
//   Photodiode: cathode -> 3V3, anode -> GPIO34 and -> 1M -> GND  (reverse bias; leakage
//               develops a small voltage across the 1M load)
//   DS18B20 temperature sensor -> GPIO4 with a 4k7 pull-up to 3V3
//   ALL inside a light-tight box. Dark current means DARK.

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

const int PIN_DIODE = 34;      // ADC1
const int PIN_TEMP  = 4;
const float R_LOAD  = 1.0e6;   // ohm
const float VCC     = 3.3;

OneWire oneWire(PIN_TEMP);
DallasTemperature tempSensor(&oneWire);

float readDarkVolts() {
  const int N = 512;           // heavy averaging: the signal is tiny and the ADC is noisy
  uint32_t acc = 0;
  for (int i = 0; i < N; i++) { acc += analogRead(PIN_DIODE); delay(2); }
  return (float)acc / N * (VCC / 4095.0);
}

void setup() {
  Serial.begin(115200);
  delay(300);
  analogReadResolution(12);
  analogSetPinAttenuation(PIN_DIODE, ADC_11db);
  tempSensor.begin();

  Serial.println("# Dark current vs temperature");
  Serial.println("# Keep the box CLOSED. Warm the sensor slowly (a hand, a warm room).");
  Serial.println("# temp_C\tdark_V\tdark_current_nA\tinvT_1perK\tln_current");
}

void loop() {
  tempSensor.requestTemperatures();
  float T = tempSensor.getTempCByIndex(0);
  if (T < -100) { Serial.println("# temp sensor not found"); delay(1000); return; }

  float v = readDarkVolts();
  float i_nA = (v / R_LOAD) * 1e9;          // I = V / R, in nanoamps
  float invT = 1.0 / (T + 273.15);
  float lnI  = (i_nA > 0) ? log(i_nA) : 0;

  Serial.print(T, 2);    Serial.print('\t');
  Serial.print(v, 4);    Serial.print('\t');
  Serial.print(i_nA, 3); Serial.print('\t');
  Serial.print(invT, 6); Serial.print('\t');
  Serial.println(lnI, 3);

  // Log once every few seconds as the temperature drifts. Fit ln(I) vs 1/T offline:
  //   slope = -Ea/k ;  doubling temp dT = T^2 * k * ln(2) / Ea.
  delay(3000);
}

Materiali per questo passaggio:

Photodiode (BPW34)Photodiode (BPW34)1 pezzo
Resistor Kit (1/4W, E12 Series)Resistor Kit (1/4W, E12 Series)1 kit

Strumenti necessari:

ESP32 Development BoardESP32 Development Board
DS18B20 Temperature Sensor (Waterproof)DS18B20 Temperature Sensor (Waterproof)
BreadboardBreadboard

Materiali

2

Strumenti richiesti

5

Blueprint correlati

Questi blueprint condividono conoscenze — tecniche, materiali o principi

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