The only input ibouPCB needs is something you already have: an Arduino sketch (.ino), or one of the examples. There is no step where you draw a schematic or search for and place parts. This guide walks through the four steps from signing up to receiving your first verification report.
1. Upload a sketch
Create a new project and upload your .ino / .cpp / platformio.ini. The parser reads the following out of the code.
| What it reads from the code | What it infers |
|---|---|
| #define TRIG_PIN 9, const int LED = 13 | Pin assignments (logical name → physical pin) |
| pinMode / digitalWrite / analogRead | Pin direction · signal type (digital / analog / PWM) |
| Wire.beginTransmission(0x27) | I²C in use + slave address |
| SPI.begin(), SS pin in use | SPI in use + CS pin |
| analogWrite(5, x), attachInterrupt(...) | PWM · external-interrupt pin requirements |
| #include <DallasTemperature.h> | Part inference — DS18B20 temperature sensor |
| #include <Adafruit_SSD1306.h> | SSD1306 OLED (I²C or SPI) |
| board = uno (platformio.ini) | Target board |
Some modules cannot be detected from code: PIR sensors, LDRs, plain switches, motors — parts that use only digitalRead / analogRead with no library. Add these from the catalog in the module checklist. One dev board + N modules becomes the project's Design Intent.
2. Review the inference
Right after upload, the screen shows the pin list (logical name, physical pin, direction, and the line of code it came from), detected buses (including I²C addresses), and part candidates (catalog ID, confidence). Low-confidence items are highlighted in yellow, so you only need to check those. The pin list confirmed here becomes the project's Pin Contract — a promise that holds even as you move between levels.
3. Run the L0 simulator
Press ▶ Run and the server compiles with arduino-cli, then the browser executes the resulting binary. Arduino Uno runs on avr8js and Raspberry Pi Pico on rp2040js, both inside the browser; ESP32 runs on Espressif QEMU on the server. Pin states, the serial monitor, and real-time pacing are shown on screen.
- Sensors found in the code are attached automatically as virtual devices — DS18B20 (1-Wire), DHT22, HC-SR04, BME280 / BMP280 / MPU6050 / DS3231 (I²C register responses).
- Passing the simulation is the condition for opening the logic gate, but the browser never sets the gate itself. The server re-derives the expected pin directions from the sketch and checks them against the browser's evidence before recording a pass.
- There are things the simulator cannot catch — power-supply noise, ground bounce, EMI, sensor timing variation, component tolerances. That is why the logic gate is only one of three gates.
4. On to your first board
Press "Make a board" and choose a target: an L2 Shield / HAT that carries your dev board as-is, or L3, where a module such as ESP32-WROOM or Pico is mounted directly on the board. The 8-stage verification then runs (P1 schema → P2 catalog grounding → P3 golden patterns → P4 ERC → P5 Pin Contract → P6 consensus → P7 KiCad DRC → P8 simulation regression), and the results screen shows the three gates separately.
✅ Logic verification passed Behaves as intended in simulation
✅ Electrical verification passed ERC 0 / DRC 0
⚠️ Physical verification pending Confirmation on the real board is still requiredOnce logic and electrical are both green, the Gerber · BOM download opens. Physical verification never turns green automatically. You check it yourself after the board arrives and you have confirmed it in person.
Read next
- The four-level continuum — why the project never moves
- 8-stage verification — what each stage prevents
- Auto-inserted parts — why parts that were not in my code appeared