Since I have always logged my ratings on a notebook or a piece of paper, my home library has been deluged with unsolicited paper clusters. Therefore, I decided to create this IoT device to log and monitor my book ratings so as to obviate the need for handwriting.

After perusing book review and classification methods, I decided to employ this device to rate and record six different book characteristics which denote a book's quality and reliability:

For each characteristic above, I defined four different rating points to create a concise and coherent rating system with the collected data:

After defining my rating system, I decided to utilize RFID disk tags to identify books rather than scanning barcodes (ISBNs) with a barcode scanner since I wanted to design unique bookmarks with the RFID disk tags for each book. Therefore, I connected an MFRC522 RFID reader to the Arduino Nano 33 IoT so as to detect UIDs.

To display the rating settings menu, I connected an SH1106 OLED screen to the Nano 33 IoT. Then, I created a simple controller to adjust ratings for each characteristic with joysticks and buttons.

Instead of developing a web application from scratch to log and monitor the mentioned book ratings transferred by the Nano 33 IoT, I decided to utilize the Qubitro portal to build an IoT application. Since Qubitro supports various connectivity methods with different development boards and provides an easy-to-understand interface to visualize the received data packets on the cloud, I did not encounter any issues while building my IoT application for this project.

After completing wiring on a breadboard and testing the code for transferring data packets to the Qubitro application, I designed Batman-themed base and controller PCBs for this project. When I was watching the Batman: The Animated Series recently, I saw a bat-themed library in the Batcave. Since Batman is my favorite comic book character, I thought it would be interesting to design this device as if it is a part of that library in the Batcave.

Lastly, I also designed a complementary Batman-inspired book stand (3D printable) to insert the base and controller PCBs in order to create a robust and stylish device emphasizing the Batman theme gloriously :)

🎁🎨 Huge thanks to PCBWay for sponsoring this project.

🎁🎨 Also, huge thanks to Creality3D for sponsoring a Creality CR-6 SE 3D Printer.

🎁🎨 If you want to purchase some products from Creality3D, you can use my 10% discount coupon (Aktar10) even for their new and most popular printers: CR-10 Smart,CR-30 3DPrintMill,Ender-3 Pro, and Ender-3 V2. You can also use the coupon for Creality filaments.

Step 1: Designing and soldering Batman-themed base and controller PCBs

Before prototyping my Batman-themed base and controller PCB designs, I tested all connections and wiring with the Arduino Nano 33 IoT and the MFRC522 RFID reader.

Then, I designed the Batman-themed base and controller PCBs by utilizing KiCad - inspired by the legends of the Dark Knight :) I attached the Gerber files for both PCBs below. Therefore, if you want, you can order my PCB designs from PCBWay to create your RFID-enabled IoT bookmark and reading tracker so as to transfer your book ratings effortlessly to a Qubitro application.

Click here to inspect and order the base and controller PCBs directly on PCBWay.

First of all, by utilizing a soldering iron, I attached headers (female), COM-09032 analog joysticks, pushbuttons (6x6), a 5mm green LED, and a power jack to the base and controller PCBs.

📌 Component list on the base PCB:

A1 (Headers for Arduino Nano 33 IoT)

RFID1 (Headers for MFRC522 RFID Reader)

SH1106 (Headers for SH1106 OLED Display)

J1 (Headers for Controller PCB)

D1 (5mm Green LED)

J2 (Power Jack)

📌 Component list on the controller PCB:

J1 (Headers for Base PCB)

U1, U2 (COM-09032 Analog Joystick)

K1, K2, K3, K4 (6x6 Pushbutton)

Step 1.1: Making connections and adjustments

// Connections// Arduino Nano 33 IoT :  
//                                MFRC522
// D3  --------------------------- RST
// D4  --------------------------- SDA
// D11 --------------------------- MOSI
// D12 --------------------------- MISO
// D13 --------------------------- SCK
//                                SH1106 OLED Display (128x64)
// D6  --------------------------- SDA
// D5  --------------------------- SCK
// D7  --------------------------- RES
// D8  --------------------------- DC
// D9  --------------------------- CS
//                                JoyStick (R)
// A0  --------------------------- VRY
// A1  --------------------------- VRX
// A2  --------------------------- SW
//                                JoyStick (L)
// A3  --------------------------- VRY
// A4  --------------------------- VRX
// A5  --------------------------- SW
//                                Button (Up)
// A6  --------------------------- S
//                                Button (Right)
// A7  --------------------------- S
//                                Button (Left)
// D2  --------------------------- S
//                                Button (Down)
// D10 --------------------------- S
//                                5mm Green LED
// D0  --------------------------- +

After completing soldering, I attached all remaining components to the Batman-themed base and controller PCBs via headers - Arduino Nano 33 IoT, MFRC522 RFID reader, and SH1106 OLED screen.

Then, I connected the base PCB to the controller PCB by utilizing male jumper wires.

Step 2: Designing and printing a Batman-inspired book stand

Since I wanted to apply the bat theme to create a device as if it is a part of the Batcave from the animated series, I decided to design a complementing book stand to display the books I am currently reading in my home library. To insert and attach the Batman-themed base and controller PCBs to the book stand effortlessly, I added slots and hooks. Also, I inscribed the prominent bat symbol on the book stand to emphasize the Batman theme gloriously :)

I designed the book stand in Autodesk Fusion 360. You can download its STL file below.

Then, I sliced my book stand 3D model (STL file) in Ultimaker Cura.

Since I wanted to create a solid structure for the book stand and complement the Batman theme, I utilized this PLA filament:

Finally, I printed the book stand (model) with my Creality CR-6 SE 3D Printer. Although I am a novice in 3D printing, and it is my first FDM 3D printer, I got incredible results effortlessly with the CR-6 SE :)

Step 2.1: Assembling the book stand and creating RFID bookmarks

After printing my book stand 3D model, I affixed the Batman-themed base and controller PCBs to the book stand. I placed the controller PCB via the hooks on the front. Then, I fastened the base PCB to its slot on the top via a hot glue gun and utilized a cable tie to make a rigid and stable connection.

Since I decided to employ RFID disk tags to create unique bookmarks in order to identify books, I fastened the disk tags to my limited edition comic bookmarks I purchased from a comic book convention in my hometown.

Step 3: Setting up an IoT application on Qubitro

To log and monitor the book ratings transferred by the Nano 33 IoT, I decided to utilize the Qubitro portal to build an IoT application. Qubitro provides developer-friendly features and supports various connectivity methods such as a fully-featured MQTT broker and The Things Stack devices. Since Qubitro has easy-to-understand online examples with technical guides and allows the user to visualize the received data packets on the cloud with specialized widgets effortlessly, I highly recommend building IoT applications with Qubitro.

#️⃣ First of all, go to the Qubitro portal and sign in.

#️⃣ Then, create a new project (IoT application) and define its name and description.

#️⃣ To create a new Qubitro device under the application, choose a connectivity method depending on your project's requirements. Select the MQTT option to transfer data via the Qubitro MQTT broker to the given Qubitro device.

#️⃣ Define the device information and details.

If required, you can also use the application's MQTT credentials to publish data via the Qubitro APIs.

#️⃣ After creating the Qubitro device successfully, open the device on the project dashboard and click Settings.

#️⃣ Then, copy the device ID and token to transfer data packets from the Nano 33 IoT to the Qubitro device via the MQTT broker.

Step 3.1: Analyzing the collected data on Qubitro

After building my IoT application on Qubitro, I started to send data packets (book ratings) from the Nano 33 IoT to the Qubitro device under the application via the MQTT broker immediately.

To analyze the collected data, I utilized the built-in chart feature in the device interface.

You can inspect the code for transferring book ratings via the Qubitro MQTT broker in Step 4.

#️⃣ After the Qubitro device receives data packets, open the device on the project dashboard and click Analytics.

#️⃣ Then, create a chart with unique colors for each data element to scrutinize the collected data in a given period.

Step 3.2: Creating widgets to visualize the collected data on Qubitro

#️⃣ First of all, on the project dashboard, go to Monitoring so as to create a new monitoring dashboard.

#️⃣ Then, click the Add widget button.

#️⃣ Define the required information for the widget: title, project (IoT application) name, device name, and widget type (e.g., area chart).

#️⃣ To customize the recently created widget, assign a data element (sensor value), select the widget color, and adjust the appearance settings.

After creating widgets for each data element, the Qubitro portal should show a monitoring dashboard as follows.

Step 4: Programming the Arduino Nano 33 IoT


Modes and Features

🦇📗 First of all, the device attempts to connect to the given Wi-Fi network and the Qubitro device via the Qubitro MQTT broker.

🦇📗 Then, the device displays the home screen.

🦇📗 If the device detects an RFID card or tag UID, it initiates the rating settings menu and shows the detected UID and the current book ratings:

🦇📗 On the rating settings menu, the device allows the user to adjust the book ratings by utilizing joystick movements and control buttons:

🕹️ To adjust the Plot rating:

🕹️ To adjust the Delineation rating:

🕹️ To adjust the Immersion rating:

🕹️ To adjust the Prolixity rating:

🕹️ To adjust the Characters rating:

🕹️ To adjust the Editing rating:

🎮 Rating points by control buttons:

🦇📗 If the second joystick's switch is pressed, the device sends the data packet (the detected UID and the adjusted book ratings) to the Qubitro device via the Qubitro MQTT broker.

🦇📗 Then, the device blinks the 5mm green LED if the Qubitro device receives the transferred data packet successfully.

🦇📗 After sending the data packet, the device returns to the home screen.

🦇📗 If the first joystick's switch is pressed, the device also returns to the home screen without transferring the data packet.

🦇📗 The device stores the adjusted book ratings and shows them on the rating settings menu when being activated so as to remind the user of the previously assigned book ratings.

🦇📗 If the Nano 33 IoT throws an error while operating, the device prints the error code and details on the serial monitor.

🦇📗 Also, the device prints notifications and UID readings on the serial monitor for debugging.

🦇📗 After transferring data packets to the Qubitro device, the Qubitro portal lets the user visualize the book ratings on the monitoring dashboard, as explained in Step 3.2.

Videos and Conclusion