The PCB is based on an Atmega 328P. It is connected to various components in order to use the I2C, SPI and programmable pins of the microcontroller. This PCB is a 2-layer board. The aim of this board is to choose a microcontroller available on the market and adapt it to our project needs.

Here’s the list of components connected to the Atmega328p microcontroller:

The software used for the design is Altium Designer. We designed the board and had it produced by PCB Way in bare PCB, then soldered the components ourselves.

You can find our project on github.

Electronic diagram

Here is the electronic diagram of the Arduino board and the components connected to it:

The Arduino board

The main element of the PCB is the Atmega 328P. Manufactured by Atmel, it is part of the AVR family, offering a powerful combination of performance and energy efficiency. With its 8-bit RISC architecture, clock frequency of up to 20 MHz and 32 KB flash memory, it is ideally suited to a variety of applications.

Thanks to its features, such as timers, UARTs and communication interfaces, the ATmega328P is a good choice of microcontroller.

To program the Atmega328P, we connected it to a micro-USB and an Atmega 16U2 microcontroller. This allows our board to be programmed directly from Arduino ide via usb.

We’ve added a power LED for the Atmega328P to indicate when the microcontroller is powered up:

There’s a power connector containing +5V and +3.3V for powering external components:

We’ve added a push-button on the reset so that you can manually restart the program on the Atmega328P in the event of a problem:

The components

We’ve connected a pushbutton to our board. This is connected to a GPIO in order to retrieve its value. We’ve also added a pull-down resistor to ensure the low state when the button is not pressed:

We’ve added a LED that can be controlled from the board:

A photoresistor is connected to the analog part of the Atmega328P microcontroller. This measures external brightness and transmits it as a voltage to the board:

The potentiometer is used to vary the voltage across the analog input:

The clock module, or RTC, allows you to keep the exact time in your project even when it’s powered down. The one used in our DS1388 project:

The 7-segment display is connected to a decoder which acts as a link between the Atmega 328P and the display. With this display, numbers from 0 to 9 can be displayed. It’s a common-cathode display, so it’s connected to ground:


We’ve added an accelerometer to our I2C board. This is used to indicate when the part is in motion and what its movement is.

The accelerometer operates on three axes X, Y and Z:

We’ve added a connector for the i2C to connect external components to the board and make it more scalable:

A Mosfet transistor enables our board to drive a component with a very high voltage (220V, for example). It is used in conjunction with an external power supply to power the high-voltage component. It can drive up to two components at the same time:

The bipolar transistor is used to control an external component with current. It is used with an external current source. It’s an NPN transistor that can control just one component:

We’ve added an ethernet port so that our board can communicate via Modbus TCP/IP. For this purpose, the ethernet port is connected via an SPI link:

PCB Design

This is the top layer of the PCB:

This is the second layer, the one on the bottom layer of the PCB:

Here is the result of the 3D PCB: