LED Dimmer Using Arduino 16X2 LCD and Potentiometer

Another  project LED Dimmer using multi LCD Arduino Nano shield, vertical trimmer potentiometer can used to adjust the LED brightness, LCD shows the bar-graph reading of LED dimmer.  MOSFET helps to drive LED up to 5A constant. Circuit works with 12V DC. Project has many parts , unused parts can be used omit if not required.

Arduino Pins

  • LCD RS pin to digital pin 12
  • LCD Enable pin to digital pin 11
  • LCD D4 pin to digital pin 5
  • LCD D5 pin to digital pin 4
  • LCD D6 pin to digital pin 3
  • LCD D7 pin to digital pin 2
  • LCD R/W pin to ground
  • Arduino Analog Pin A0 Potentiometer
  • Arduino Digital PWM D9 LED Driver

Arduino Code

LED Dimmer with 16X2 LCD Bar-Graph Display, Circuit, PCB Layout ,
and code available at our website www.twovolt.com, Modified code,
original author of the code is Rui Santos, http://randomnerdtutorials.com/


// include the library code
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int potPin = A0; // Potentiometer
int ledPin = 9; // Driver FET PWM
int potValue = 0; // Pot Value
int brightness = 0; // Pot Value to PWM
int pBari = 0; // Bar-Graph
int i = 0; // foor loop

//progress bar character for brightness
byte pBar[8] = {

void setup() {
// setup our led as an OUTPUT
pinMode(ledPin, OUTPUT);
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD
lcd.print(” LED Brightness”);
//Create the progress bar character
lcd.createChar(0, pBar);

void loop() {
// clears the LCD screen
// Print a message to the LCD
lcd.print(” LED Dimmer”);
//set the cursor to line number 2
// read the value from the potentiometer
potValue = analogRead(potPin);
// turns the potValue into a brightness for the LED
brightness=map(potValue, 0, 1024, 0, 255);
//lights up the LED according to the bightness
analogWrite(ledPin, brightness);
// turns the brighness into a percentage for the bar
pBari=map(brightness, 0, 255, 0, 17);
//prints the progress bar
for (i=0; i<pBari; i++)
lcd.setCursor(i, 1);
// delays 750 ms