WIRELESS NOTICE BOARD USING BLUETOOTH AND ARDUINO

0
377

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

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();
}
}
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here