Brief Explanation
This project aims to help me not have to memorize the lyrics of songs I want to play on the guitar. When powered through 4 AA batteries, the LCD Screen will scroll the lyrics to the song "Light Behind Your Eyes" by My Chemical Romance. The first button will pause the lyrics, and the second button will restart the lyrics from the beginning.
Final Photos
This is the image of the final product, with the revised album cover cut and leaned on the main book device.
Here is the side of the lyric book where the book folds when needed to.
Here is the wiring of the final product. The batteries are not in place to make sure the device is off to preserve batteries.
Final image of the casing around the screen, to rid of the holes.
Working Video
In this video, I start the lyric book and the lyrics start to be displayed. Once it switches over, I hit pause and then restart it back to the beginning.
This was an image where I was figuring out how to wire up the breadboard, and this was where I decided to cut the OLED Screen
This was where I was chipping away at the base of the box to have the LCD screen wiring close nicely and allow the book to be closed.
This was the first lazer cut that I made for the prototype.
Image of me watching the machine cut the final lazer cut I used for the final project.
Quick Note on Progress Photos
One thing that I think was not very well captured in these progress photos is that in my first and second print of the casing, I did not include holes for the buttons and LCD Screens. This obviously caused issues, but my initial idea was to use an X-acto knife to fix this; but the 3mm wood was way too thick for this. Thus, I drilled two holes for the buttons and cut a rectangle out on my final print for the LCD Screen. The LCD screen was mounted as well to the front to be flush, as the exact rectangle cut was not perfect.
Overall, I am pretty happy with how my Lyrical Booklet 2 came out. While it did not live up to my prototyping and my overall goals, I think it came out really cool for the time I had to complete it. Throughout this project, I realized how annoying laser-cutting boxes can be and how they may not all perfectly slot together if you go in and change anything minor. I made three housing prototypes overall, one too small, one too big, and finally one in between (with holes cut out for stuff. I think finding the exact dimensions to cut pieces out of the box proved to be quite difficult overall, and I made do by having the LCD Screen not perfectly flush with the system.
For the feedback, the sentiments shared by Perry where he said “I do think more functionally would make this perfect as it does 1 song at a time right now” I generally agree with as an early modification to the ideath of the original idea was to have the song data be implemented with an RFID card, but I found with the time constraints that this would be difficult to implement. Additionally, Jessica’s comment, “I think that the album cover being added into the device would be cool”, was something I did consider early on, as the RFID card would be attached to the album cover. initi
If I did a future iteration of this project, there would be a few tweaks I would implement. First, I would try to make the code in a way where, if an RFID tag or some way, small amounts of data could be added to the arduino would be attached to an album. This would then also possibly make the albums able to play many more songs as I could implement another button on the book that could switch between songs stored on the album currently slotted in. Moreover, the second major tweak would be related to the rfid concept, where the album cover art itself would act as a kickstand for the book, so it could be angled more easily, which would make it much easier to use. I am not sure if I will make another iteration of this, as my workload is currently super high, but if I do I would make these changes (alongside giving the piece a paint job).
//Andy Mann's Code for Lyric Book
//This code displays the data to the LCD Screen, which is the lyrics to MCR's Light Behind Your
//Eyes song. If one button is pressed, then it pauses the lyrics. If the other button is
//pressed, then the lyrics restart from the beginning
//*Google Gemini AI was used in the construction of this code
//pin mapping:
//Arduino pin | role | description
//___________________________________________________________________
//A4 output connected to the LCD display module for Serial Data
//A5 output connected to the LCD display module for Serial Clock
//2 input pauses the LCD Screen lyrics
//3 input restarts the LCD Screen lyrics from the beginning
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int btnPause = 2;
const int btnRestart = 3;
// --- FULL LYRIC DATA ---
const char* songLyrics[] = {
"So long to all of", "my friends...",
"Every one of them", "met a tragic end",
"With every", "passing day",
"I'd be lying if I", "didn't say",
"That I miss them", "all tonight",
"And if they only", "knew what I'd say",
"If I could be", "with you tonight",
"I would sing", "you to sleep",
"Never let them take", "the light behind",
"your eyes...", " ",
"One day, I'll", "lose this fight",
"As we fade", "in the dark",
"Just remember you", "will always burn",
"as bright...", " ",
"Be strong and", "hold my hand",
"Time, it comes for", "us, you'll see",
"We'll say", "goodbye today",
"I'm sorry how it", "ends this way",
"If you promise", "not to cry",
"Then I'll tell you", "just what I'd say",
"The light behind", "your eyes...",
"Sometimes, we must", "grow stronger",
"And you can't be", "stronger when",
"I am gone...", " ",
"When I'm here,", "no longer",
"You must be", "stronger and...",
"Just remember you", "will always burn",
"as bright.", " "
};
const int totalLines = 60;
int currentLine = 0;
bool isPaused = true;
unsigned long lastScrollTime = 0;
int pageDelay = 7000;
void setup() {
pinMode(btnPause, INPUT_PULLUP);
pinMode(btnRestart, INPUT_PULLUP);
lcd.init();
lcd.backlight();
updateScreens();
}
void loop() {
if (digitalRead(btnPause) == LOW) {
isPaused = !isPaused;
lastScrollTime = millis();
updateScreens();
delay(400);
}
if (digitalRead(btnRestart) == LOW) {
currentLine = 0;
isPaused = true;
updateScreens();
delay(500);
}
if (!isPaused) {
if (millis() - lastScrollTime > pageDelay) {
if (currentLine + 2 < totalLines) {
currentLine += 2;
lastScrollTime = millis();
updateScreens();
} else {
isPaused = true;
updateScreens();
}
}
}
}
void updateScreens() {
lcd.clear();
// Line 1 of the Page
lcd.setCursor(0, 0);
lcd.print(songLyrics[currentLine]);
// Line 2 of the Page
if (currentLine + 1 < totalLines) {
lcd.setCursor(0, 1);
lcd.print(songLyrics[currentLine + 1]);
}
lcd.setCursor(0, 3);
lcd.print(isPaused ? "|| PAUSED" : ">> PLAYING");
}