Build a School Bag That Actually Talks to You
This bag knows what's inside it. Tag each book with a tiny RFID sticker, and the bag checks your school timetable, tells you what you forgot, quizzes you on the ride to school, and hands out points for finishing homework.
What This Bag Can Do
Every book gets a small RFID sticker — the same kind of tag used in library cards and bus passes. A reader hidden in the bag's front pocket scans for tags each time you pack up. A tiny screen and speaker do the rest of the work, so you never have to guess what's missing.
- Remembers your timetable and checks it against what's actually in the bag.
- Speaks up — "You forgot your Math book!" — before you're out the door.
- Quizzes you with three quick questions while you're on the way to school.
- Rewards points for packing everything and finishing your homework, tracked day to day.
Parts You'll Need
Every part here is beginner-friendly and easy to find online or at a local electronics store.
Arduino Nano
The brain of the bag — small enough to tuck into a front pocket.
₹450MFRC522 RFID Reader
Detects the RFID tag on each book when it passes near the reader.
₹150RFID Tag Stickers (x8)
One sticker per book, stuck flat on the inside cover.
₹2000.96" OLED Display
Shows which books are packed and today's quiz score.
₹250DFPlayer Mini + Speaker
Plays back short pre-recorded voice clips from an SD card.
₹3503 Push Buttons
Used to answer quiz questions and confirm homework is done.
₹403.7V Li-ion Cell + Boost Module
Powers the whole bag for a full school day on one charge.
₹300Jumper Wires & Micro SD Card
Wiring plus an 8GB card to store the voice clips.
₹150Build It Step by Step
Work on a table, not inside the bag — you can test everything on the bench first, then fit it in once it all works.
Gather the parts and plan the pocket
Lay everything out and decide where the screen and speaker will sit in the bag's front pocket, and where the RFID reader will go so books can be tapped against it easily.
Wire the RFID reader
Connect the MFRC522 reader to the Nano's SPI pins using the wiring table below. Double-check the reader is powered from 3.3V, not 5V — it can be damaged by 5V.
Connect the OLED screen
The OLED uses I2C, so it only needs four wires: power, ground, and two data lines (SDA and SCL) shared with the rest of the circuit.
Add the voice box
Wire the DFPlayer Mini and speaker so the bag can actually talk. Load the SD card with short voice clips named 001.mp3, 002.mp3 and so on, one per book and one per quiz prompt.
Wire the quiz buttons
Three push buttons act as answer A, answer B and answer C during the daily quiz, and double as a "homework done" confirm button.
Upload the code
Install the required libraries in the Arduino IDE, plug in the Nano over USB, and upload the sketch from the code section below.
Tag the books and test
Stick one RFID tag inside the cover of each book, tell the code which tag ID belongs to which book, and test it on a real morning before the bag goes into daily use.
| Module | Module Pin | Arduino Nano Pin |
|---|---|---|
| MFRC522 RFID Reader | SDA (SS) | D10 |
| SCK | D13 | |
| MOSI | D11 | |
| MISO | D12 | |
| RST | D9 | |
| 3.3V / GND | 3V3 / GND | |
| OLED Display | SDA | A4 |
| SCL | A5 | |
| DFPlayer Mini | RX (via 1kΩ resistor) | D3 |
| TX | D2 | |
| Button A / B / C | One leg each | D4 / D5 / D6 |
| Battery + Boost | 5V out | VIN / GND |
Arduino Code
Install the MFRC522, Adafruit_SSD1306, Adafruit_GFX and DFRobotDFPlayerMini libraries first, through the Arduino IDE's Library Manager.
// ===== TALKING SCHOOL BAG ===== // Detects books by RFID, reminds you what's missing, // runs a quick daily quiz, and tracks homework points. #include <SPI.h> #include <MFRC522.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <SoftwareSerial.h> #include <DFRobotDFPlayerMini.h> #include <EEPROM.h> // ---- Pins ---- #define RFID_SS 10 #define RFID_RST 9 #define BTN_A 4 #define BTN_B 5 #define BTN_C 6 MFRC522 rfid(RFID_SS, RFID_RST); Adafruit_SSD1306 screen(128, 64, &Wire, -1); SoftwareSerial mp3Serial(2, 3); // RX, TX DFRobotDFPlayerMini mp3; // ---- Today's books (change this list to match your timetable) ---- const int BOOK_COUNT = 4; String bookNames[BOOK_COUNT] = {"Math", "Science", "English", "Art"}; String bookTagIDs[BOOK_COUNT] = {"A1B2C3D4", "E5F6A7B8", "C9D0E1F2", "11223344"}; int bookVoiceTrack[BOOK_COUNT] = {1, 2, 3, 4}; // matches 001.mp3 etc. bool bookPacked[BOOK_COUNT]; int homeworkPoints = 0; void setup() { Serial.begin(9600); mp3Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); pinMode(BTN_A, INPUT_PULLUP); pinMode(BTN_B, INPUT_PULLUP); pinMode(BTN_C, INPUT_PULLUP); screen.begin(SSD1306_SWITCHCAPVCC, 0x3C); screen.clearDisplay(); showMessage("Tap your books!"); if (mp3.begin(mp3Serial)) { mp3.volume(22); } homeworkPoints = EEPROM.read(0); // load saved points } void loop() { checkForBookTag(); // Hold button A for 2 seconds to start the quiz if (digitalRead(BTN_A) == LOW) { delay(2000); if (digitalRead(BTN_A) == LOW) { runDailyQuiz(); } } } void checkForBookTag() { if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return; String tagID = ""; for (byte i = 0; i < rfid.uid.size; i++) { tagID += String(rfid.uid.uidByte[i], HEX); } tagID.toUpperCase(); for (int i = 0; i < BOOK_COUNT; i++) { if (tagID == bookTagIDs[i]) { bookPacked[i] = true; showMessage(bookNames[i] + " packed!"); mp3.play(bookVoiceTrack[i] + 10); // "X packed" clips start at track 11 } } checkMissingBooks(); rfid.PICC_HaltA(); } void checkMissingBooks() { for (int i = 0; i < BOOK_COUNT; i++) { if (!bookPacked[i]) { showMessage("You forgot your " + bookNames[i] + " book!"); mp3.play(bookVoiceTrack[i]); // "You forgot your X book" clips return; // announce one missing book at a time } } showMessage("All books packed! Have a great day."); addPoints(10); } void runDailyQuiz() { mp3.play(20); // "Quiz time!" clip showMessage("Q1: Press A, B or C"); mp3.play(21); // recorded question audio while (digitalRead(BTN_A) == HIGH && digitalRead(BTN_B) == HIGH && digitalRead(BTN_C) == HIGH) { // wait for an answer } if (digitalRead(BTN_B) == LOW) { // suppose B is correct showMessage("Correct! +5 points"); mp3.play(22); addPoints(5); } else { showMessage("Good try! Next time."); mp3.play(23); } } void addPoints(int amount) { homeworkPoints += amount; EEPROM.write(0, homeworkPoints); // save so points survive a reboot } void showMessage(String msg) { screen.clearDisplay(); screen.setTextSize(1); screen.setTextColor(SSD1306_WHITE); screen.setCursor(0, 10); screen.println(msg); screen.setCursor(0, 45); screen.print("Points: "); screen.print(homeworkPoints); screen.display(); }
Troubleshooting
Most first-build hiccups come down to power or wiring — here's what to check.
Reader won't detect tags
Make sure MFRC522 is wired to 3.3V, not 5V, and that the tag is held flat within 2–3cm of the reader's antenna.
No sound from the speaker
Check the SD card is formatted as FAT32 and the mp3 files are named 0001.mp3, 0002.mp3, in order, with no gaps.
Screen stays blank
Confirm the OLED's I2C address — most are 0x3C, but some are 0x3D. Run an I2C scanner sketch if you're unsure.
Bag reads a book as missing when it's inside
Metal zippers and buckles can block RFID signals — keep the reader's antenna a few centimetres from any metal.
Points reset every morning
You're likely writing to EEPROM before the value is read back correctly — check EEPROM.read(0) runs once in setup(), not in loop().
Battery drains too fast
Add a simple sleep mode that dims the OLED after 30 seconds of no tag activity to stretch battery life through the day.
Fun Upgrades to Try
Frequently Asked Questions
Is this project safe for a 9-year-old to build?
Yes, with adult supervision — especially for any soldering. The wiring itself uses simple jumper cables and breadboard-style connections, so most of the build is push-fit.
Do I need to know how to code already?
No. The code above is fully commented, and you only need to edit the book names and tag IDs to match your own timetable — no programming experience required to get started.
Can this work with more than 4 books?
Yes — just increase BOOK_COUNT and add more entries to the bookNames and bookTagIDs lists. The reader can handle as many tags as you want to register.
What if I don't have a DFPlayer Mini?
You can swap it for a simple piezo buzzer that beeps instead of speaking, and show the reminder text on the OLED screen only.
How long does the battery last?
A 2000mAh Li-ion cell typically powers the bag for a full school day of normal use, since the electronics only wake up briefly for each tag scan.

Comments
Post a Comment