You may have seen a lot of typical digital notice boards where one has to manually change the message using a keyboard or another tool in order to update the displayed information. But it is simple to turn these notice boards into wireless notice boards; one such method is to use Bluetooth. The information on the LED panel can be wirelessly updated through our smartphone by adding Bluetooth. Here, an Arduino Uno is coupled with an HC05 Bluetooth module, which receives data given by the smartphone application. The information will then be processed by Arduino and shown on the LED board.
MATERIALS USED
-
32*16 P10 LED module
-
Arduino UNO
-
HC05 Bluetooth module
-
12V 2A AC/DC Power Adapter
-
16 Pin FRC connector
-
Connecting wires
P10 LED Matrix Display Module
Large advertisements are frequently displayed on P10, a 32*16 LED matrix module. Each P10 LED Module unit contains 512 high-intensity LEDs, divided into 32 LEDs per row and 16 LEDs per column.
A larger display can be created by multiplexing P10 LED modules. A P10 module has an input port and an output port. An output port is used to link the module to another LED P10 module, and an input port is used to receive data from the Arduino side.
P10 Module Pinout
Pin Description of P10 LED Module:
- Enable: This pin is used to control the brightness of the LED panel, by giving a PWM pulse to it.
- A, B: These are called multiplex select pins. They take digital input to select any multiplex rows.
Shift clock (CLK), Store clock (SCLK) and Data: These are the normal shift register control pins. Here a shift register 74HC595 is used.
Circuit Diagram
The following provides a detailed circuit schematic for the P10 module with Arduino and Bluetooth module:
Programming the Arduino for P10 LED Display Board
First, download and install the DMD.h and TimerOne.h library from the given links and then include all the required libraries in your code.
#include <SPI.h> #include <DMD.h> #include <TimerOne.h> #include "SystemFont5x7.h" #include "Arial_black_16.h" //Fire up the DMD library as dmd #define DISPLAYS_ACROSS 2 #define DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN); //number max of characters in your message #define max_char 100 char message[max_char]; // stores you message //char mess[max_char]; char r_char; // reads each character byte index = 0; // defines the position into your array int i; char greeting[] = "EAGLE ELECTRONICS ONLINE"; void ScanDMD() { dmd.scanDisplayBySPI(); } void setup(void) { //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display Timer1.initialize( 5000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5s) and you can see flicker. Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI() //clear/init the DMD pixels held in RAM dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on) Serial.begin(9600); strcpy(message,greeting); } void loop(void) { //check if serial is avaible an before reading a new message delete's the old message if(Serial.available()) { for(i=0; i<99; i++){ message[i] = '\0'; } //resests the index index=0; } //while is reading the message while(Serial.available() > 0){ //the message can have up to 100 characters dmd.clearScreen( true ); if(index < (max_char-1)) { r_char = Serial.read(); // Reads a character message[index] = r_char; // Stores the character in message array index++; // Increment position // message[index] = '\0'; // Delete the last position } } //prepares the display to print our message dmd.selectFont(Arial_Black_16); //displays the message dmd.drawMarquee(message ,max_char,(32*DISPLAYS_ACROSS)-1 ,0); long start=millis(); long timer=start; boolean ret=false; while(!ret) { if ((timer+30) < millis()) { ret=dmd.stepMarquee(-1,0); timer=millis(); } } }