Level: Basic — Use a 74HC04 inverter and an LDR to automatically switch on an LED when ambient light drops.
Objective and use case
You will build an automatic light control circuit that detects darkness using a Light Dependent Resistor (LDR) and activates an LED using a 74HC04 digital inverter.
- Why it is useful:
- Automating streetlights to turn on only at night to save energy.
- Activating emergency pathway lighting during power failures or darkness.
- Controlling garden solar lights automatically.
- Adjusting screen brightness on mobile devices based on ambient light.
- Expected outcome:
- When the LDR is exposed to bright light, the LED remains OFF.
- When the LDR is covered (darkness), the LED turns ON.
- The voltage at the logic gate input transitions from Logic High (5V) to Logic Low (0V) as it gets darker.
- Target audience and level: Students and hobbyists familiar with basic breadboarding.
Materials
V1: 5 V DC supply, function: Main power source.R1: LDR (GL5528 or similar), function: Light sensor (Variable resistor).R2: 10 kΩ potentiometer, function: Sensitivity calibration (Pull-down).U1: 74HC04, function: Hex Inverter (NOT gate).R3: 330 Ω resistor, function: LED current limiting.D1: Red LED, function: Visual output indicator.
Pin-out of the IC used
Chip: 74HC04 (Hex Inverter)
| Pin | Name | Logic function | Connection in this case |
|---|---|---|---|
| 14 | VCC | Power (+) | Connect to VCC (5V) |
| 7 | GND | Ground (-) | Connect to 0 (GND) |
| 1 | 1A | Input | Connect to sensor node VSENSE |
| 2 | 1Y | Output | Connect to LED node VOUT |
(Note: Pins 3, 5, 9, 11, 13 are unused inputs and should ideally be connected to GND in permanent circuits to prevent noise, though not strictly required for this quick test.)
Wiring guide
Use the following explicit node connections to build the circuit on your breadboard:
- Power Supply:
V1positive terminal connects to nodeVCC.V1negative terminal connects to node0(GND).
- Sensor Stage (Voltage Divider):
R1(LDR) connects betweenVCCand nodeVSENSE.R2(Potentiometer) connects between nodeVSENSEand0(GND).- Note: Adjust
R2so the voltage atVSENSEvaries when light changes.
- Logic Stage (Inverter):
U1Pin 14 connects toVCC.U1Pin 7 connects to0.U1Pin 1 (Input) connects to nodeVSENSE.U1Pin 2 (Output) connects to nodeVOUT.
- Output Stage:
R3connects between nodeVOUTand nodeLED_ANODE.D1connects between nodeLED_ANODE(Anode/Long leg) and0(Cathode/Short leg).
Conceptual block diagram

Schematic
[ INPUT / SENSOR STAGE ] [ LOGIC STAGE ] [ OUTPUT STAGE ]
[ VCC ] --> [ R1: LDR (Sensor) ] --+
|
v
[ VSENSE ] --(Pin 1)--> [ U1: 74HC04 ] --(Pin 2)--> [ R3: 330 Ohm ] --> [ D1: LED ] --> GND
^ [ NOT Gate ]
|
[ GND ] --> [ R2: Pot (Calib) ] ---+
Truth table
The 74HC04 inverts the input signal. We configure the sensors so that «Bright» creates a HIGH input.
| Ambient Condition | LDR Resistance | Voltage at VSENSE (Input) |
Logic Input | Logic Output (VOUT) |
LED State |
|---|---|---|---|---|---|
| Bright | Low | High (> 2.5V) | 1 | 0 (GND) | OFF |
| Dark | High | Low (< 1.5V) | 0 | 1 (5V) | ON |
Measurements and tests
- Calibration: Expose the LDR to normal room light. Adjust potentiometer
R2until the LED turns OFF. - Voltage Check (Bright): Measure voltage between
VSENSEand GND. It should be close to 5V (Logic 1). The output atVOUTshould be near 0V. - Activation: Cover the LDR with your hand to simulate darkness.
- Voltage Check (Dark): Measure
VSENSEagain. It should drop towards 0V (Logic 0). The outputVOUTshould jump to approx. 5V, turning the LED ON.
SPICE netlist and simulation
Reference SPICE Netlist (ngspice) — excerptFull SPICE netlist (ngspice)
* Practical case: Automatic darkness sensor
* --- Models ---
* Generic Red LED Model
.model DLED D (IS=1e-22 N=1.5 RS=5 BV=5 IBV=10u CJO=10p)
* --- Subcircuits ---
* 74HC04 Hex Inverter Model (Behavioral)
* Pins: 1=Input, 2=Output, 7=GND, 14=VCC
* Maps to subckt args: In Out GND VCC
.subckt 74HC04 In Out GND VCC
* Robust Sigmoid Transfer Function for Inverter
* Threshold is VCC/2. Output swings between GND and VCC.
* Formula: Vout = VCC * (1 / (1 + exp(50 * (V(In) - V(VCC)/2))))
B_INV Out GND V = V(VCC) * (1 / (1 + exp(50 * (V(In) - V(VCC)/2))))
.ends
* --- Main Circuit Components ---
* 1. Power Supply
* ... (truncated in public view) ...
Copy this content into a .cir file and run with ngspice.
* Practical case: Automatic darkness sensor
* --- Models ---
* Generic Red LED Model
.model DLED D (IS=1e-22 N=1.5 RS=5 BV=5 IBV=10u CJO=10p)
* --- Subcircuits ---
* 74HC04 Hex Inverter Model (Behavioral)
* Pins: 1=Input, 2=Output, 7=GND, 14=VCC
* Maps to subckt args: In Out GND VCC
.subckt 74HC04 In Out GND VCC
* Robust Sigmoid Transfer Function for Inverter
* Threshold is VCC/2. Output swings between GND and VCC.
* Formula: Vout = VCC * (1 / (1 + exp(50 * (V(In) - V(VCC)/2))))
B_INV Out GND V = V(VCC) * (1 / (1 + exp(50 * (V(In) - V(VCC)/2))))
.ends
* --- Main Circuit Components ---
* 1. Power Supply
* V1: 5V DC supply
V1 VCC 0 DC 5
* 2. Sensor Stage (Voltage Divider)
* R1: LDR (Light Dependent Resistor)
* Implementation: A dummy R1 is placed to satisfy the BOM.
* A parallel behavioral source (B_LDR) implements the dynamic resistance change.
R1 VCC VSENSE 100Meg
B_LDR VCC VSENSE I = V(VCC, VSENSE) / V(RES_CTRL)
* R2: 10k Potentiometer (Sensitivity Calibration)
R2 VSENSE 0 10k
* Dynamic Stimulus for LDR (Simulates Light Conditions)
* Generates a control voltage representing Ohms.
* Pulse sweeps from 1k (Light) to 100k (Dark).
* Logic: Light(1k) -> VSENSE High -> LED OFF. Dark(100k) -> VSENSE Low -> LED ON.
V_LDR_CTRL RES_CTRL 0 PULSE(1k 100k 0 200u 200u 400u 2ms)
* 3. Logic Stage
* U1: 74HC04 Hex Inverter
* Connections: Pin 1 (In)=VSENSE, Pin 2 (Out)=VOUT, Pin 7=0, Pin 14=VCC
XU1 VSENSE VOUT 0 VCC 74HC04
* 4. Output Stage
* R3: LED Current Limiting Resistor (330 Ohm)
R3 VOUT LED_ANODE 330
* D1: Red LED
D1 LED_ANODE 0 DLED
* --- Analysis Directives ---
* Transient analysis to capture the Light/Dark transition
.tran 10u 2ms
* Print specific node voltages for validation
.print tran V(VSENSE) V(VOUT) V(LED_ANODE)
* Compute DC operating point
.op
.end
Simulation Results (Transient Analysis)
Show raw data table (224 rows)
Index time v(vsense) v(vout) v(led_anode) 0 0.000000e+00 4.545459e+00 1.916016e-44 6.555013e-37 1 1.000000e-07 4.525005e+00 3.875543e-44 2.124754e-38 2 2.000000e-07 4.504821e+00 1.070470e-43 -1.98700e-38 3 4.000000e-07 4.464726e+00 4.391831e-43 -3.30922e-39 4 8.000000e-07 4.386087e+00 5.351931e-42 4.963938e-40 5 1.600000e-06 4.240174e+00 7.789996e-38 7.726704e-38 6 3.200000e-06 3.973321e+00 1.292803e-32 1.287493e-32 7 6.400000e-06 3.529123e+00 -6.61237e-21 -6.59876e-21 8 1.280000e-05 2.884261e+00 2.263832e-08 2.262430e-08 9 1.905731e-05 2.447108e+00 4.668386e+00 1.823995e+00 10 2.344117e-05 2.212214e+00 4.999997e+00 1.833723e+00 11 2.751655e-05 2.030989e+00 5.000000e+00 1.833029e+00 12 3.266976e-05 1.840361e+00 5.000000e+00 1.833116e+00 13 4.266976e-05 1.556825e+00 5.000000e+00 1.833028e+00 14 5.266976e-05 1.349010e+00 5.000000e+00 1.833116e+00 15 6.266976e-05 1.190157e+00 5.000000e+00 1.833028e+00 16 7.266976e-05 1.064784e+00 5.000000e+00 1.833116e+00 17 8.266976e-05 9.633175e-01 5.000000e+00 1.833028e+00 18 9.266976e-05 8.795141e-01 5.000000e+00 1.833116e+00 19 1.026698e-04 8.091310e-01 5.000000e+00 1.833028e+00 20 1.126698e-04 7.491835e-01 5.000000e+00 1.833116e+00 21 1.226698e-04 6.975110e-01 5.000000e+00 1.833028e+00 22 1.326698e-04 6.525106e-01 5.000000e+00 1.833116e+00 23 1.426698e-04 6.129684e-01 5.000000e+00 1.833028e+00 ... (200 more rows) ...
Common mistakes and how to avoid them
- Swapping LDR and Potentiometer: If you swap
R1andR2, the logic inverts: the light will turn ON when it is bright and OFF when it is dark. Ensure the LDR is connected to VCC and the Potentiometer to GND. - LED inserted backwards: If
D1does not light up whenVOUTis high, check the polarity. The longer leg (anode) must face the resistorR3. - Sensitivity too low: If the LED never turns off,
R2might be set to too high a resistance, keeping voltage atVSENSEalways high. Turn the knob to lower the resistance.
Troubleshooting
- LED is always ON:
- Cause: Potentiometer resistance is too high or LDR is broken (open circuit).
- Fix: Decrease
R2value by turning the knob. Check LDR connections.
- LED is always OFF:
- Cause: Potentiometer resistance is too low (shorting input to ground) or
U1is not powered. - Fix: Verify Pin 14 has 5V. Increase
R2resistance slightly.
- Cause: Potentiometer resistance is too low (shorting input to ground) or
- LED flickers:
- Cause: The light level is right at the switching threshold of the 74HC04.
- Fix: Adjust
R2slightly to move away from the threshold or shade the LDR more decisively.
Possible improvements and extensions
- Add Hysteresis: Replace the 74HC04 with a 74HC14 (Schmidt Trigger Inverter). This prevents flickering when the light transitions slowly (dusk/dawn).
- High Power Load: Connect the output pin to a transistor (like a 2N2222) and a relay module to switch a 110V/220V desk lamp instead of a small LED.
More Practical Cases on Prometeo.blog
Find this product and/or books on this topic on Amazon
As an Amazon Associate, I earn from qualifying purchases. If you buy through this link, you help keep this project running.




