Made by Amy Luo, Fallon Creech, Claire Koh and mfang1

An intelligent AI plush that provides companionship and fosters confidence through positive, self-affirming conversation.

Created: May 10th, 2019



Our project’s goal was to envision and investigate the effects of AI technology on the social skills of children in a future where companion AI technology is likely to become ubiquitous.

We envision a future where the global job market is becoming increasingly competitive- having stellar grades and long lists of extracurriculars will no longer suffice for success. The social skill of networking, which was never taught in school, has become imperative to succeeding in the working world. Thus, parents are looking for ways to improve this skill within their children.

To address this need, Aura Tech had created a special plush released for beta testing that would help children develop social skills to succeed in higher education and post-graduation life. This adaptive plush picks up on natural human speech patterns to model how to empathize and listen to others and create a unique bond with its owner as a tutor and friend. Unfortunately, after 5 years of observing oddly aggressive long-term behavioral development in the children who had the beta plush toys, Aura Tech had recalled the product. Plans are still in the works for another form of machine learning plush toys that do not produce adverse effects, but PlushiePal is permanently obsolete.



Our research covered a variety of topics, including child development/psychology and current trends in human interactions with artificial intelligence. We had found that children need to be taught empathy and to learn how to constructively take criticism at a young age in order to interact well with other people. We also studied modern parenting trends and methods, which showed that parents tended to spend less time with children due to the demands of work and other obligations. This would lead to children forming a stronger bond with hired caretakers. In addition, we found that there is more and more pressure on children to get into prestigious colleges, which leads to increased emphasis on learning social interactions, networking, and doing as many extracurriculars or work as possible in tandem with getting good grades in school.

As for children’s interactions with artificial intelligence, the AI toys for children or responsive chat bots had several precedents. Mattel had already started to develop AI toys such as a holographic Barbie Doll and Aristotle, an AI nanny for children. However, focus groups had protested the mass release of these toys/AI aids because of parents’ concerns of data collection and monitoring their children. There were other concerns about children interacting with AI at an early age, such as getting emotionally attached to an inanimate object. Children were already greeting Alexa and Google Home like human friends. These AI’s were also not responding to children in a way that humans would respond, which would encourage kids to interact with them with impatience and without empathy. One mother wrote about her son flipping his “pet” robot onto its back and gleefully watching it struggle to get back up. The robot did not express any pain or requests for help, which enabled the child to continue to push it around. Chatbots also cannot truly understand the nuances of a situation or one’s inner feelings. In the example of WoeBot, which was an AI designed to help redirect negative emotions, the AI cannot detect issues of abuse or eating disorders from chatting with it, so it cannot offer the proper care or empathy that a child or user would need.


Process and Documentation

Originally, PlushiePal challenged the role of parenting; the toy would over time gather enough knowledge to literally parent the child, giving advice on such chores and necessities like getting to school on time and when to sleep. In this universe, the child would develop a higher reliance on the PlushiePal than on the human parents, and the result caused the human parents to become jealous of the PlushiePal because it would have experienced more of the child’s life than they would have. The child would call after the PlushiePal, forgetting the role of its own parents.

After further development and questioning the plausibility of a personal assistant AI with the unique ability of parenting a child, we began to explore behavioral characteristics in response to an AI. Our new challenge question explored the behavioral development of a child growing up with a PlushiePal, a toy that would take on the role of a friend. This new exploration questioned the how negative behaviors in children could develop after positive reinforcement by a personal AI. 


Arduino Code

/* DF Player mini command discovery (Modified for Particle world by @FiDel - Feb 16, 2016)
This program is meant to discover all the possibilities of the command structure of the DFPlayer mini.
No special libraries are needed.

Use of sketch: Enter three (separated) decimal numbers in the Serial Monitor with no end of line character.
First number : Command
Second number: First (High Byte) parameter
Third number : Second (Low Byte) parameter
E.g.: 3,0,1 will play the first track on the TF card

Connect Sound module board RX to Arduino pin 11 (via 1K resistor)
Connect Sound module board TX to Arduino pin 10 (via 1K resistor)
Connect Sound module board Vcc to Arduino Vin when powered via USB (preferably 3.0) else use seperate 5V power supply
Connect Sound module board GND to Arduino GND
General DF Player mini command structure (only byte 3, 5 and 6 to be entered in the serial monitor):
Byte Function Value
==== ================ ====
(0) Start Byte 0x7E
(1) Version Info 0xFF (don't know why it's called Version Info)
(2) Number of bytes 0x06 (Always 6 bytes)
(3) Command 0x__
(4) Command feedback 0x__ If enabled returns info with command 0x41 [0x01: info, 0x00: no info]
(5) Parameter 1 [DH] 0x__
(6) Parameter 2 [DL] 0x__
(7) Checksum high 0x__ See explanation below. Is calculated in function: execute_CMD
(8) Checksum low 0x__ See explanation below. Is calculated in function: execute_CMD
(9) End command 0xEF
Checksum calculation.
Checksum = -Sum(byte(1..6)) (2 bytes, notice minus sign!)
Commands without returned parameters (*=Confirmed command ?=Unknown, not clear or not validated)
HEX Dec Function Description Parameters(2 x 8 bit)
==== === =================================== ========================================================================
0x01 1 Next * [DH]=X, [DL]=X Next file in current folder.s when last file played
0x02 2 Previous * [DH]=X, [DL]=X Previous file in current folder.s when last file played
0x03 3 Specify track(NUM) * [DH]=highByte(NUM), [DL]=lowByte(NUM)
1~2999 Playing order is order in which the numbers are stored.
Filename and foldername are arbitrary, but when named starting with
an increasing number and in one folder, files are played in
that order and with correct track number.
e.g. 0001-Joe Jackson.mp3...0348-Lets dance.mp3)
0x04 4 Increase volume * [DH]=X, [DL]=X Increase volume by 1
0x05 5 Decrease volume * [DH]=X, [DL]=X Decrease volume by 1
0x06 6 Specify volume * [DH]=X, [DL]= Volume (0-0x30) Default=0x30
0x07 7 Specify Equalizer * [DH]=X, [DL]= EQ(0/1/2/3/4/5) [Normal/Pop/Rock/Jazz/Classic/Base]
0x08 8 Specify repeat(NUM) * [DH]=highByte(NUM), [DL]=lowByte(NUM).Repeat the specified track number
0x09 9 Specify playback source (Datasheet) ? [DH]=X, [DL]= (0/1/2/3/4)Unknown. Seems to be overrided by automatic detection
0x0A 10 Enter into standby – low power loss * [DH]=X, [DL]=X Works, but no command found yet to end standby
(insert TF-card again will end standby mode)
0x0B 11 Normal working (Datasheet) ? Unknown. No error code, but no function found
0x0C 12 Reset module * [DH]=X, [DL]=X Resets all (Track = 0x01, Volume = 0x30)
Will return 0x3F initialization parameter (0x02 for TF-card)
"Clap" sound after excecuting command (no solution found)
0x0D 13 Play * [DH]=X, [DL]=X Play current selected track
0x0E 14 Pause * [DH]=X, [DL]=X Pause track
0x0F 15 Specify folder and file to playback * [DH]=Folder, [DL]=File
Important: Folders must be named 01~99, files must be named 001~255
0x10 16 Volume adjust set (Datasheet) ? Unknown. No error code. Does not change the volume gain.
0x11 17 Loop play * [DH]=X, [DL]=(0x01:play, 0x00:stop play)
Loop play all the tracks. Start at track 1.
0x12 18 Play mp3 file [NUM] in mp3 folder * [DH]=highByte(NUM), [DL]=lowByte(NUM)
Play mp3 file in folder named mp3 in your TF-card. File format exact
4-digit number (0001~2999) e.g. 0235.mp3
0x13 19 Unknown ? Unknown: Returns error code 0x07
0x14 20 Unknown ? Unknown: Returns error code 0x06
0x15 21 Unknown ? Unknown: Returns no error code, but no function found
0x16 22 Stop * [DH]=X, [DL]=X, Stop playing current track
0x17 23 Loop Folder 01 * [DH]=x, [DL]=1~255, Loops all tracks in folder named "01"
0x18 24 Random play * [DH]=X, [DL]=X Random all tracks, always starts at track 1
0x19 25 Single loop * [DH]=0, [DL]=0 Loops the track that is playing
0x1A 26 Pause * [DH]=X, [DL]=(0x01:pause, 0x00:stop pause)
Commands with returned parameters (*=Confirmed command ?=Unknown, not clear or not validated)
HEX Dec Function Description Parameters(2 x 8 bit)
==== === =================================== ===========================================================================
0x3A 58 Medium inserted * [DH]=0, [DL]=(1:U-disk, 2:TF-card)
0x3B 59 Medium ejected * [DH]=0, [DL]=(1:U-disk, 2:TF-card)
0x3C 60 Finished track on U-disk * [DH]=highByte(NUM), [DL]=lowByte(NUM)
Not validated. Returns track number when song is finished on U-Disk
0x3D 61 Finished track on TF-card * [DH]=highByte(NUM), [DL]=lowByte(NUM)
Returns track number when song is finished on TF
0x3E 62 Finished track on Flash * [DH]=highByte(NUM), [DL]=lowByte(NUM)
Not validated. Returns track number when song is finished on Flash
0x3F 63 Initialization parameters * [DH]=0, [DL]= 0 ~ 0x0F. Returned code when Reset (0x12) is used.
(each bit represent one device of the low-four bits)
See Datasheet. 0x02 is TF-card. Error 0x01 when no medium is inserted.
0x40 64 Error ? [DH]=0, [DL]= 0~7 Error code(Returned codes not yet analyzed)
0x41 65 Reply ? [DH]=0, [DL]= 0~? Return code when command feedback is high
0x00 no Error (Other returned code not known)
0x42 66 The current status * [DH] = Device number [DL] = 0 no play, 1 play
0x43 67 The current volume * [DH]=0, [DL]= Volume (0-30)
0x44 68 The current EQ * [DH]=0, [DL]= EQ(0/1/2/3/4/5) [Normal/Pop/Rock/Jazz/Classic/Base]
0x45 69 The current playback mode * [DH]=0, [DL]= (0x00: no CMD 0x08 used, 0x02: CMD 0x08 used, not usefull)
0x46 70 The current software version * [DH]=0, [DL]= Software version. (My version is 5)
0x47 71 The total number of U-disk files * [DH]=highByte(NUM), [DL]=lowByte(NUM). Not validated
0x48 72 The total number of TF-card files * [DH]=highByte(NUM), [DL]=lowByte(NUM)
0x49 73 The total number of flash files * [DH]=highByte(NUM), [DL]=lowByte(NUM). Not validated
0x4A 74 Keep on (Datasheet) ? Unknown. No returned parameter
0x4B 75 The current track of U-Disk * [DH]=highByte(NUM), [DL]=lowByte(NUM), Current track on all media
0x4C 76 The current track of TF card * [DH]=highByte(NUM), [DL]=lowByte(NUM), Current track on all media
0x4D 77 The current track of Flash * [DH]=highByte(NUM), [DL]=lowByte(NUM), Current track on all media
0x4E 78 Folder "01" [DH]=x, [DL]=1 * [DH]=0, [DL]=(NUM) Change to first track in folder "01"
Returns number of files in folder "01"
0x4F 79 The total number of folders * [DH]=0, [DL]=(NUM), Total number of folders, including root directory
Additional info can be found on DFRobot site, but is not very reliable
Additional info:
Ype Brada 2015-04-06
#include "Particle.h"
#include <math.h>
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
# define buttonPin D5
# define highByte(w)  ((uint8_t) ((w) >> 8))
# define lowByte(w)   ((uint8_t) ((w) & 0xff))
int ledPin = A5;
int numberTrack = 10; // Number of Tracks
int count = 0;
int volume = 50;
unsigned long timer = millis();
int StepDelay = 2;
unsigned long ledTimer;
float SpeedFactor = 0.03; // 0.008 // Breathing speed
int i = 0;
void setup ()
 pinMode(ledPin, OUTPUT);
 // digitalWrite(D7, HIGH);
 pinMode(buttonPin, INPUT_PULLDOWN);
 execute_CMD(0x3F, 0, 0); // Send request for initialization parameters
 //while (Serial1.available()<10) // Wait until initialization parameters are received (10 bytes)
 delay(1000); // Pretty long delays between succesive commands needed (not always the same)
 // Initialize sound to very low volume. Adapt according used speaker and wanted volume
 execute_CMD(0x09, 0, 0x30); // Set the volume (0x00~0x30)
 // execute_CMD(0x0D,0,1);
 // execute_CMD(0x11, 0, 0x01);
void loop()
  int button = digitalRead(buttonPin);
  if (button == 1){
    if (millis() - timer > 500) {
      execute_CMD(0x03,highByte((count%numberTrack)+1), lowByte((count%numberTrack)+1)); // Set Track number
      execute_CMD(0x0D,0,1); // Play
      timer = millis();
      ledTimer = millis();
  if (millis() - ledTimer < 30000) { // Breath LED for 5 seconds
    // Serial.println("On");
    breathLed(ledPin, i);
  else if (millis() - ledTimer > 30000) {
    // Serial.println("Off");
    analogWrite(ledPin, 0);
// By Ype Brada 2015-04-06
void execute_CMD(byte CMD, byte Par1, byte Par2) // Excecute the command and parameters
 // Calculate the checksum (2 bytes)
 int16_t checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
 // Build the command line
 byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge, Par1, Par2, checksum >> 8, checksum & 0xFF, End_Byte};
 //Send the command line to the module
 for (byte k=0; k<10; k++)
  Serial1.write( Command_line[k]);
void breathLed(int ledPin, int i){
  int intensity = 255 /2.0 * (1.0 + sin(SpeedFactor * i));
  // Serial.println(intensity);
  analogWrite(ledPin, intensity);
  // delay(StepDelay);
Click to Expand


The final product was comprised on the shiba doll with the processing electrical components embedded inside and the input/output components (LED, speaker, button) exposed on the outside for the user interaction. Once the button is pressed, the device played one of the three pre-recorded conversation between the PlushiePal and the former owner while the LED light is flashing. Processing was used as the program to link the light, the audio files and the button. Semi-transparent material was used to cap the LED bulb to diffuse the light over a larger area and a metallic paper was used to make the collar for the doll to give it more of a futuristic and refined appearance.

The installation was successful. The pieces were installed as planned: PlushiePal in the middle, the manual and the articles on the left, the video on the right with the timeline on the back panel. 


Lessons Learned and Future Plans 

Following this project, we were able to receive helpful feedback from visitors who interacted with our display during museum showcase. We noticed that people tended to briefly view the set up, glancing at the manual or pressing the plushie’s button a few times. Typically, it was expected for visitors not to spend over two minutes at the display. So it would have been better to have taken the short time frame into consideration. Then, we would have simplified the set up, and focused more on a more condensed, yet meaningful interaction rather than a more drawn-out, storyline based interaction. In particular, we made multiple audio recordings which built off of one another and followed the story of one child who developed a close attachment to their PlushiePal. Over the progression of each of the recordings, one would start to notice more concerning traits develop. However, because visitors did not hear every recording, they were unable to completely gain insight into the full progression of the child’s story and the more negative undertones of PlushiePal’s influence.

In addition, we noticed the visitors sometimes mistook the larger light box on the PlushiePal’s collar as the button to press for audio rather than the actual red button situated near the rear end. In order to make our intended user-interaction with the prototype more clear to the user, we could have placed the button in a more prominent location. Also, we could have given the product interaction a more futuristic feeling by integrating the user interface more seamlessly into the design. Rather than have a red button which might appear to be detached from the rest of the plushie, we could have had the audio files play following a press of the paw or the triggering of a distance sensor near the body. In order to reach these improvements, we would have required more time and resources to improve upon the design and technical components of our project. 

Share this Project


48528 Responsive Mobile Environments

· 18 members

This 15-week course introduces students to responsive mobile environments and encourages them to explore speculative terrains that intersect art, technology and design and space. Iteratively, intro...more


An intelligent AI plush that provides companionship and fosters confidence through positive, self-affirming conversation.