Introduction: Calming Book Box (Arduino)

In moments of hypo- or hyperarousal, when the thinking brain is offline, this Arduino-based Calming Book Box will prompt self-regulation with a wave of the hand. Inspired by Tinkercad's Crystal Ball project and Instructable user cah65's Arduino Powered Fortune Teller, a liquid crystal display reveals a series of nervous systems regulation activities each time the photoresistor reads a decrease in light. This beginner-intermediate level project is highly customizable in terms of its purpose, code, and visual end product.

Supplies

I am notorious for not practicing this myself, but truly-- gather your supplies first and reduce your frustration. For my version, I needed:

Circuitry

  • Arduino Uno Rev3
  • USB-A to USB-B Cable
  • computer
  • breadboard
  • jumper wires in assorted lengths & colors
  • 220Ω resistor
  • 330Ω resistor
  • 5 kΩ resistor
  • photoresistor
  • crystal LED display

Software

Tools

  • safety glasses
  • drill with 1/4" bit or device to poke holes
  • utility knife or scroll saw
  • engineer square or ruler

Art Supplies (can be modified/personalized)

  • book box (alternatively, cardboard or cigar box)
  • pencil
  • Mod Podge glue
  • foam paintbrush
  • dried flowers
  • plastic bag

Step 1: Develop Theme

Before you dive in, spend some time sketching out ideas about how to make this project beneficial to your life. Will it be self- or co-regulation strategies for a classroom? For your family? Or personal to you?

Step 2: Set Up the Circuit

If you are new to Arduino, before attempting this custom project, I highly recommend practicing with Tinkercad's Project 11: Crystal Ball while simultaneously viewing @Mr.DudaSTEM's video tutorial.

If you are ready to dive into this project, this is the customized setup for the Calming Book Box.

  1. On Arduino, attach red wire to 5V and black to GRD.
  2. On breadboard, attach red to + and black to -.
  3. Position photoresistor in row F.
  4. Add new jumper wire on row F and connect to 5V rail.
  5. Place 5 kΩ resistor on row I and connect to - (GRD) rail.
  6. Add blue jumper wire from A0 input pin on Arduino to row H near photoresistor.
  7. To set up the contrast of the crystal LCD screen, add a 330Ω resistor in from row E to row G.
  8. Connect to GRD rail with black wire from row J to - rail.
  9. Add red jumper wire from row J to + (5V) rail.
  10. Wire the resistor to the V0 pin on the crystal LCD with a blue wire from row D.
  11. Power the LCD
  12. There are 16 metal pins on the crystal LCD. Use 3 black wires and ground the display at pins 1, 5, and 16.
  13. To input power to the LCD screen, connect red wire from pin 2 to the 5V rail.
  14. At pin 15, connect another red wire from row E to F. Then, power pin 15 by adding a 220Ω resistor from row J to the 5V rail.
  15. Set up data communication
  16. Connect LCD pin 11 with a red wire to Arduino digital pin 5
  17. Connect LCD pin 12 with a green wire to digital pin 4
  18. Connect LCD pin 13 with a black wire to digital pin 3
  19. Connect LCD pin 14 with a blue wire to digital pin 2
  20. Connect LCD pin 4 with an orange wire to digital pin 9
  21. Connect LCD pin 6 with a white wire to digital pin 8


Step 3: Code Your Sketch

Code Notes

This code is easily customizable to myriad purposes, whether for a classroom, family, personal use, or other randomized response systems.

To adjust the total number of options, go to

reply = random(32); //pick a number from 0 to 32 and change the number accordingly

To change a response,

case 4: lcd.print("glitter jar"); find the case reply you want to change and alter the content inside the quotation marks on that line (max 16 characters)


Link to Arduino Web Create Sketch

https://create.arduino.cc/editor/mbbluma283/d477eaf1-e3c9-49be-a2db-f77bba6b082c/preview


Copy/Paste of Code

#include <LiquidCrystal.h>

LiquidCrystal lcd(9, 8, 5, 4, 3, 2);


int reply;

int lightCal;

int lightVal;


void setup() {

 pinMode(A0, INPUT);

 lightCal = analogRead(A0);

 Serial.begin(9600);

 lcd.begin(16, 2);

 lcd.print("You matter.");

 delay(3000); // Wait for 3000 millisecond(s)

 lcd.setCursor(0, 1);

 lcd.print("You r important");

 delay(3000); // Wait for 3000 millisecond(s)

}



void loop()

{

 lightVal = analogRead(A0);

 if (lightVal < lightCal - 50) {

  reply = random(32); //pick a number from 0 to 32

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("Coping idea:");

  lcd.setCursor(0, 1 );

  switch (reply) {

   case 0: lcd.print("tree pose");

    delay(7000); // Wait for 7 second(s)

    break;

   case 1: lcd.print("ice pack");

    delay(7000); // Wait for 7 second(s)

    break;

   case 2: lcd.print("5-4-3-2-1 senses");

    delay(7000); // Wait for 7 second(s)

    break;

   case 3: lcd.print("4-7-8 breath");

    delay(7000); // Wait for 7 second(s)

    break;

   case 4: lcd.print("glitter jar");

    delay(7000); // Wait for 7 second(s)

    break;

   case 5: lcd.print("rip paper");

    delay(7000); // Wait for 7 second(s)

    break;

   case 6: lcd.print("dance");

    delay(7000); // Wait for 7 second(s)

    break;

   case 7: lcd.print("playdoh or clay");

    delay(7000); // Wait for 7 second(s)

    break;

   case 8: lcd.print("take a lap");

    delay(7000); // Wait for 7 second(s)

    break;

   case 9: lcd.print("get a tight hug");

    delay(7000); // Wait for 7 second(s)

    break;

   case 10: lcd.print("hum or sing");

    delay(7000); // Wait for 7 second(s)

    break;

   case 11: lcd.print("look at nature");

    delay(7000); // Wait for 7 second(s)

    break;

   case 12: lcd.print("learn something");

    delay(7000); // Wait for 7 second(s)

    break;

   case 13: lcd.print("remember details");

    delay(7000); // Wait for 7 second(s)

    break;

   case 14: lcd.print("lift weight");

    delay(7000); // Wait for 7 second(s)

    break;

   case 15: lcd.print("wall sit");

    delay(7000); // Wait for 7 second(s)

    break;

   case 16: lcd.print("talk to someone");

    delay(7000); // Wait for 7 second(s)

    break;

   case 17: lcd.print("jumping jacks");

    delay(7000); // Wait for 7 second(s)

    break;

   case 18: lcd.print("list the why");

    delay(7000); // Wait for 7 second(s)

    break;

   case 19: lcd.print("snuggle pets");

    delay(7000); // Wait for 7 second(s)

    break;

   case 20: lcd.print("clean");

    delay(7000); // Wait for 7 second(s)

    break;

   case 21: lcd.print("sensory checkin");

    delay(7000); // Wait for 7 second(s)

    break;

   case 22: lcd.print("check HALT needs");

    delay(7000); // Wait for 7 second(s)

    break;

   case 23: lcd.print("tapping");

    delay(7000); // Wait for 7 second(s)

    break;

   case 24: lcd.print("very sour candy");

    delay(7000); // Wait for 7 second(s)

    break;

   case 25: lcd.print("read and cuddle");

    delay(7000); // Wait for 7 second(s)

    break;

   case 26: lcd.print("take a bath");

    delay(7000); // Wait for 7 second(s)

    break;

   case 27: lcd.print("make something");

    delay(7000); // Wait for 7 second(s)

    break;

   case 28: lcd.print("treat yourself");

    delay(7000); // Wait for 7 second(s)

    break;

   case 29: lcd.print("balloon breathe");

    delay(7000); // Wait for 7 second(s)

    break;

   case 30: lcd.print("write about it");

    delay(7000); // Wait for 7 second(s)

    break;

   case 31: lcd.print("Zenimal meditate");

    delay(7000); // Wait for 7 second(s)

    break;

   case 32: lcd.print("garden");

    delay(7000); // Wait for 7 second(s)

    break;

  } //end of switch

 } //end of nested if()

 else {

  lcd.clear();

  lcd.begin(16, 2);

  lcd.print("How you feel");

  delay(1000); // Wait for 1 second(s)

  lcd.setCursor(0, 1);

  lcd.print("is so important");

  delay(3000); // Wait for 3 second(s)

 } //end of else

} //end of loop()


Upload .ino from Arduino Web Create to Arduino microcontroller.


Step 4: Cut Shape to Insert LCD Display

I positioned the crystal LCD screen component on my book box roughly where I wanted it. I measured its size and used an engineer square to place it more precisely. Then, I outlined the space I would need to cut away to show the LCD display.

Using a small drill, I made a hole in the corner of the rectangle I needed to cut out. At this point, you can cut out your shape using whatever cutting tools you have available. I ended up using a scroll saw for an easy, precise cut. I also had some metal rasps handy for quickly shaping to a neat rectangular shape. An Exacto knife, sandpaper, and patience would yield similar results.

Step 5: Design Internal Space

Because I chose not to solder, I needed to find a way to bolster my breadboard off the floor of the book box without bumping too high into the cover. It was also crucial that the equipment did not slide around. I used a combination of some plastic pencil cases and spare packing foam to position my Arduino and components.

Alternatively, you could enclose the components more discretely and use the second part of the book box to store self-regulation supplies like a lavender eye pillow, balloons to blow up, aromatherapy mist, etc.

Step 6: Drill Hole for Photoresistor

Once all internal pieces were positioned, the photoresistor was ready to be revealed. I used a marker on the underside of the book cover to indicate where the photoresistor was touching, and drilled a hole large enough for the sensor to poke through.

Step 7: Mod Podge Dried Flowers

While Bryce Canyon National Parks is a lovely image, I wanted to personalize this book further and make it inviting to pick up when I'm in moments of dysregulation. I chose to embellish it with flowers I've pressed over the past few years. My process was:

  1. Lay a plastic bag inside the book box to protect all internal components
  2. Arrange dried flowers in a rough composition
  3. Move them next to me, still in that arrangement, ready to apply
  4. Paint Mod Podge in neat strokes over the cover of the book box
  5. Immediately press flowers onto the adhesive
  6. Coat flowers in another layer of Mod Podge
  7. Allow to dry overnight

Step 8: Use the Book Box and Invoke Calm!

Ahhh... no more stressful moments of "I know I should be handling this better, but how?" It's time to be the very model of nervous system regulation by selecting calming activities with a simple wave of the hand. Set the book box in a common space in your home and find the state of homeostasis you deserve!


References


Cah65. (2014, July 28). Arduino Powered Fortune Teller. Instructables. https://www.instructables.com/Arduino-Powered-Fortune-Teller/


Duda, N. [STEM with Mr. Duda]. (2020, October 14). Arduino Crystal Ball: Learn Electronics with Arduino Project 11 Walkthrough. YouTube. https://www.youtube.com/watch?v=__-3p7X0n8A


Fitzgerald, S. (2012, September 13). Project 11 - Crystal Ball. Arduino Starter Kit Example. p11_CrystalBall. Arduino Web Editor Examples.


Gerst, K. (2022, May 16). Arduino Troubleshooting. Zoom.


Tinkercad. (2022). Photoresistor (Analog Input). Learn Arduino.https://www.tinkercad.com/learn/project-gallery;collectionId=OMOZACHJ9IR8LRE


Tinkercad. (2022). Project 11: Crystal Ball. https://www.tinkercad.com/learn/overview/OB3B767ISCC2VA9;collectionId=OMOZACHJ9IR8LRE