Build instructions for the 'Baby Interface Device' (BID), an ultra-simple USB Human Interface Device for Tiny Humans. Built to allow my kid to interact with the computer without destroying my keyboards. The BID is a DIY USB HID (Human Interface Device) that acts as a keyboard to trigger a single keypress (space bar in this case). The concept is to create a very large button that is baby-friendly to allow an infant to interact with computer games and educational software.
The project can be assembled in less than an hour for around $35 or less and requires very little knowledge of electronics or coding.
The BID is ideal for use with certain online baby game sites such as:
Kneebouncers - an awesome ad-free site supported by annual membership
Fisher-Price Online - some of these games will work with this thing too. They're free and not too bad.
Also this thing is very handy to play/pause media sites like Pandora and Youtube.
DISCLAIMER: Choking and Strangulation Hazard! This has a cable on it and small parts which could mark, maime or otherwise injure an unsupervised infant! Don't let your baby play with it unsupervised! I take no responsibility for injuries to your child!
There is a bug with the timeout function. I will provide updated code once I figure it out. Until then just disregard the commented section. This code froze the device after the device has been plugged in for a certain amount of time (a couple of weeks)
Download the file as a .PDE/*
Baby Interface Device V1.0
Build a simple Button-style USB interface for infant learning development.
Build instructions for the device are available at http://matthewroy.com/bid/
Developed by: Matthew C. Roy 2011
Website: http://matthewroy.com/bid/
License: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
http://creativecommons.org/licenses/by-nc-sa/3.0/
You may share this code and modify for any non-commercial purposes.
*/
const int RGB_R=9;
const int RGB_G=14;
const int RGB_B=15;
const int PBTN=11;
int rgb_rval=255; //initial r val
int rgb_gval=255; //initial g val
int rgb_bval=255; //initial b val
int pbtn_state_cur=0; //cur value of push (for change)
int pbtn_state_prev=0; //prev value of push (for change)
long interval_off=30000; //milliseconds to wait before turning off light
long pbtn_last_press=0; //last time the btn was pressed.
long pbtn_state_timer=0; //milliseconds since push button change
void setup(){
pinMode(RGB_R,OUTPUT);
pinMode(RGB_G,OUTPUT);
pinMode(RGB_B,OUTPUT);
pinMode(PBTN,INPUT);
}
void loop(){
// set all 3 pins to the desired intensity
pbtn_state_timer = millis();
/*if((pbtn_state_timer-pbtn_last_press)>interval_off){
rgb_rval=255;
rgb_gval=255;
rgb_bval=255;
}*/
if(check_switch()){
pbtn_last_press=millis();
rgb_rval=random(0,255);
rgb_gval=random(0,255);
rgb_bval=random(0,255);
Keyboard.set_key1(KEY_SPACE);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
}
analogWrite(RGB_R, rgb_gval);
analogWrite(RGB_G, rgb_gval);
analogWrite(RGB_B, rgb_bval);
}
boolean check_switch(){
pbtn_state_prev=pbtn_state_cur;
pbtn_state_cur=digitalRead(PBTN);
if(pbtn_state_prev!=pbtn_state_cur){
//switch happened
return true;
}
else{
return false;
}
}
Build this thing with 2 Pololu Wixels instead for wireless battery operated version.
Add an IR receiver for remote control version. This is good for the media playback/pause functionality
Add an SD card/reader on this and have a custom application that lets parent's put image/media slides on it for the baby to flip through
Wire in a reset button to reset teensy so you can upgrade the firmware without opening the tap light.