The purpose of the Wireless Communication project (referred to in this report as
the “WC Project”) is to learn the essential skill of wireless communication
between Arduino boards, as well as reinforce time management and collaborative
skills.
The first skill acquired through the completion of the WC Project is the
essential skill of wireless communication between Arduino boards, which had not
been explored to date in the course. These basic wireless communication skills
have a wide range of applications for various more sophisticated projects.
The second skill reinforced through the completion of the WC Project is time
management and collaboration. The WC Project requires a partner to use his
Arduino and wireless module as the transmitter or receiver for communication.
Working on a project of this type with a partner adds a new layer of complexity
in terms of time management and collaboration skills needed in order to
successfully complete the project.
The WC Project is made up of two unique circuits. The first circuit is the
transmitter, which consists of an Arduino connected to a wireless module. The
second circuit acts as the receiver, consisting of an Arduino, wireless module
and an LED Matrix Shield. However, the LED Matrix Shield designed by the
undersigned was not initially the display device. The initial display device was
an LED bar graph, which displayed the characters sent by the transmitter in
their binary form. Students were encouraged to improve the base circuit that
used a bar graph. The undersigned and his partner selected the LED Matrix Shield
to display the letters sent over wireless, as opposed to their binary
representation. With both circuits completed, Arduino code is used to set one
circuit as the transmitter and the other as the receiver, transmitting the data
by entering it into the serial monitor.
First Breadboard Prototype Circuit
The creation of the WC Project is split into 3 steps; building the demo circuit,
adding the bar graph display and serial input, and switching the bar graph to an
LED Matrix Shield display.
The first and simplest step in the construction of the WC Project was to build
the NRF24L01 demo circuit, which used two of the wireless modules to change the
brightness of an LED connected to the receiving Arduino using a potentiometer.
The code to complete this introduction was provided in class and served as a
basis for the code in the actual project.
The second step in the creation of the WC Project was to take user input on the
transmitter circuit and send it to the receiver side for purposes of display on
an LED bar graph. First, a 595 shift register was connected to the receiver
Arduino along with the LED bar graph. Once the bar graph was hooked up to the
receiver Arduino, the code had to be modified for both the transmitter and
receiver. The changes to the transmitter code were quite simple: rather than
collecting the input from a potentiometer using the analogRead() function, the
Serial.read() function was used to collect whatever character the user last
entered into the serial monitor. Since the value being transmitted to the
receiver Arduino is an ASCII character, that ASCII character has its own number
value, therefore making the display of the binary value of the character on the
bar graph very straightforward. The receiver code had to be modified to display
the binary value of the ASCII character on the bar graph using a single call to
the shiftOut() function built into the Arduino IDE used for transmitting data to
shift registers. Since each ASCII character has a number value, the received
character itself was simply passed into the shiftOut() function and shown on the
bar graph.
Breadboard Prototype with LED Matrix Shield Custom PCB
The third and most difficult step in building the WC Project was using an LED
matrix as the output device. Displaying the received character on the LED Matrix
Shield was very difficult at first. The shield was placed atop the Arduino Uno,
which acted as the receiver. The wireless module was then hooked up to the
female headers on the shield. After the addition of the shield, an issue arose
where no data at all could be transmitted between the Arduinos or displayed on
the LED matrix. Following a long period of arduous troubleshooting, it was
discovered that the pins used to drive the shift registers and LED matrix on the
shield are the same pins that were hard wired for the SPI protocol in the radio
library. This issue was circumvented by disconnecting the shield from the
Arduino and connecting different pins on the Arduino to the shift register pins
on the shield. Once the shield was properly set up, the ASCII value for each
letter in the alphabet had to be associated with a corresponding bitmap to be
displayed on the LED Matrix. For in-depth information on bitmaps and displaying
images on an LED matrix, refer to the TBMA project report in this document. The
undersigned’s partner, Jasper Schaffer, provided the bitmaps for every letter in
the alphabet, which were associated to their corresponding ASCII value using a
large switch case. A big switch case to handle the issue of matching ASCII
values with the correct bitmap was not the initial plan. Initially, the plan was
to save the bitmaps in EEPROM, however, each address in EEPROM only has space
for one byte while a bitmap for the LED matrix consists of 8 bytes. The idea was
to store each bitmap in the address that matched its ASCII value, which would
make collecting the correct bitmap for the received character very simple. Since
each bitmap would take up 8 slots in EEPROM, it was impossible to save a bitmap
at the correct address as that address would already be populated with the data
from another bitmap. For instance, the ASCII value of the character “A” is 65.
If the bitmap for “A” was saved at EEPROM address 65, address 66 (which is the
ASCII value for “B”) would already be overwritten with data from “A”. This
convenient model for collecting character bitmaps would only work with bitmaps
that occupy one byte of space. Once the switch case was completed, the matrix
would display the correct bitmap for the ASCII character received.
Overall, the WC Project allowed for the essential skills of wireless
communication, as well as time management and collaboration to be developed.
This project resulted in a final product that can be expanded upon into various
interesting projects in the future.