Introduction: Casper
Casper is a ghost who can move his arms and light up his eyes when someone approaches him. His aim is to scare people who pass in front of him.
In this project, we have put into practice the concepts learnt in the classes of academic uses in specific terminology in English 1, a third year subject in the degree of industrial design engineering at the Elisava University.
To create the phantom, we used a programming code, as well as the creation of a prototype and a mechanism capable of carrying out the movement.
The programming is connected to the physical mechanism by means of an electrical circuit that contains LEDs, sensors and a servomotor that carries out the movement.
The materials used are shown below, as well as the steps that have been followed to make the final prototype. A TinkerCad simulation of how the electronic components are connected is also shown.
Supplies
Step 1: Flow Diagram and Program
The first step was to program the code for our project.
To do the programming, we applied the concepts seen in class. We programmed a sensor so that when it detects an object nearby, the ghost's red LED eyes light up and its arms move to make the white fabric undulate. We wanted to scare people who approached him.
Likewise, we used Tinkercad, an electrical circuit simulator, to test the programming code we were making and to be able to detect its functionality, as well as the mistakes we were making. On the other hand, by assembling the circuit with the components on this platform, we were able to see if we were doing it right. In this way, we will save time in the assembly of the electrical part.
CODE:
#include <Servo.h>
Servo myservo;
int pos = 0;
const int Trigger = 13; //Pin digital 2 para el Trigger del sensor
const int Echo = 12; //Pin digital 3 para el Echo del sensor
int ledPinD = 8;
int ledPinE = 2;
void setup() {
myservo.attach(6);
Serial.begin(9600); //iniciailzamos la comunicación
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
digitalWrite(Trigger, LOW); //Inicializamos el pin con 0
pinMode(ledPinD, OUTPUT);
pinMode(ledPinE, OUTPUT);
myservo.write(0);
}
void loop() {
long t; //timepo que demora en llegar el eco
long d; //distancia en centimetros
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
d = t / 1000; //escalamos el tiempo a una distancia en cm
Serial.print("Distancia: ");
Serial.print(d); //Enviamos serialmente el valor de la distancia
Serial.print("cm");
Serial.println();
delay(100); //Hacemos una pausa de 100ms
if (d < 50 && d != -1) {
digitalWrite(ledPinD, HIGH);
digitalWrite(ledPinE, HIGH);
for (int i = 0; i < 3; i++) {
myservo.write(0);
delay(1000);
myservo.write(40);
delay(1000);
}
myservo.write(0);
digitalWrite(ledPinD, LOW);
digitalWrite(ledPinE, LOW);
}
}
Attachments
Step 2: Electrical Part
The second step was to assemble the electrical part. For this we used the Arduino connected to a breadboard. The breadboard allows us to create and test electronic circuits, without having to print the circuit.
So, we connected two LED lights to the breadboard and the Arduino, each with a series resistor to limit the current flowing and prevent them from burning out. These are connected to the boards with jumper connectors, as they needed to be connected at a great distance from the breadboard.
The servo motor and the sensor are also connected to the boards. The sensor is the HC-SR04 5V ultrasonic distance sensor.
The Arduino powers the breadboard, so we can connect all our components to the power. It is also in charge of storing the program and executing it, so the components will be activated when we want them to be.
As it is an electro circuit it needs to release the energy that enters, for this the breadboard is connected to the ground of the Arduino, to avoid burning the circuit when not being able to release the current.
Step 3: Functional Prototype
Once we had the program code and the electrical part clear, we made a first functional prototype, in order to better develop the internal mechanism that would make the arms stand up. We used foam board, as it is an easy material to work with and at the same time resistant.
We decided to design a 5-bar articulated mechanism in order to have more freedom of movement. It moves thanks to an articulated quadrilateral connected to the motor.
Step 4: Final Prototype
With the idea clear, we decided to make the final prototype. This was on a larger scale, so we had to try to reduce weight and friction so that the servo motor would be able to move it. In order to do this, we carried out the following steps:
1_ Cut the wood for the base and the main structure.
2_ Make the hole to insert the motor.
3_ Making the articulated mechanism. For the bars we chose cardboard to help us reduce weight, we joined them with pins and washers to be able to generate the movement.
4_ Once the mechanism and the main structure are joined, with a half sphere of Styrofoam, we simulate the head of the ghost. We made two small holes to later insert the eyes with LEDs.
5_ The next step was to join the main structure to the base. We put them together using angle brackets.
6_ Finally, cut out the white fabric to cover the inner skeleton and give it the appearance of a ghost.
Step 5: Conclusion
This project has allowed us to put into practice all the content we have worked on in class. Thus, we have used all the concepts and knowledge in a real case.
We have broadened our knowledge of programming and of the different electrical components that exist.
At the beginning of the work we set ourselves an objective, to be able to make, in a larger size, the first functional prototype. As we have observed, this objective has been achieved, since thanks to the mechanism designed, the motor has been able to support a greater weight.
To conclude, we really enjoyed doing this type of project, because we learnt, through programming, how to transfer information from the digital world to the real world.