- A cube that dramatizes the shadow that the user casts upon it. It contains a light sensor, and changes its light output to reflect the amount of light it senses.
- A cube that has likes people but has a limit to the amount of social interaction. It glows until it senses human motion via a passive infrared sensor. After a prolonged period of time with a lot of motion, it "tires out" and "closes up" by becoming very dim.
- A cube that likes to be spoken to softly. Similar to the above, it emits a glow that invites users to approach it. It changes color as it is spoken to. If it is spoken to in a very loud voice, it will become very dim.
3 sensors that can be useful in implementing intangible interaction:
- A force-sensitive resistor can be useful for intangible interactions, as long as it's not measuring the force applied from a user's hands or arms! They can be used to sense weight and to sense whether objects have been placed in a certain area.
- RFID can be used to sense when a tagged object is placed close to the sensor.
- Piezoelectric sensors are used for both microphones and accelerometers. Maybe we can use a microphone to detect movement?
I tried out the ADPS9960 gesture sensor and made a small project with it! The ADPS9960 includes a light and color sensor. I used the light sensor to determine if the room was dark, and changes the color scheme of the computer based to match the room.
Code (Arduino):
Code
#include "Arduino_APDS9960.h"
void setup() {
Serial.begin(9600);
// wait for Serial Monitor to open:
while (!Serial)
;
Serial.println("hi");
// if the sensor doesn't initialize, let the user know:
while (!APDS.begin()) {
Serial.println("APDS9960 sensor not working. Check your wiring.");
delay(1000);
}
Serial.println("Sensor is working");
}
void loop() {
// red, green, blue, clear channels:
int r, g, b, c;
// if the sensor has a reading:
if (APDS.colorAvailable()) {
// read the color
APDS.readColor(r, g, b, c);
// print the values
Serial.print(r);
Serial.print(",");
Serial.print(g);
Serial.print(",");
Serial.print(b);
Serial.print(",");
Serial.println(c);
delay(100);
}
}
Code (Computer, Deno + AppleScript):
Code
import { readLines } from "https://deno.land/std@0.77.0/io/bufio.ts";
let lastSetting: boolean | undefined = undefined;
async function setDarkMode(setting: boolean) {
if (setting === lastSetting) return;
lastSetting = setting;
let process = await Deno.run({
cmd: [
"osascript",
"-e",
`tell application "System Events"
tell appearance preferences
set dark mode to ${setting}
end tell
end tell`,
],
});
await process.status();
}
if (import.meta.main) {
let process = Deno.run({
cmd: ["make", "monitor"],
stdout: "piped",
});
for await (let line of readLines(process.stdout)) {
let m = line.match(/(\d+),(\d+),(\d+),(\d+)/);
if (m) {
let [_, sr, sg, sb, sc] = m;
let [r, g, b, c] = [sr, sg, sb, sc].map(parseFloat);
console.log(c);
setDarkMode(c < 45);
} else {
console.log(line);
}
}
}