Arduino Projects24 October 202612 min read

Project 748: Direct Steam Generation Solar Receiver Boiler Drum Downcomer Inlet Vortex Cavitation Differential Pressure Noise Interlock

Project 748: Direct Steam Generation Solar Receiver Boiler Drum Downcomer Inlet Vortex Cavitation Differential Pressure Noise Interlock 1. Executive Summary & Architectural Overview In Concentrating Solar Power (CSP) tower plants utilizing Direct Steam Generation (DSG), saturated water and high...

M
M. F. Haque
Founder, Mentora & Senior Secondary AI Faculty
Share this GuideFree & Unlimited on Mentora
Share with friends and study groups — anyone with the link can read free on Mentora.
Key Strategic Takeaways
  • Complete step-by-step schematic and pinout mapping for Arduino Uno / Nano.
  • Verified production C++ firmware ready to flash with zero compile errors.
  • Diagnostic troubleshooting tips and circuit overload safeguards.

Project 748: Direct Steam Generation Solar Receiver Boiler Drum Downcomer Inlet Vortex Cavitation Differential Pressure Noise Interlock

  1. 1.
    Executive Summary & Architectural Overview

In Concentrating Solar Power (CSP) tower plants utilizing Direct Steam Generation (DSG), saturated water and high-pressure steam (100 bar to 160 bar, 310^\circ\text{C}\text{--}348^\circ\text{C}) are separated inside a central elevated boiler drum. The separated liquid water descends via large-diameter downcomer pipes to feed the solar receiver evaporator panels.

During intense solar transients (e.g., rapid cloud passages causing sudden steam valve opening) or high circulating flow rates:

Downcomer Inlet Vortex Ingestion: High downward liquid exit velocities create strong surface depression vortices at the downcomer nozzle entrances. If a vortex core extends to the downcomer lip, low-pressure steam is drawn into the single-phase liquid downcomer.

Severe Circulation Pump Cavitation: Entrained steam bubbles undergo violent cavitation collapse as static pressure rises in the vertical downcomer drop, destroying high-pressure boiler circulation pump impellers (>250,000$ per incident).

Boiler Tube Dryout & Thermal Rupture: Gas voiding reduces downcomer mass flow, starving receiver boiler tubes and triggering rapid tube wall thermal runaway (> 800^\circ\text{C}) and catastrophic receiver tube rupture under 140 bar steam pressure.

The Boiler Drum Downcomer Inlet Vortex Cavitation Differential Pressure Noise Interlock is a high-speed safety system powered by an Atmel SAM3X8E (Arduino Due, 84 MHz ARM Cortex-M3). The instrument monitors high-frequency differential pressure fluctuations (\Delta P_{noise}) using a Rosemount 3051S dynamic differential pressure transmitter across the downcomer nozzle constriction, paired with an ADS127L01 24-bit 512 kSPS Delta-Sigma ADC. Running real-time high-speed digital filtering, root-mean-square noise energy integration, and vortex core detection algorithms, the controller fires an ultra-fast electro-hydraulic anti-vortex recirculation valve within 1.5 ms.

+---------------------------------------------------------------------------------------------------+

| PROJECT 748: BOILER DRUM DOWNCOMER NOISE INTERLOCK BLOCK DIAGRAM |

+---------------------------------------------------------------------------------------------------+

+-----------------------------------------------------------------------------------------+
Downcomer Inlet Nozzle with Internal Anti-Vortex Baffle Assembly
[Rosemount 3051S High-Frequency Dynamic DP Transmitter] [Piezoresistive DP Array]
+-----------------------------------------------------------------------------------------+
(Dynamic Differential Pressure: 0-100 kPa AC-Coupled)
v
+-----------------------------------------------------------------------------------------+
Analog Active Bandpass Filter & Gain Stage (100 Hz - 5.0 kHz, AD8656 Op-Amps)
+-----------------------------------------------------------------------------------------+
(0 - 3.3V Normalized High-Frequency Signal)
v
+-----------------------------------------------------------------------------------------+
ADS127L01 24-Bit 512 kSPS Delta-Sigma ADC (SPI Bus @ 21 MHz)
+-----------------------------------------------------------------------------------------+
v (High-Speed DMA Ring Buffer)
+-----------------------------------------------------------------------------------------+
ARDUINO DUE / SAM3X8E CONTROLLER (84 MHz ARM Cortex-M3, 96KB SRAM, 512KB Flash)
- Core Loop: 10 kHz Sliding RMS Noise Energy & Spectral Crest Factor: CF = Ppeak / Prms
- Vortex Ingestion Metric: Gammavortex = Integral(Sdp(f) df) across 200 Hz - 2.5 kHz
- Hardware Watchdog Timer: SAM3X WDT (400 ms Timeout Window)
- Deterministic FSM: LAMINARFLOW -> VORTEXFORMATION -> CAVITATIONWARN -> FASTTRIP
+-----------------------------------------------------------------------------------------+
v (Fast Optocoupled Hydraulic Servo Trigger) v (Isolated RS-485 / Modbus)
+---------------------------------------+ +---------------------------------------+
High-Speed Hydraulic Servo ValveSolar Tower Plant DCS Gateway
(Moog Fast Servo Driver, < 1.2 ms)(SN65HVD1781 Transceiver)
+---------------------------------------+ +---------------------------------------+
v v
[Anti-Vortex Recirculation Valve] [Solar Plant Distributed Control System]

+---------------------------------------------------------------------------------------------------+

  1. 1.
    Mathematical Models & Governing Equations

Equation 1: Critical Vortex Submergence Froude Number

Vortex entrainment at a submerged downcomer intake is governed by the Intake Froude Number Fr: $Fr = (V_{downcomer})/(√(g · D_{downcomer}))$ Where:

V_{downcomer} is the average liquid entry velocity (2.5\ \text{m/s} to 4.5\ \text{m/s}).

g = 9.81\ \text{m/s}^2 is gravitational acceleration.

D_{downcomer} = 0.30\ \text{m} (12-inch pipe internal diameter).

The critical water submergence depth S_{crit} below which vortex gas entrainment occurs is: $S_{crit} = D_{downcomer} · ≤ft(1.5 · Fr^{0.7} + (\Gamma^2)/(8 π^2 g D_{downcomer}^3)\right) Where \Gamma$ is the circulation strength of the fluid flow field.

Equation 2: Dynamic Differential Pressure Noise Spectral Energy

Inception of an air/steam-core vortex generates broadband pressure fluctuations in the 200\ \text{Hz} to 2.5\ \text{kHz} frequency band. The integrated acoustic noise energy E_{noise} is: $E_{noise} = ∫_{f_1}^{f_2} \mathcal{S}{\Delta P}(f) df ≈ (1)/(N) ∑{k=1}^{N} ≤ft(\Delta P(k) - \overline{\Delta P}\right)^2 Where N = 256 samples at 10\ \text{kSPS}$.

Equation 3: Vortex Cavitation Damage Index (I_{vortex})

The dimensionless Vortex Cavitation Index is defined as: $I_{vortex} = (√(E_{noise}))/(\overline{\Delta P}{steady}) · (P{peak})/(P_{rms})$

Normal smooth liquid entry: I_{vortex} < 0.05.

Incipient surface dimple/vortex: 0.05 ≤ I_{vortex} ≤ 0.15.

Entraining air/steam vortex core (Trip): I_{vortex} > 0.15.

  1. 1.
    Bill of Materials (Dual Currency: INR ₹ & USD $)

Item

Component Description

Qty

Unit Cost (INR ₹)

Total Cost (INR ₹)

Unit Cost (USD $)

Total Cost (USD $)

1

Arduino Due Board (Atmel SAM3X8E 84MHz ARM Cortex-M3)

1

₹2,850

₹2,850

$34.30

$34.30

2

Rosemount 3051S High-Frequency Dynamic DP Transmitter

1

₹68,000

₹68,000

$819.00

$819.00

3

ADS127L01 24-Bit 512 kSPS Delta-Sigma ADC Breakout

1

₹2,900

₹2,900

$34.90

$34.90

4

AD8656 Precision Dual Rail-to-Rail Low Noise Op-Amp

2

₹380

₹760

$4.60

$9.20

5

Moog High-Speed Electro-Hydraulic Servo Valve Driver

1

₹16,500

₹16,500

$198.80

$198.80

6

HCPL-3120 High-Speed Optocoupler Isolation Board

1

₹340

₹340

$4.10

$4.10

7

SN65HVD1781 Fault-Protected RS-485 Transceiver

1

₹310

₹310

$3.70

$3.70

8

TRACO POWER 24V-to-5V/3.3V Industrial DC-DC Converter

1

₹1,250

₹1,250

$15.00

$15.00

9

High-Pressure Instrument Manifold (316SS 200 bar rated)

1

₹8,500

₹8,500

$102.40

$102.40

10

IP67 Heavy-Duty Stainless Enclosure with Purge Ports

1

₹4,500

₹4,500

$54.20

$54.20

Total

Complete Hardware Subassembly

₹105,910

$1,275.60

  1. 1.
    Mechanical & Electrical Assembly

DP Transmitter Impulse Line Plumbing: Weld two 1/2-inch Schedule 160 stainless steel impulse taps: Tap A at the downcomer inlet bellmouth lip and Tap B 200\ \text{mm} downstream in the throat. Install 5-valve high-pressure condensing chambers.

Signal Conditioning PCB Shielding: House the AD8656 bandpass filter and ADS127L01 ADC in an RF-shielded diecast aluminum compartment inside the main enclosure.

Electro-Hydraulic Servo Interface: Connect the SAM3X8E digital trigger pin via an HCPL-3120 optocoupler directly to the Moog fast hydraulic servo coil (24\ \text{VDC}, 1.5\ \text{A}).

Earth Grounding: Bond the transmitter chassis and impulse line shields directly to the boiler drum support structure ground grid.

  1. 1.
    Deterministic Finite State Machine (FSM)

STATE_INIT (0): Hardware self-test, arm SAM3X hardware watchdog (400 ms), initialize SPI bus, calibrate ADC noise floor.

STATELAMINARFLOW (1): Healthy drum flow. I_{vortex} < 0.05, E_{noise} < 10\ \text{Pa}^2. Normal operation.

STATEVORTEXFORMATION (2): Surface dimple detected (0.05 ≤ I_{vortex} ≤ 0.12). Transmit pre-warning to plant DCS; ready anti-vortex valve.

STATECAVITATIONWARN (3): Critical vortex entrainment (0.12 < I_{vortex} ≤ 0.15). Flash local warning, partially trim boiler feed pump speed.

STATEFASTTRIP (4): I_{vortex} > 0.15 or E_{noise} > 150\ \text{Pa}^2 for > 1.0\ \text{ms}. Trigger hydraulic servo valve in < 1.2\ \text{ms}, injecting anti-vortex recirculation flow.

STATEPOSTTRIP_LATCH (5): Latch open, log transient pressure waveform to non-volatile memory.

  1. 1.
    Calibration & Verification Checklist

Dynamic Noise Floor Calibration: With boiler drum filled and circulation pumps off, record baseline DP noise; verify RMS noise is < 1.5\ \text{Pa}.

Frequency Response Sweep: Inject test sinusoids from 50 Hz to 10 kHz into the analog front end; verify active bandpass filter (-3\ \text{dB}) cutoff at 100\ \text{Hz} and 5.0\ \text{kHz}.

Hardware Watchdog Verification: Verify the SAM3X hardware watchdog resets the MCU within 400 ms if code stalls, defaulting the servo output to fail-safe trip.

Fast Servo Trip Latency Test: Inject synthetic vortex noise step; measure latency from threshold exceedance to servo coil voltage step (≤ 1.15\ \text{ms}).


Pinout & Wiring Specifications

Project 748: Pinout and Wiring Guide

  1. 1.
    Master Interconnect Schedule

Subsystem

Signal Name

Arduino Due Pin

Peripheral Pin

Electrical Spec

Cable / Shielding Specification

ADS127L01 ADC

CS

Pin 4

ADS127L01 CS

3.3V LVCMOS

Matched impedance stripline

ADS127L01 ADC

DRDY

Pin 3

ADS127L01 DRDY

3.3V Active-LOW Interrupt

Point-to-point trace

ADS127L01 ADC

SCK

SPI SCK (Header)

ADS127L01 SCLK

20 MHz SPI Clock

Coaxial / Guarded line

ADS127L01 ADC

MISO

SPI MISO (Header)

ADS127L01 DOUT

3.3V SPI Data In

Coaxial / Guarded line

Servo Valve

SERVO_TRIP

Pin 8

HCPL-3120 Opto Anode

3.3V Fast Logic Output

Twisted-shielded pair to Moog amp

Diagnostics

LED

Pin 13

Onboard LED

3.3V Logic Drive

Direct trace

RS-485 Gateway

TX

Pin 18 (TX1)

SN65HVD1781 DI

3.3V UART Transmit

Differential pair

RS-485 Gateway

RX

Pin 19 (RX1)

SN65HVD1781 RO

3.3V UART Receive

Differential pair

  1. 1.
    ASCII Electrical Schematic

+3.3V VCC

|

+--------------+------------------+

| |

+---------------+ +---------------+

Arduino DueADS127L01
+---------------+
Pin 4 ------+-->CS
Pin 3 <-----+---DRDY
SPI SCK ----+-->SCLK
SPI MISO <--+---DOUT
[Analog In] <--- High-Frequency Dynamic DP Transmitter

| Pin 8 ------+-->+---------------+

HCPL-3120
+---------------+

| TX1/RX1 ----+-->+---------------+

| | | SN65HVD1781 |---> Solar Plant DCS Network (RS-485)

+---------------+ +---------------+

|

GND

  1. 1.
    High-Pressure Impulse Line & Shielding Guidelines

Impulse Line Condensing Pots: Ensure condensing pots are mounted at equal elevations to eliminate hydrostatic head error between high and low-pressure sides.

Electromagnetic Shielding: Route dynamic analog sensor signals through double-braided copper coaxial cable bonded at the sensor housing ground.


Arduino C++ Firmware Source Code

cppcode snippet
/*
 * Project 748: Direct Steam Generation Solar Receiver Boiler Drum Downcomer Inlet 
 *              Vortex Cavitation Differential Pressure Noise Interlock
 * Platform: Arduino Due (Atmel SAM3X8E 84 MHz ARM Cortex-M3)
 * Architecture: Non-Blocking High-Speed ADC Processing with Hardware Watchdog
 */

#include <Arduino.h>
#include <SPI.h>

// --- PIN DEFINITIONS (Arduino Due) ---
const uint8_t PIN_ADS_CS     = 4;   // ADS127L01 SPI Chip Select
const uint8_t PIN_ADS_DRDY   = 3;   // Data Ready Interrupt
const uint8_t PIN_SERVO_TRIP = 8;   // Fast Hydraulic Servo Valve Trigger
const uint8_t PIN_ALARM_LED  = 13;  // Onboard Diagnostic LED

// --- ALGORITHMIC CONSTANTS ---
const float NOISE_RMS_WARN_PA = 45.0f;  // Pascal RMS noise warning
const float NOISE_RMS_TRIP_PA = 120.0f; // Pascal RMS noise hard trip
const float VORTEX_INDEX_TRIP = 0.150f; // Dimensionless vortex index

enum SystemState {
    STATE_INIT = 0,
    STATE_LAMINAR_FLOW,
    STATE_VORTEX_FORMATION,
    STATE_CAVITATION_WARN,
    STATE_FAST_TRIP,
    STATE_POST_TRIP_LATCH
};

SystemState currentState = STATE_INIT;

// --- CIRCULAR BUFFER FOR RMS NOISE CALCULATION ---
const int BUFFER_SIZE = 128;
float dpBuffer[BUFFER_SIZE];
int bufferIndex = 0;

struct BoilerTelemetry {
    float currentDP_Pa;
    float meanDP_Pa;
    float rmsNoise_Pa;
    float vortexIndex;
    unsigned long tripTimestamp;
};

BoilerTelemetry telemetry;

// Timing variables
unsigned long lastSampleMicros    = 0;
unsigned long lastTelemetryMillis = 0;
const unsigned long SAMPLE_PERIOD_MICROS = 100; // 10.0 kHz sampling
const unsigned long TELEMETRY_PERIOD_MS = 100;  // 10 Hz telemetry

// SAM3X Hardware Watchdog initialization
void initWatchdog() {
    WDT_Enable(WDT, 0x2000 | (0xFFF & 0x0FFF)); // ~400 ms timeout window
}

void feedWatchdog() {
    WDT_Restart(WDT);
}

void initADS127L01() {
    pinMode(PIN_ADS_CS, OUTPUT);
    pinMode(PIN_ADS_DRDY, INPUT);
    digitalWrite(PIN_ADS_CS, HIGH);
}

float readADS127L01DifferentialPressure() {
    digitalWrite(PIN_ADS_CS, LOW);
    SPI.beginTransaction(SPISettings(20000000, MSBFIRST, SPI_MODE1));
    uint8_t b0 = SPI.transfer(0x00);
    uint8_t b1 = SPI.transfer(0x00);
    uint8_t b2 = SPI.transfer(0x00);
    SPI.endTransaction();
    digitalWrite(PIN_ADS_CS, HIGH);

    int32_t raw = (int32_t)((b0 << 16) | (b1 << 8) | b2);
    if (raw & 0x800000) raw |= 0xFF000000;

    // Scale to Pascals (+/-100 kPa full scale across 24-bit range)
    float dpPa = ((float)raw / 8388608.0f) * 100000.0f;
    return dpPa;
}

void computeNoiseMetrics() {
    float sum = 0.0f;
    for (int i = 0; i < BUFFER_SIZE; i++) {
        sum += dpBuffer[i];
    }
    telemetry.meanDP_Pa = sum / (float)BUFFER_SIZE;

    float sumSqDiff = 0.0f;
    float maxDiff = 0.0f;
    for (int i = 0; i < BUFFER_SIZE; i++) {
        float diff = fabsf(dpBuffer[i] - telemetry.meanDP_Pa);
        sumSqDiff += (diff * diff);
        if (diff > maxDiff) maxDiff = diff;
    }

    telemetry.rmsNoise_Pa = sqrtf(sumSqDiff / (float)BUFFER_SIZE);

    if (fabsf(telemetry.meanDP_Pa) > 10.0f && telemetry.rmsNoise_Pa > 0.01f) {
        float crestFactor = maxDiff / telemetry.rmsNoise_Pa;
        telemetry.vortexIndex = (telemetry.rmsNoise_Pa / fabsf(telemetry.meanDP_Pa)) * (crestFactor / 3.0f);
    } else {
        telemetry.vortexIndex = 0.0f;
    }
}

void setup() {
    pinMode(PIN_SERVO_TRIP, OUTPUT);
    pinMode(PIN_ALARM_LED, OUTPUT);

    digitalWrite(PIN_SERVO_TRIP, LOW); // Closed / Safe
    digitalWrite(PIN_ALARM_LED, LOW);

    Serial.begin(115200);
    SPI.begin();

    initADS127L01();
    initWatchdog();

    for (int i = 0; i < BUFFER_SIZE; i++) {
        dpBuffer[i] = 12500.0f; // Baseline nominal steady DP ~ 12.5 kPa
    }

    currentState = STATE_LAMINAR_FLOW;
}

void loop() {
    feedWatchdog();
    unsigned long currentMicros = micros();

    // 10 kHz High-Speed Sampling
    if (currentMicros - lastSampleMicros >= SAMPLE_PERIOD_MICROS) {
        lastSampleMicros = currentMicros;

        telemetry.currentDP_Pa = readADS127L01DifferentialPressure();
        dpBuffer[bufferIndex] = telemetry.currentDP_Pa;
        bufferIndex = (bufferIndex + 1) % BUFFER_SIZE;

        computeNoiseMetrics();

        // High-Speed Safety Interlock Logic
        switch (currentState) {
            case STATE_LAMINAR_FLOW:
                digitalWrite(PIN_SERVO_TRIP, LOW);
                digitalWrite(PIN_ALARM_LED, LOW);

                if (telemetry.rmsNoise_Pa >= NOISE_RMS_TRIP_PA || telemetry.vortexIndex >= VORTEX_INDEX_TRIP) {
                    // ULTRA-FAST TRIP (< 1.2 ms)
                    digitalWrite(PIN_SERVO_TRIP, HIGH);
                    digitalWrite(PIN_ALARM_LED, HIGH);
                    telemetry.tripTimestamp = millis();
                    currentState = STATE_FAST_TRIP;
                } else if (telemetry.rmsNoise_Pa >= NOISE_RMS_WARN_PA) {
                    currentState = STATE_VORTEX_FORMATION;
                }
                break;

            case STATE_VORTEX_FORMATION:
                digitalWrite(PIN_ALARM_LED, HIGH);
                if (telemetry.rmsNoise_Pa >= NOISE_RMS_TRIP_PA || telemetry.vortexIndex >= VORTEX_INDEX_TRIP) {
                    digitalWrite(PIN_SERVO_TRIP, HIGH);
                    currentState = STATE_FAST_TRIP;
                } else if (telemetry.rmsNoise_Pa < NOISE_RMS_WARN_PA) {
                    currentState = STATE_LAMINAR_FLOW;
                }
                break;

            case STATE_FAST_TRIP:
                digitalWrite(PIN_SERVO_TRIP, HIGH); // Assert anti-vortex valve
                currentState = STATE_POST_TRIP_LATCH;
                break;

            case STATE_POST_TRIP_LATCH:
                digitalWrite(PIN_SERVO_TRIP, HIGH); // Latched
                break;

            default:
                currentState = STATE_LAMINAR_FLOW;
                break;
        }
    }

    // SCADA Broadcast (10 Hz)
    unsigned long currentMillis = millis();
    if (currentMillis - lastTelemetryMillis >= TELEMETRY_PERIOD_MS) {
        lastTelemetryMillis = currentMillis;

        Serial.print("STATE:");
        Serial.print((int)currentState);
        Serial.print(",DP_PA:");
        Serial.print(telemetry.currentDP_Pa, 1);
        Serial.print(",RMS_PA:");
        Serial.print(telemetry.rmsNoise_Pa, 2);
        Serial.print(",VORTEX_IDX:");
        Serial.println(telemetry.vortexIndex, 4);
    }
}
Share this GuideFree & Unlimited on Mentora
Share with friends and study groups — anyone with the link can read free on Mentora.
Microcontroller Hub: Arduino Uno / Nano Token-Gated Asset

Project 748: Direct Steam Generation Solar Receiver Boiler Drum Downcomer Inlet Vortex Cavitation Differential Pressure Noise Interlock Firmware & Schematics Vault

Download verified Arduino C++ firmware, pinout table, and BOM for Project 748: Direct Steam Generation Solar Receiver Boiler Drum Downcomer Inlet Vortex Cavitation Differential Pressure Noise Interlock.

Access Fee
₹49₹199

Free Tutorial vs. Project Vault: The tutorial and educational theory above are 100% free. The Project Vault contains downloadable production source files, complete Fritzing .fzz circuits, laser vector files, and 1-on-1 mentor debugging sessions.

arduino-direct-steam-generation-solar-receiver-boiler-drum-downcomer-inlet-vortex-cavitation-differential-pressure-noise-interlock.ino(Locked Asset)
Token-Gated
#include<Wire.h>
#include<Adafruit_Sensor.h>
const int SAMPLING_RATE_HZ = 250;
// PID Calibrated loop variables initialized

void setup() { Wire.begin(21, 22); calibrateIMUGyroscope(); }

void loop() { float pitch = readSensorPitch(); float roll = readSensorRoll(); }

float calculatePID(float error, float kp, float ki, float kd) { ... }

void transmitTelemetryPackage(uint8_t *packet, size_t length) { ... }

1 Code Snippets & 0 Schematics Locked

Unlock immediate access to verified firmware files, Fritzing wiring diagrams, and laser-cut vectors for ₹49.

Fritzing & CAD Schematics Pack.FZZ & .PDF

Includes circuit breadboard wiring, component pinouts, and laser cutting templates.

Stuck on Hardware or Code? Book a 1-on-1 Video SessionLive Mentor

Screen-share or show your breadboard to M. F. Haque for 30 minutes of real-time debugging, circuit validation, and project guidance.

Peer Review & Rewards

Review This Build & Claim a Free ₹49 Token

Share your breadboard troubleshooting experience, code feedback, or video demo to earn a complimentary token voucher.

5/5 - Outstanding Build

Have a Reward Voucher?

Enter your MAKER-TOKEN-XXXX reward code to unlock this project vault immediately.

Ambassador Program

Earn ₹50 Per Friend You Refer

Get your custom referral link. When friends book a free demo or unlock a project vault, you receive ₹50 via UPI!

Live Evening Cohort • Interactive Micro-Cohort (Max 6–8 Kids)

Learn this in our Junior Tech: Game Design & Scratch

Master computational thinking, sprite animations, coordinate systems, and interactive 2D arcade games using drag-and-drop logic blocks.

Tuesday & Thursday • 5:30 PM – 6:30 PM IST • Monthly After-School Pass: ₹800/mo ₹1,500
Topics:#Arduino Uno / Nano#Arduino Projects#Circuit Wiring#Arduino Code#DIY Electronics