SKRT

Moving the personal bubble

Full instructions provided2,302
SKRT

Things used in this project

Hardware components

Arduino Micro
Arduino Micro
×1
Micro Servo - High Torque Metal Gear
×5
Adafruit 16-Channel 12-bit PWM/Servo Driver
×1
Micro LED
×1
Carbon Fiber Rod
×10
Fishing Wire
×1
Acrylic Sheets
×6

Story

Read more

Code

Arduino Code

C/C++
Drives the lights and pulls the servos
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <RunningMedian.h>
  
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN  150 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  600 // this is the 'maximum' pulse length count (out of 4096)
#define trigPin0 9
#define echoPin0 8
#define trigPin1 7
#define echoPin1 6

RunningMedian distSamples = RunningMedian(10);
uint8_t servo0 = 0;
uint8_t servo1 = 1;
uint8_t servo2 = 2;
uint8_t servo3 = 3;
uint8_t servo4 = 4;
int lastDist = 0;


void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("~~~~~~~~~~~");
  
  pinMode(trigPin0, OUTPUT);
  pinMode(echoPin0, INPUT);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);

  pwm.begin();
  pwm.setPWMFreq(60);
  pwm.setPWM(8, 0, 0);
  pwm.setPWM(9, 0, 0);
  pwm.setPWM(10, 0, 0);
  pwm.setPWM(11, 0, 0);
  pwm.setPWM(12, 0, 0);
  
  // Servos 0,2,4 are backwards, resting mode is at max.
  pwm.setPWM(0, 0, SERVOMAX);
  pwm.setPWM(1, 0, SERVOMAX);  
  pwm.setPWM(2, 0, SERVOMAX);
  pwm.setPWM(3, 0, SERVOMAX);
  pwm.setPWM(4, 0, SERVOMAX);
  
}

void moveUp(int servoNum) {
  for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
    // Servonum + 8 is the pin for the lights
    pwm.setPWM(servoNum, 0, pulselen);
    pwm.setPWM(servoNum + 8, 1, 0);
    delay(5);
  }
  pwm.setPWM(servoNum + 8, 0, 0);
}
void moveDown(int servoNum) {
  for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
    // Servonum + 8 is the pin for the lights
    pwm.setPWM(servoNum, 0, pulselen);
    pwm.setPWM(servoNum + 8, 1, 0);
    delay(5);
  }
  pwm.setPWM(servoNum + 8, 0, 0);
}
void doWave(int servoNum, int leftRight) {
  if (true) {
    for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
      // Servonum + 8 is the pin for the lights
      pwm.setPWM(servoNum, 0, pulselen);
      uint16_t invPulse = map(pulselen, SERVOMIN, SERVOMAX, SERVOMAX, SERVOMIN);
      pwm.setPWM(servoNum - leftRight, 0, invPulse);
//      pwm.setPWM(servoNum + 8, 1, 0);
    pwm.setPWM(8, 1, 0);
    pwm.setPWM(9, 1, 0);
    pwm.setPWM(10, 1, 0);
    pwm.setPWM(11, 1, 0);
    pwm.setPWM(12, 1, 0);
      delay(3);
    }
  }
//  pwm.setPWM(servoNum + 8, 0, 0);
    pwm.setPWM(8, 0, 0);
    pwm.setPWM(9, 0, 0);
    pwm.setPWM(10, 0, 0);
    pwm.setPWM(11, 0, 0);
    pwm.setPWM(12, 0, 0);
}




long getDistance(int sensor) {
  int trigPin;
  int echoPin;
  if (sensor == 0) {
    trigPin = trigPin0;
    echoPin = echoPin0;
  } else {
    trigPin = trigPin1;
    echoPin = echoPin1;
  }
    // Get distance from ultrasonic distance sensor
    long duration, distance;
    for (int i = 1; i < 10; i++) {
      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;
      distSamples.add(min(200,distance));
    }
    // Here is the distance
    return 20*floor(distSamples.getMedian() / 20);
}

void loop() {
    
    int medianDist0 = getDistance(0);
    distSamples.clear();
    int medianDist1 = getDistance(1);
    distSamples.clear();
    
    Serial.println(medianDist0);
    Serial.println(medianDist1);
    Serial.println("++++++++");
    // GO!
    if (medianDist1 < 70) {
      moveUp(4);
      doWave(3, -1);
      doWave(2, -1);
      doWave(1, -1);
      doWave(0, -1);
      moveDown(0);
    } else if (medianDist0 < 70) {
      moveUp(0);
      doWave(1, 1);
      doWave(2, 1);
      doWave(3, 1);
      doWave(4, 1);
      moveDown(4);
    }


}

Credits

Andrew Fang

Andrew Fang

6 projects • 2 followers
I am Andrew
Andrea Deng

Andrea Deng

9 projects • 6 followers
designer. dancer. adventurer.
Tessira Crawford

Tessira Crawford

3 projects • 5 followers
Brian C Ly

Brian C Ly

12 projects • 3 followers
Hi my name is Brian and I am a CS student who is interested in how technology has changed how we interact with each other.
Sumer Mohammed

Sumer Mohammed

11 projects • 5 followers

Comments