Give an overview of your project idea (what it does, what it looks like, etc).
Originally, I wanted to make a cube shaped pocket-sized artifact which displays an animation over it’s surface. The animation changes according to the data it has accumulated over a period of time, making each artifact display a unique visual pattern. It is possible to connect two artifacts to change and “breed” their content.
The idea evolved into a device which uses light to create a dialogue between users in different places. Each device dialogues over the internet with another device. Whenever a user taps or moves the first device, it affects the animation on the second device in real-time. My purpose with this is to explore what types of interaction can evolve from a conversation with light.
For the prototype, I made a single-panel device connected to an ESP32 which communicates through Websockets with another Arduino with a sensor. If you tap the accelerometer connected to the Arduino, it triggers a different animation on the panel. I also made a website which can trigger the animation too. In the future, I would like to have more control over the sensor and communication protocol, but for now it was enough proof of concept.
In an ideal setting, I wanted my object to look like a portable device. However, I also like the idea of it being something that is constantly illuminating the space it inhabits. The NeoPixels at full intensity are blindingly bright and could easily fill a dark room with color.
And If it was portable, It would be cool to have it sniff for wifi signals and behave according to what it discovers.
WiFi-sniffing capabilities with the esp32: https://blog.podkalicki.com/esp32-wifi-sniffer/
Show a demonstration of your working prototype.
Show it doing what you expect a real-world version would do
I have only one panel installed, due to costs of development and resources at the moment. To make the ideal device I would need the individual Neopixels, so for now I am using an Adafruit Neopixels RGB 8x8 matrix. But I would like my first full prototype to be this:
Right now, I have it working like this:
Idle Mode:
Changing behavior/ message from another device:
Give an overview of how your prototype works.
For it to work I had to create a Websocket server in NodeJS. With the server created in my computer, I made a web client in order to connect to my server as a client. The same concept is what is going behind the communication with the ESP32, just clients sending messages that go through the server. This means that I can parse any message and control the flow of information.
Right now, my prototype is controlled by two buttons in a website. Each button starts a new animation. This is to simulate when one user taps the other device.
It also has an Arduino MKR1010 WiFi connected to the LIS3DH accelerometer. However, I still have adjustments to make to the sensibility of the sensor, so I am just sending a 'tap' message to the server every ten seconds or so.
Sending message to Server and ESP32 from Arduino MKR1010
// send tap to esp32
client.beginMessage(TYPE_TEXT);
client.print("real tap");
client.endMessage();
delay(10000);
Sending Message to Server and ESP32 from NodeJS Web Client
function loadTap() {
var item1 = document.querySelector(".item1");
item1.onclick = async () => {
console.log("clicked!");
// Connection opened
socket.send('fake tap!');
}
var item2 = document.querySelector(".item2");
console.log("found it!");
item2.onclick = async () => {
console.log("clicked!");
// Connection opened
socket.send('fake tap 2!');
}
}
What parts did you use for your prototype, and why did you use them
ESP32 is a series of low-cost, low-power system on a chip microcontrollers with integrated Wi-Fi and dual-mode Bluetooth. I used ESP32 -WROOM-32. It is the younger sibling of the ESP8226.
ESP-32-WROOM- Huzzah Breakout board below.
Very precise 3DOF accelerometer with tap detection. Below is the Adafruit Breakout board.
Beautiful dots of light. Below is the Adafruit individual LED Breakout board.
The MIC5225 is a 150mA highly accurate, low dropout regulator.
The connector for any input DC power source with a connector.
The ESP32 is problematic with Socket.IO libraries (at least the ones I found). With websockets it worked right away. I lost a lot of time trying to make it work with Socket.IO.
How to Calculate Power consumption:
ESP32:
The ESP32 dev kit (thus including the USB chip and power LED) consumes 40mA when connected to WiFi, spiking to ~150mA every 100ms. (source)
LIS3DH:
LIS3DH consumption: 4uA max.
NEOPIXELS:
X NeoPixels × Y mA ÷ 1,000 = Z A
Give an overview of your Eagle design
First I had to connect everything, and then go to the .brd file and make the board design. I went ahead and removed any unnecessary components and making sure every GND and power inputs were correctly addressed. Since I had already made the connections with the prototype made last week, it didn’t take me much time.
FRONT:
BACK:
NO GND PLANES: