Arduino Project: Beating Heart

This is a final project for ART364 “Kinetic Sculpture” class at CSULB. I used a Arduino to make a heart-shape light sculpture.


Art Statement

When we think about apocalypse, some might think of nuclear war, artificial intelligence’s singularity, natural disaster, pandemic, and so on. Although these are scary, we do not think it’s gonna happen anytime soon. However, what if I told you that the apocalypse is already happening today?

This piece is the representation of apocalypse we are already in today. We are in the world where technology, consumerism, materialism is deeply rooted in our everyday life. Ever since these became a big part of the humanity, we are not truly living, we’ve become zombies. We are craving for infinite information, online attention, and are consumed by the endless material desire just like zombies craving flesh. The heart in the center represents such humankind who cannot live without illusion of happiness and life. Cubes around the heart represents society which we live in, it’s cold and artificial.

Fabrication Process

I 3D-printed the heart with clear PLA. (3D Model by cicerone) I used a RGB LED to light up the heart. Because it’s a RGB LED, it can create many different colors. There is a ultrasonic proximity sensor facing to the front, and it can make control the LED depending on presence or absence of the audiences. There is also a piezo speaker, and it can mimic the pulse. The mechanical and artificial sound of piezo speaker is usually hard to use in artistic project, but it was perfect for my project. The body of the piece and most of cubes are made with wood. Some of cubes are acrylic.


Arduino Sketch

#define trigPin 6
#define echoPin 5
int led_pins[] = {9, 10, 11};
int speakerPin = 13;

void setup() {

// Setting LED pin as output
int i;
for (i=0; i<3; i++) {
pinMode(led_pins[i], OUTPUT);

Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

void loop() {
int i,j;

long duration, distance;
digitalWrite(trigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;

int a = 0;

if (distance < 150 && distance != 0)


// Fade LED dark to bright
for (j=0; j<3; j++) {
for (i=0; i<256; i++) {
analogWrite(led_pins[j], i);


// Fade LED bright to dark
for (j=0; j-1; i--) {
analogWrite(led_pins[j], i);



digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
tone(speakerPin,880,2000); // play tone A

// Prints the distance on the Serial Monitor
delay (10);




Leave a Reply

Your email address will not be published. Required fields are marked *