KillingMinion

by dearrayco in Circuits > Arduino

255 Views, 0 Favorites, 0 Comments

KillingMinion

WechatIMG89.jpeg

By Yue, Yanan and Hao.

The project conducted as part of the Computational Design and Digital Fabrication seminar in the ITECH masters program.


Some of us unconsciously shake legs all the time. With cellphone in your pocket, this random movements are sensed by the internalized 'Accelerometer'. Via bluetooth sending back to our little machine, a mechanical loop of a simple gear - chain system, which has minion hanged up to a servo, is triggered. The minion will be moved along with the chain and dropped at the end. While you don't even notice what you're keeping doing, R.I.P. Minion!

List of Items

IMG_20190502_162005.jpg

List of Items:

  • 3D Print items:

Platform【servo seating, chain connector, gear】

Minion & coffin

  • Arduino:

UNO R3 Controller Board

830 tie-pin breadboard

Stepper motor(28BYJ48 5V DC)

UNL2003 Stepper Motor driver board

Servo motor

Bluetooth receiver

Piezo buzzer

9V battery with DC

9V battery adapter

330R or higher resistor *2

LED *2

Jumper wires

  • Others

4mm wood sticks(moving tracks)

Chain (tear from Logo car)

M3 bolts and screw drivers

Cellphone (Android)

Assemble the Platform

IMG_20190502_162039.jpg
IMG_20190502_162224.jpg
IMG_20190502_162415.jpg
IMG_20190502_162515.jpg
IMG_20190502_162713.jpg
IMG_20190502_162726.jpg
IMG_20190502_163121.jpg
IMG_20190502_163204.jpg
IMG_20190502_163459.jpg

Stepper motor and servo motor are part of control circuit. Servo motor is connected directly into the 830 tie-pin breadboard and Uno R3 control board, whereas the stepper motor needs to link to UNL2003 Stepper Motor driver board first, then link to the Uno R3 control board.

Circuits and Codes

KillMinion_20190501.png
IMG_20190502_163532.jpg
IMG_20190502_163540.jpg

To control the movements of the chain, the following basic states are considered:

0. Install the App and connect it to the machine via bluetooth. And, start shaking!

1. after signals received, gears started to rotate and the chain start to move at a certain speed.

2. signals continue, till the minion is carried through till the other end of the path, then stepper motor stops and servo motor rotates 90 degree, drops the minion into the coffin.

3. during the chain walking, if the signals stop for an identical period of time, gears reverse and the chain moves back at a very low speed.

4. by reset bottom on Uno R3 control board, or if the reversed movement hit the starting end of the path, procedure is reset.

5. to make things a bit more interesting, some noises are made during the moving and dropping. You can also extend the sound and music module by Apps in your phone. Have fun with that.

#include <Stepper.h>
#include <Servo.h> #include <SoftwareSerial.h> #include "pitches.h"

const int step = 64; const int counterMax = step * 9; int counter = 0;

SoftwareSerial mySerial(7, 8); Stepper stepper(step, 9, 11, 10, 12);Servo myServo;

const int Buzzer = 5; bool isAlive = true;

char data;

int melody[] = { NOTE_CS4, NOTE_CS4, NOTE_CS4, NOTE_CS4, NOTE_CS4, 0, NOTE_CS4, NOTE_CS4, NOTE_CS4,0,NOTE_CS4 }; int noteDurations[] = { 2, 2, 2, 2, 8, 8, 8, 8, 8, 8, 8 };

void setup() { Serial.begin(9600); mySerial.begin(9600); myServo.attach(3); pinMode(4, INPUT); stepper.setSpeed(80);

while (digitalRead(4) == LOW) { stepper.step(-1); } stepper.step(60); }

void loop() { if (mySerial.available() > 0) { while (mySerial.available() > 0){ data = mySerial.read(); } if (counter < counterMax) { mySerial.print("0"); for (int thisNote = 0; thisNote < 11; thisNote++) { int noteDuration = 100 / noteDurations[thisNote]; tone(Buzzer, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(Buzzer); stepper.step(2); counter += 2; } data = 0; } if (counter >= counterMax && isAlive) { mySerial.print("2"); myServo.write(180); for (int thisNote = 0; thisNote < 11; thisNote++) { int noteDuration = 1000 / noteDurations[thisNote]; tone(Buzzer, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(Buzzer); } isAlive = false; } } else if (counter > 1 && counter < counterMax) { mySerial.print("1"); stepper.step(-1); counter -= 1; delay(200); } }

A Test Run

IMG_20190502_163742.jpg
2019SS ITECH CDDF assignment - Useless Machine

All the Files We Can Share

WechatIMG87.jpeg

You can find all the files we can share in this link, including 3d-print models, fritzing circuit diagrams and arduino codings.

https://drive.google.com/open?id=1qImULCJQRdzlon4s...