Responsive Ads Here
LightBlog

Friday, August 17, 2018

led scrolling matrix display

Overview

In this tutorial, we will learn how to make led scrolling and animation display by using the 40*8 led matrix display module and Arduino. Most technologies use the dot matrix to display information such as cell phones, televisions, printers etc. It is commonly used to display time, temperature, notice, news updates and many more on digital billboards. 

You can watch the following video below:-

Component Required

The following component needed for this tutorial:-
  • Arduino Uno
  • 40*8 Bi-color Display 
  • Max 7219 IC 
  • 15k Resistor
  • 47uf Capacitor
  • 0.1uf Capacitor
  • Veroboard
  • Some Connecting Wire

Dot Matrix Display Pinout

The led matrix display pin configuration has been given below:-
Fig: 16 pins single color display pinout 

Fig: 24 pins bi-color display pinout

Max7219 Pinout

The following below figure shows max7219 pinout:-
Fig: Max 7219 Pin configuration

Circuit Schematic

The circuit diagram of the led matrix display and Arduino interfacing below:-
Fig: Arduino and led matrix display interfacing

Circuit description

To make a 40*8 led matrix display, here we have used five single 8*8 led bicolor display and five max7219 drivers. The circuit will be connected to following below:-
Pin_3       Connected to      Row_4
Pin_5       Connected to      Row_6
Pin_6       Connected to      Row_2
Pin_7       Connected to      Row_3
Pin_9       Connected to      Row_7
Pin_10      Connected to      Row_5
Pin_11      Connected to      Row_2
Pin_14      Connected to      Clm_7
Pin_15      Connected to      Clm_2
Pin_16      Connected to      Clm_6
Pin_17      Connected to      Clm_1
Pin_20      Connected to      Clm_5
Pin_21      Connected to      Clm_3
Pin_22      Connected to      Clm_8
Pin_23      Connected to      Clm_4
Arduino 5v will be connected to the Max7219 Vcc (Pin 19) and Arduino GND will be connected to the Max7219 GND (Pin 4 and 8). The 22uf and 47uf capacitor will be connected between 5v and GND. Arduino Digital Pin 10 will be connected to the Max7219 CS (Pin 12). Arduino Digital Pin 13 will be connected to the Max7219 CLK (Pin 13). Arduino Digital Pin 11 will be connected to the first display driver max7219 pin DIN(Pin 1). After that, max7219 driver pin DOUT(pin 24) will be connected to the next max7219 driver DIN (Pin 1) and the same procedure will continue till the last driver. 

Source Code

The led matrix display scrolling message code following below:-
 #include <MD_Parola.h>  
 #include <MD_MAX72xx.h>  
 #include <SPI.h>  
   
 // set to 1 if we are implementing the user interface pot, switch, etc  
 #define USE_UI_CONTROL 0  
   
 #if USE_UI_CONTROL  
 #include <MD_KeySwitch.h>  
 #endif  
   
 // Turn on debug statements to the serial output  
 #define DEBUG 0  
   
 #if DEBUG  
 #define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); }  
 #define PRINTS(x) Serial.print(F(x))  
 #define PRINTX(x) Serial.println(x, HEX)  
 #else  
 #define PRINT(s, x)  
 #define PRINTS(x)  
 #define PRINTX(x)  
 #endif  
   
 // Define the number of devices we have in the chain and the hardware interface  
 // NOTE: These pin numbers will probably not work with your hardware and may  
 // need to be adapted  
 #define MAX_DEVICES 5  
 #define CLK_PIN  13  
 #define DATA_PIN 11  
 #define CS_PIN  10  
   
 // HARDWARE SPI  
 MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);  
 // SOFTWARE SPI  
 //MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);  
    
 // Scrolling parameters  
 #if USE_UI_CONTROL  
 const uint8_t SPEED_IN = A5;  
 const uint8_t DIRECTION_SET = 8; // change the effect  
 const uint8_t INVERT_SET = 9;   // change the invert  
   
 const uint8_t SPEED_DEADBAND = 5;  
 #endif // USE_UI_CONTROL  
   
 uint8_t scrollSpeed = 40;  // default frame delay value  
 textEffect_t scrollEffect = PA_SCROLL_LEFT;  
 textPosition_t scrollAlign = PA_LEFT;  
 uint16_t scrollPause = 0; // in milliseconds  
   
 // Global message buffers shared by Serial and Scrolling functions  
 #define     BUF_SIZE     75  
 char curMessage[BUF_SIZE];  
 char newMessage[BUF_SIZE];  
 bool newMessageAvailable = false;  
   
 #if USE_UI_CONTROL  
   
 MD_KeySwitch uiDirection(DIRECTION_SET);  
 MD_KeySwitch uiInvert(INVERT_SET);  
   
 void doUI(void)  
 {  
  // set the speed if it has changed  
  {  
   int16_t speed = map(analogRead(SPEED_IN), 0, 1023, 10, 150);  
   
   if ((speed >= ((int16_t)P.getSpeed() + SPEED_DEADBAND)) ||  
    (speed <= ((int16_t)P.getSpeed() - SPEED_DEADBAND)))  
   {  
    P.setSpeed(speed);  
    scrollSpeed = speed;  
    PRINT("\nChanged speed to ", P.getSpeed());  
   }  
  }  
   
  if (uiDirection.read() == MD_KeySwitch::KS_PRESS) // SCROLL DIRECTION  
  {  
   PRINTS("\nChanging scroll direction");  
   scrollEffect = (scrollEffect == PA_SCROLL_LEFT ? PA_SCROLL_RIGHT : PA_SCROLL_LEFT);  
   P.setTextEffect(scrollEffect, scrollEffect);  
   P.displayClear();  
   P.displayReset();  
  }  
   
  if (uiInvert.read() == MD_KeySwitch::KS_PRESS) // INVERT MODE  
  {  
   PRINTS("\nChanging invert mode");  
   P.setInvert(!P.getInvert());  
  }  
 }  
 #endif // USE_UI_CONTROL  
   
 void readSerial(void)  
 {  
  static char *cp = newMessage;  
   
  while (Serial.available())  
  {  
   *cp = (char)Serial.read();  
   if ((*cp == '\n') || (cp - newMessage >= BUF_SIZE-2)) // end of message character or full buffer  
   {  
    *cp = '\0'; // end the string  
    // restart the index for next filling spree and flag we have a message waiting  
    cp = newMessage;  
    newMessageAvailable = true;  
   }  
   else // move char pointer to next position  
    cp++;  
  }  
 }  
   
 void setup()  
 {  
  Serial.begin(57600);  
  Serial.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline");  
   
 #if USE_UI_CONTROL  
  uiDirection.begin();  
  uiInvert.begin();  
  pinMode(SPEED_IN, INPUT);  
   
  doUI();  
 #endif // USE_UI_CONTROL  
   
  P.begin();  
  P.displayClear();  
  P.displaySuspend(false);  
   
  P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);  
   
  strcpy(curMessage, "Bionics Robotics and Computation");  
  newMessage[0] = '\0';  
 }  
   
 void loop()  
 {  
 #if USE_UI_CONTROL  
  doUI();  
 #endif // USE_UI_CONTROL  
   
  readSerial();  
  if (P.displayAnimate())  
  {  
   if (newMessageAvailable)  
   {  
    strcpy(curMessage, newMessage);  
    newMessageAvailable = false;  
   }  
   P.displayReset();  
  }  
 }  
The led matrix display animation message code following below:-
 #include <MD_Parola.h>  
 #include <MD_MAX72xx.h>  
 #include <SPI.h>  
   
 // Define the number of devices we have in the chain and the hardware interface  
 // NOTE: These pin numbers will probably not work with your hardware and may  
 // need to be adapted  
 #define MAX_DEVICES 4  
 #define CLK_PIN  13  
 #define DATA_PIN 11  
 #define CS_PIN  10  
   
 // Hardware SPI connection  
 MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);  
 // Arbitrary output pins  
 // MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES)  
   
 #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))  
   
 // Global data  
 typedef struct  
 {  
  textEffect_t effect;  // text effect to display  
  char *    psz;   // text string nul terminated  
  uint16_t   speed;  // speed multiplier of library default  
  uint16_t   pause;  // pause multiplier for library default  
 } sCatalog;  
   
 sCatalog catalog[] =  
 {  
  { PA_PRINT, "PRINT", 1, 1 },  
  { PA_SLICE, "SLICE", 1, 1 },  
  { PA_MESH, "MESH", 20, 1 },  
  { PA_FADE, "FADE", 20, 1 },  
  { PA_WIPE, "WIPE", 5, 1 },  
  { PA_WIPE_CURSOR, "WPE_C", 4, 1 },  
  { PA_OPENING, "OPEN", 3, 1 },  
  { PA_OPENING_CURSOR, "OPN_C", 4, 1 },  
  { PA_CLOSING, "CLOSE", 3, 1 },  
  { PA_CLOSING_CURSOR, "CLS_C", 4, 1 },  
  { PA_RANDOM, "RAND", 3, 1 },  
  { PA_BLINDS, "BLIND", 7, 1 },  
  { PA_DISSOLVE, "DSLVE", 7, 1 },  
  { PA_SCROLL_UP, "SC_U", 5, 1 },  
  { PA_SCROLL_DOWN, "SC_D", 5, 1 },  
  { PA_SCROLL_LEFT, "SC_L", 5, 1 },  
  { PA_SCROLL_RIGHT, "SC_R", 5, 1 },  
  { PA_SCROLL_UP_LEFT, "SC_UL", 7, 1 },  
  { PA_SCROLL_UP_RIGHT, "SC_UR", 7, 1 },  
  { PA_SCROLL_DOWN_LEFT, "SC_DL", 7, 1 },  
  { PA_SCROLL_DOWN_RIGHT, "SC_DR", 7, 1 },  
  { PA_SCAN_HORIZ, "SCANH", 4, 1 },  
  { PA_SCAN_VERT, "SCANV", 3, 1 },  
  { PA_GROW_UP, "GRW_U", 7, 1 },  
  { PA_GROW_DOWN, "GRW_D", 7, 1 },  
 };  
   
   
 void setup(void)  
 {  
  P.begin();  
  P.setInvert(false);  
   
  for (uint8_t i=0; i<ARRAY_SIZE(catalog); i++)  
  {  
   catalog[i].speed *= P.getSpeed();  
   catalog[i].pause *= 500;  
  }  
 }  
   
 void loop(void)  
 {  
  for (uint8_t j=0; j<3; j++)  
  {  
   textPosition_t just;  
   
   switch (j)  
   {  
   case 0: just = PA_LEFT;  break;  
   case 1: just = PA_CENTER; break;  
   case 2: just = PA_RIGHT;  break;  
   }  
   
   for (uint8_t i=0; i<ARRAY_SIZE(catalog); i++)  
   {  
    P.displayText(catalog[i].psz, just, catalog[i].speed, catalog[i].pause, catalog[i].effect, catalog[i].effect);  
   
    while (!P.displayAnimate())  
     ; // animates and returns true when an animation is completed  
   
    delay(catalog[i].pause);  
   }  
  }  
 }  

You can download the library from here:- 
https://github.com/MajicDesigns/MD_MAX72XX
https://github.com/MajicDesigns/MD_Parola

Saturday, August 11, 2018

7 Segment display Multiplexing with 74hc595 Shift Register Using Arduino

Overview
In this Arduino tutorial, we will how to multiplexing seven segment display with a 74hc595 shift register. A single digit display shows 0 to 9 decimal number. Ofen we need to display two, three, four or more digit decimal number, but the problem is lack of I/O (input/output) pins in the MCUs. To solve this problem we need to multiplexing. Here we will also use a 74hc595 shift register.


You can watch the following video below:-


Components Required

The following component needed for this tutorial.
  • Arduino Uno
  • 2 Common anode 7 segment display
  • 74hc595 shift register
  • 220-ohm resistor
  • Breadboard
  • Some jumper wire

Pin Configuration

The following figure shows common anode 7 segment display pinout. It has total 10 pins in which pin 3,8 common pin, pin 5 is DP and remaining pins are a,b,c,d,e,f,g.
Fig: Common anode 7 segment display pinout
Shift register 74hc595 pinout given below diagram:-
Fig: 74hc595 pinout

Circuit Schematic

The following figure shows the 7 segment display multiplexing with 74hc595 shift register using Arduino.
Fig: 7 Segment display multiplexing

Circuit Description

The shift register has 16 pins in which 7 output pins will connect with 7 segment LEDs pin. The shift register Vcc pin 16 and MR pin 10 will connect to +5V.  The ground pin 8 and output enable pin 13 will goes to ground. Next, shift register clock, latch, and data pins are gradually 11,12 and 14 will connect to Arduino digital pin 2, 3 and 4 respectively. Seven segment display common pins will connect to Arduino digital pin 6 and 7 through the 220-ohm series resistor.   

7 segment display ----------------- 74hc595 shift register
Pin_7(Seg_a)    ---------------          Pin_15(Q_A)
Pin_6(Seg_b)    ---------------          Pin_1(Q_A)
Pin_4(Seg_c)     ---------------          Pin_2(Q_A)
Pin_2(Seg_d)     ---------------          Pin_3(Q_A)
Pin_1(Seg_e)     ---------------          Pin_4(Q_A)
Pin_10(Seg_f)     --------------         Pin_5(Q_A)
Pin_9(Seg_g)     --------------          Pin_6(Q_A)


Source Code

This is the source code of multiplexing given below:-

Friday, June 1, 2018

Common Anode and Cathode 7 Segment display interfacing with Arduino

Overview

In this Arduino tutorial, we will learn how to interface common anode and cathode 7 segment display with Arduino. 7 segment display is most common and popular display to show the number in the digital electronics and embedded system. It can be displayed in 0 to 9 decimal number.  They are easy to use and cheap. 7 Segment displays are two types of display called common cathode (common negative) and common anode (common positive).

You can watch the following video below:-



Components Required

The required components list for this tutorial given below:-

  • Arduino Uno
  • 7 Segment Display Common Anode
  • 7 Segment Display Common Cathode
  • 220-ohm resistor
  • Breadboard
  • Some jumper wire
7 Segment Pinout

Seven segment display has total 10 pins in which one is DP pin, two common pins and remaining seven pins are a,b,c,d,f,g. The following below figure shows 7 segment display internal structure and pinout. 
Fig: 7 segments display pinout


Circuit Schematic

The following figure shows Arduino and the common cathode 7 segment display interfacing.
Fig: 7 segments common cathode display interfacing

The following figure shows Arduino and the common anode 7 segment display interfacing.
Fig: 7 segments common anode display interfacing

Circuit Description

Both types of seven segment display internal connection are nearly the same. The difference is the polarity of the LEDs and common terminal. In a common cathode display, we need to connect common pins to ground and others pin to +5V. Alternatively, in a common anode display, we need to connect common pins +5V.


Arduino--------------------Seven Segment
Pin_1     ----------------   Pin_7 (Seg_a)
Pin_2     ----------------   Pin_6 (Seg_b)
Pin_3     ----------------   Pin_4 (Seg_c)
Pin_4     ----------------   Pin_2 (Seg_d)
Pin_5     ----------------   Pin_1 (Seg_e)
 Pin_6     -----------------  Pin_10 (Seg_f)
Pin_7     ----------------   Pin_9 (Seg_g)


Source Code

Common cathode display Arduino source code given below:-



Common anode display Arduino source code given below:-



Alternative common cathode display Arduino source code given below:-



Alternative common anode display Arduino source code given below:-

Thursday, May 31, 2018

One single analog pin keypad control using Arduino

Overview

In this tutorial, we will learn how to interfacing 4*4 keypad with Arduino by a single analog pin. The use of a lot of pins can be reduced by following this procedure. It helps to use rest of pins for another purpose. For this tutorial, we will use a single analog pin to interfacing keypad with Arduino. 

You can watch the following video below:-

Components Required

The required components list for this tutorial given below:-
  • Arduino Uno.
  • 4*4 keypad.
  • Three 4.7k resistors.
  • Four 1k resistors.
  • One 220ohm resistor.
  • LCD display.
  • 10k potentiometer.
  • Some jumper wire.
    Fig:1.1

Keypad Pinout

The following below figure shows 4*4 keypad pinout. 
Fig 2.1: 4*4 Keypad Pinout

Circuit Schematic

The given below schematic is single wire keypad with Arduino:- 

Fig 3.1: One wire keypad with Arduino

Circuit Description

One single analog pin keypad control based on basic voltage divider role. The voltage increase gradually from left to right (Fig: 4.1) in the row and up to down (Fig: 4.1in the column. The voltage is minimum at the first-row first column and the maximum voltage is at point row 4 and column 4. Three 4.7k ohm resistors will gradually connect between row 1 to  2, 2 to 3, 3 to 4. Similarly, three 1k ohm resistors will connect between column 1 to 2, 2 to 3, and 3 to 4 respectively. The remaining one 1k ohm resistor will go to ground from column 1. Next +5V will connect with row 1 and analog input A0 pin from Arduino will connect with column 1. 

Fig: 4.1
The first pin of LCD from left is Gnd pin which will connect with Arduino ground pin. Next LCD pin R/W 5  and cathode pin16 will also go to ground. The second pin of LCD is Vcc which connect with Arduino +5V. The anode pin 16 of LCD operated on 5V, a 220-ohm resistor should be connected in series to this pin. Next comes to the VEE (Pin 3) which is LCD contrast adjustment pin that will be connected a 10k potentiometer to +5V and ground, with its wiper (output) pin. The LCD rs and enable pin 4 and 6 will connect with Arduino digital pin 2 and 3 respectively. Next LCD pin D3 to D7 gradually connect with Arduino digital pin 4 to 7.   


Fig 4.2: One wire keypad with LCD using Arduino

Source Code

One wire keypad with Arduino source code is given below:-

One wire keypad with LCD using Arduino source code is given below:-


You can download the library here: https://github.com/AndrewMascolo/OnewireKeypad

Tuesday, May 29, 2018

Arduino Audio Player with SD Card Module

Overview

In this Arduino tutorial, we will learn how to make an audio player using Arduino and SD card module. Any kind of micro-controller project will look cool and interesting when we adding sounds. We can easily interfacing SD card module and Arduino. Also, we have easily found some Arduino libraries. 

You can watch the following video below:-




Components Required

The required components list for this project given below:-

  • Arduino Uno
  • Micro SD card Adapter
  • Micro SD card
  • Card Reader
  • Speaker with 3.5mm jack output
  • Some Jumper wire

Convert Audio to .wav Format

If you want to play any audio file with Arduino you must need to convert the audio in wav format because Arduino can play through SD card module an audio file in a specific format. Now follow the below procedure to convert an audio file in wav format.
  1. Go to the link: https://audio.online-convert.com/convert-to-wav 
  2. Upload your audio you want to convert to WAV
  3. Set bit resolution: " 8bit ".
  4. Change sampling rate: " 16000Hz ".
  5. Fixed audio channels: " mono ".

Next click on "Convert file" and download the file.

Circuit Schematic

The circuit schematic of audio player given below:-

Circuit Diagram

Circuit Description

SD card module has six pins whose Vcc and GND pin will connect with arduino 5V and GND pin respectively. Next comes to MISO, MOSI and SCK pin which use for SPI communication with arduino. These pin will connect with arduino digital pin 12 , 11 and 13 respectively. Last one CS pin will connect to digital pin 10.
3.5mm Jack 
After that arduino digital pin 9 will connect to sleeve end of the speaker 3.5mm jack. Tip end of the speaker jack will go to the ground pin of the Arduino.

Source Code
The source code given below:-



You can download the library here: https://github.com/TMRh20/TMRpcm

Adbox