Picture of Arduino PID Library - Brightness Control
PID Definitions:

The Proportional/Integral/Derivative controller or PID controller or just PID, is a proccess' control techinics that join Proportional integral and Derivative actions, thus causing the error signal is minimized by proportional action, integral action and cleared by a speed obtained with the preemptive derivative action.
It is based on mathematical modeling of the response of a loop process to be controlled.

In practice the PID controllers are found inside electronic controllers called "single-loop", often with microprocessors, and also through software on programmable logic controllers (PLC) and other control equipment.

In this project, we will simulate a brightness control with Arduino.
The Arduino will be running the PID library which can be found at:


In addition to the PID library for Arduino, will also need the PID Front End for processing, which is a GUI in order to configure the control parameters, such as P, I, D, Set Point and ways of working, etc. .. .; performing a user-friendly interface with Arduino.
You can also download the PID_FrontEnd from the link above.

As  we will work with Arduino and Processing, we need to have the Arduino's IDE and Processing 1.0.1 2.0b8 installed in our computer.
To the Processing software, run properly with PID_FrontEnd, we also need the library "ContorlP5" for Processing installed in our computer.
You can Download the library "ControlP5" directly from the related link below:


For details on PID control processes, I advise you to visiting the PID_V1 Library's creator website.


Also access  the "Control Guru" website for more details about automation and control.


Details about "Control Systems" can be found in the website:


joliveira228 days ago

Excelente explicação sobre PID!

Muito obrigado

MayankR3 months ago

Dear BIGDOG1971,

Thank you for posting this Instructable! I was really confused as to how to start working on PID. This has been really helpful.

I am stuck on How to start "process" and do the rest.

There is one more problem when I include the PID Library, nothing happens. I have installed and the libraries appear in the drop down menu, But the #include does not appear on IDE when I select them. Could you tell me where I could be going wrong?

Waiting for your reply! Thanks!


abdullahcakan3 months ago

what is this error ?


ControlP5 2.0.4 infos, comments, questions at http://www.sojamo.de/libraries/controlP5

java.lang.ArrayIndexOutOfBoundsException: 304

at controlP5.BitFont.getGlyph(Unknown Source)

at processing.core.PGraphics.textCharImpl(PGraphics.java:4681)

at processing.core.PGraphics.textLineImpl(PGraphics.java:4669)

at processing.core.PGraphicsJava2D.textLineImpl(PGraphicsJava2D.java:1787)

at processing.core.PGraphics.textLineAlignImpl(PGraphics.java:4659)

at processing.core.PGraphics.text(PGraphics.java:4356)

at processing.core.PGraphics.text(PGraphics.java:4307)

at processing.core.PApplet.text(PApplet.java:13183)

at controlP5.ControlFont.draw(Unknown Source)

at controlP5.Label.draw(Unknown Source)

at controlP5.Label$SinglelineLabel.draw(Unknown Source)

at controlP5.Label.draw(Unknown Source)

at controlP5.Textfield.draw(Unknown Source)

at controlP5.ControllerGroup.drawControllers(Unknown Source)

at controlP5.ControllerGroup.draw(Unknown Source)

at controlP5.ControlWindow.draw(Unknown Source)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at processing.core.PApplet$RegisteredMethods.handle(PApplet.java:1236)

at processing.core.PApplet$RegisteredMethods.handle(PApplet.java:1229)

at processing.core.PApplet.handleMethods(PApplet.java:1423)

at processing.core.PApplet.handleDraw(PApplet.java:2401)

at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240)

at processing.core.PApplet.run(PApplet.java:2256)

at java.lang.Thread.run(Unknown Source)

MariaB1 made it!10 months ago

Thank's for your reply .

it was my operating system problem.

Now i have compiled the program and it is working well.

Exactly i want to use this example to control a dc motor (rpm) and control P , I and D using variable resistors. i have measured rpm using INTERRUPT AND TIMER 1

I have connected variable resistors as name of P , I and D and measured these in variables . Now i want to put these variable value in Kp, Ki and Kd.

what is maximum value of P , I and D which i should round of for KP,KI,KD.

for example p= 1 to 100 , i= 0.00 to .90 d =

i am stuck on this stage . i need your advice.

MariaB110 months ago

hi ..

i want to make a pid controller . i have downloaded and installed library .
when i open any example and want to write into my arduino it gives this error .

"pid does not name a type"
can anybody please suggest me any idea to solve this issue.
i will be very than full .

BIGDOG1971 (author)  MariaB110 months ago
Hi Maria,

This kind of issue is due to libraries installation failure.
To solve the problem, proceed as shown below.

Remove all project libraries from the "libraries" folder.
To install the library(ies), follow the steps below:
1 - take sure that the Arduino's IDE is closed;
2 - unzip the library(ies) in the "libraries" folder of the Arduino's IDE;
3 - open the .ino file and compile it..

90% of people with this kind of problem, have solved it by following the procedure above.
If not, please re-install the arduino's IDE.

I hope I have helped you.

Feel free to send me your questions.

Best Regards

Marcelo Moraes
Skype: marcelo.moraes

I tried adjusting P, I, and D constants but there was a small oscillation. It seemed the disturbance is too large.

susurluk81 year ago

hi its great application. can you send to me transfer function ? aykutdurgut@gmail.com

BIGDOG1971 (author)  susurluk81 year ago
I do not have the transfer function for the system

Use this website to learn how to getting the transfer function from a real system.

sylD1 year ago
BIGDOG1971 (author)  sylD1 year ago
Send me an email requesting the code and libraries and I will share the files with you.

ealkhateeb1 year ago
hi ,

good job bro , but
how I can download Processing v2.0 ? or where ?

its website don't work !!
BIGDOG1971 (author)  ealkhateeb1 year ago
Hi Ealkhateeb
You will find processing to downloading on: https://processing.org/download/

Ensure to download the correctly version of "processing" compatible with your Windows version and compatible with your hardware 32/64 bits.

hi!! you made a great job.i would like to ask you which is the model of the led,sensor system.

i want to find the Differential Equation of the system and find the transfer function.

thank you