Skip to the content
PCBKitNew board
2 layers119.5 × 177 mmPOMODORO, the printed circuit board in 3D

A circuit that helps you to studying better than other times!

Size
119.5 × 177 mm
Copper layers
2
Thickness
1.6 mm
Parts
8
Nets
50
Pads
89
Tracks, vias
122, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
30 Apr 2026
Updated
7 Aug 2026

Overview

POMODORO is an open-source printed circuit board by brian4245, from the brian4245/Pomodorox repository on GitHub. It is a 2-layer board of 119.5 × 177 mm with 8 parts on 50 nets, routed with 122 tracks and 0 vias.

It is built around the HC-SR04, TL3301AF160QG and WP7113ID. Its parts include 3 ICs, 2 switches and 1 diode. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

3

README

README.md

Pomodorox

Pomodorox is a project that helps to the high school´s students for studying without distractions

On shape: https://cad.onshape.com/documents/2d539401d5eeff7b5a051a5e/w/acb2298a33fe291c39ed5225/e/8e80be298c9f318b740c5d51?renderMode=0&uiState=6a6d26c64163ef4042c04433

Motivation

Well, I did this project because I realized that many people try to study but many times they don´t study, and it is because we use a laptop or a smarthphone to use a technique for study, but many times these technology products give us many distractions, and the better option to use could be an analogyc product that you can use to study. image alt

Instructions to build it

After all I know you the functions that I used for the circuit, I used the default functions like setup and loop. In adittion I use these functions: void ultrasonico(); this function is to start the work of ultrasonic distance sensor, it starts when you press the red button in the IR remote, and it detects if you are near or far, and if you near the circuit start to works as a pomodoro.

C++
void reset(); //This one is to reset the values of time at the pomodoro (twenty five minutes).
void reloj(); //This another one is to start the clock pomodoro for study time.
void descanso(); //This one is to start the break (five minutes).
void start(); //This one is to start the words that going to give you a gretting.
void plazos(); // With this one you can decides if you wanna continue with the break or with the focus time.

Well, first you need to configure you ultrasonic distance sensor for detects the distance in a well way. I this step I use this code to configure it:

C++
void ultrasonico(){ 
  digitalWrite(trigpin, LOW);  
  delayMicroseconds(2);
  digitalWrite(trigpin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(trigpin, LOW);
  
  duration = pulseIn(echopin, HIGH);
  distance = duration / 58.2;
  Serial.println(distance);
}

I use a function to become the code more versatil. Oh, before it you need to place the pins at setup, like this:

C++
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);

Variables:

C++
int trigpin = 4;
int echopin = 5;

Well after it, now you need to configure the IR remote and the IR sensor to POMODORO going to able to detect you position in yout desktop and If you really study. For it, I use this variable:

C++
int IRD = 3;

Then I placed it at setup to begin the IR sensor:

C++
  IrReceiver.begin(IRD);

Well, after it the third step is to configure the button that you use to start the system of POMODORO, I placed the code in loop:

C++
 int IRcode = 0; 
  if(IrReceiver.decode()){
    IRcode = IrReceiver.decodedIRData.command; 
    Serial.println(IRcode);
    IrReceiver.resume();
  }

Well I declared " int IRcode = 0 " to avoid some mistkae with the control at the moment I don´t need it more, and I place the conditional to start the IR sensor for the code, IRcode is the Data number that the IRremote give us, Then I print it in monitor serial, after it I reset the IRcode, to start all again.

C++
 if (IRcode == 162){
    startcontrol = true; <= this function is to start the greeting at the display
    ultrasonicocontrol = true; <= this one is to start the ultrasonic distance to POMODORO can see if you are near (1m).
    yasepuede = true; <= this one is for the POMODORO can understand that you are ready.
  }

Well, after it you need to configure the code for the chronometer, this step is very crucial because you need it to do working the POMODORO

Well, this code I used for the chronometer in the focus time.

C++
void reloj(){
  lcd.setCursor(0, 0);
  lcd.print("POMODORO");
  lcd.setCursor(0, 1);
  
  if (MINUTOS < 10) lcd.print("0"); 
  lcd.print(MINUTOS);
  lcd.print(":");
  if (SEGUNDOS < 10) lcd.print("0"); 
  lcd.print(SEGUNDOS);
  
  cronometrofocus = true;
}

Within that code I placed the boolean variable "cronometrofocus" it is in charge to do works the chronometer in reality.

C++
  // 5. CRONÓMETROS 
  if (cronometrofocus == true){
    if (millis() - tiempoinicio >= 1000){
      tiempoinicio = millis();
      SEGUNDOS++;
      if (SEGUNDOS == 60){
        SEGUNDOS = 0;
        MINUTOS++;
      }
    }
  }
  
  if (cronometrodespeje == true){
    if (millis() - tiempoiniciodescanso >= 1000){
      tiempoiniciodescanso = millis();
      SEGUNDOSD++;
      if (SEGUNDOSD == 60){
        SEGUNDOSD = 0;
        MINUTOSD++;
      }
    }
  }

Well at that code chronometer that I use, because they have a similar system to work the only thing that changes is the variables. Well and the function for the break works in a similar way like the function for the focus time.

C++
void descanso(){
  lcd.setCursor(9, 0);
  lcd.print("DESCANSO");
  lcd.setCursor(9, 1);
  if (MINUTOSD < 10) lcd.print("0"); 
  lcd.print(MINUTOSD);
  lcd.print(":");
  if (SEGUNDOSD < 10) lcd.print("0"); 
  lcd.print(SEGUNDOSD);
  
  cronometrodespeje = true;
}

The only thing that change is the place where the message is locate.

Well, the another function works when you press the red button:

C++
void start(){
  yasepuede = true;
  ultrasonico(); // Ejecutamos la lectura real del sensor antes de evaluar
  if (distance <= 100 && distance > 0){ 
    digitalWrite(bocina, HIGH);
    lcd.setCursor(0,0);
    lcd.print("EMPEZEMOS");
    delay(1000);
    lcd.clear();
    lcd.print("LET'S MOVE ON");
    delay(1000);
    lcd.clear();
    digitalWrite(bocina, LOW);
  }
}

I placed the boolean variable to controle the if the clock is able to works or maybe no.

Then in the same place I placed the control for the distance, it controls if you are near or far to the POMODORO. Well I named the LED as "bocina". because at first I was thinking use an Piezo, but after thinking well I realized that is better use a LED, because it is less anoying.

Well, I use some boolean variables to control the functions in a better way:

C++
  if (startcontrol == true){
    start();
    startcontrol = false;
  }
  
  if (RELOJ == true){
    reloj();
  } 

  if (descansocontrol == true){
    descanso();
  }

I placed it at loop.

Well, I used this code to control the buttons, it was more useful because it avoid that the code confuse with another delay, because at first I used delay, but it didn´t work in a well way, so is better to use millis to control a multitasking.

C++
  ActualFocus = digitalRead(focus);
  if (ActualFocus == HIGH && AnteriorFocus == LOW && yasepuede == true) {
    reset(); // Reseteamos los tiempos justo al empezar el tramo
    RELOJ = true;
    descansocontrol = false;
    cronometrodespeje = false;
    delay(50); // Pa que no se repita
  }
  AnteriorFocus = ActualFocus;

  ActualDespeje = digitalRead(despeje);
  if (ActualDespeje == HIGH && AnteriorDespeje == LOW && yasepuede == true) {
    reset(); 
    controlplazos = false;
    descansocontrol = true;
    RELOJ = false;
    cronometrofocus = false;
    delay(50); // Pa que no se repita
  }
  AnteriorDespeje = ActualDespeje;

¿How I use it?

It´s very easy to use, the only thing that you do is press the red button in the IR remote control when you are near (1m) to pomodorox. After it, the scren give you some instructions to continue the pomodoro (the button green is for continue studying and the other button green is for the break).

Materials

  • 1 Arduino uno
  • 1 resistor
  • 1 led
  • 2 push buttons
  • 1 Ultrasonic distance sensor
  • 1 IR sensor
  • 1 IR remote

Schematic

image alt

BOM

ITEMPurposePriceSource
Ultrasonic Distance SensorDetect the distance where you are, and it decides if you are ready to studyS/ 8Nanoparuro
LED(red)It is a signal to know if the Ultrasonic sensor is onS/ 1.00Nanoparuro
Arduino UNOIt is to control the circuitS/ 30.00Nanoparuro
I2C LCDIt is to use with fewer pinsS/ 7.00Nanoparuro
LCD 20x4It is crucial to represent the chronometer POMODOROS/ 22.00Electromanía
IR remoteIt is for controlling the start of the pomodoroS/ 10.00Nanoparuro
IR sensorIt is to detect the IR remoteS/ 10.00Nanoparuro
2 Push ButtonsTo activate the POMODORO clockS/ 1.40electromanía
PCBTo conncect all of the componentes in the circuitS/ 120VILLACONTROL

Magazine

image alt

Parts

8
QtyValueFootprintReferences
2TL3301AF160QGTL3301AF160QC_FOOTPRINT:SW_TL3301AF160QGS1, S2
1Arduino_LeonardoModule:Arduino_UNO_R3A1
1CEG003400CEG003400_FOOTPRINT:MODULE_CEG003400U2
1HC-SR04HC_SR04FOOTPRINT:XCVR_HC-SR04U1
1LCD-20X4BLCD_20X4BFOOTPRINT:LCD_LCD-20X4BDS1
1TSOP1838TSOP1838_FOOTPRINT:TSOP18XXU3
1WP7113IDWP7113ID_FOOTPRINT:LED_WP7113IDD2

Questions

How big is the POMODORO PCB?

It measures 119.5 × 177 mm and has 2 copper layers, 1.6 mm thick.

What parts does the POMODORO use?

8 parts, built around the HC-SR04, TL3301AF160QG and WP7113ID. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the POMODORO KiCad files?

From the brian4245/Pomodorox repository on GitHub, at the commit this page was made from: the board is PDBPROJECTSFILES/POMODORO.kicad_pcb and its schematic PDBPROJECTSFILES/POMODORO.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the POMODORO design in my own project?

Its repository states no licence, so its author keeps all rights: ask brian4245 before reusing the design.

Similar boards

  • 4 layers50 × 90 mmTuner pedal, the printed circuit board in 3D

    Tuner pedal

    kulovac/tuner-pedal

    Source for my tuner pedal project from algorithm design to PCB implementation

    108 parts
  • 2 layersKeypad, the printed circuit board in 3D

    Keypad

    peginium/Digital_Design-Bonus_Project

    ESP32 (C) ile Basys3 FPGA (Verilog) için 4x4 Keypad ve KiCad PCB tasarım dosyalarını içerir.

    21 parts
  • 4 layers95 × 75 mmSolPwr, the printed circuit board in 3D

    SolPwr

    Shadowmix11006/SolPwr

    A 3S power bank with a solar panel

    136 parts
  • 2 layers19 × 69.5 mmButtons, the printed circuit board in 3D

    Buttons

    dingjamesj/electronic-trombone

    13 parts
  • 2 layers138 × 77 mmUSB curve tracer, the printed circuit board in 3D

    USB curve tracer

    schuyler4/USB_Curve_Tracer

    This is a curve tracer design.

    91 parts5MIT
  • 2 layers65 × 56 mmRpi 1, the printed circuit board in 3D

    Rpi 1

    vinthewrench/garden-I2C-board

    garden I2C board

    39 parts3MIT
  • 4 layers290 × 215 mmPlacard, the printed circuit board in 3D

    Placard

    tocksin/placard

    PLA computer

    187 parts2AGPL-3.0