Because of the Covid-19 pandemic we had to get materials from our teacher so that we could do our project from home. In order to keep track of parts needed for our upcoming project, we labeled all our parts on a cookie sheet. This also helped us keep track of all our parts so we don't leave them. Any lost parts could significantly affect our project quality.
The project brief is the part of the project that we understand the project constraints, and steps to make the project successful. We often read this before we go into the next phase of the design process.
This is an overview of what we are doing in our projects.
These are the different steps, and responsibilities that we have to take to succeed during this project.
This is the part of the project where we find information about how to make the design come out as best as possible. We can conduct client interviews, and understand competitors products to better understand how to make a successful design. We also have to understand how to make designs as clear as possible.
We learned how to make a circuit board diagram online so that we can have both a better understanding of a circuit, and so that we can learn how to show an idea that we have before we make it in real life.
This is our visual documentation of the circuit created on the left. The benefit of using tinkercad is that it can show us a more realistic and visual version of the circuit we are trying to make. One draw back to tinkercad is that they didn't have the same exact servo, so we had to settle for the Arduino micro.
This Arduino draw-bot is using two motors, and two wheels. It is powered a D battery. The breadboard is connected to the Arduino, but if we were to create this we would be using the Arduino nano. The base is made out of wood and everything is held down with rubber bands. In my version I would just screw in the breadboard, and Arduino. I would hot glue the battery.
This robot is also maneuvered by two wheels, with a whole for the pen. Its controlled by two batteries, and two motors just like the last one. However, the wheels are not really balanced like the other one I did. They also used a switch, and screws to hold the servos, and Arduino down. The only thing about this that needs to change is that there is 2 stepper motor drivers. I think I could just use a breadboard.
In this stage we narrow down our ideas to something that we will prototype later. In this stage we also sketch ideas, and take into account how feasible the design is going to be. By doing this we can have a general idea of what you are going to do. In our project we made different CAD models of wiring, and we narrowed down our previous research.
My engineering teacher had a similar design presented during the presentations earlier in the research process, and this one seemed way easier, and could have better outcomes overall in the end. I feel it would be more practical to make a draw-bot this way is because wheels could be very hard to code and make it draw a picture and end up at the same starting point as it originally was. Also with this design you have a more fixed range of drawing, whereas with the original ideas you don't have a fixed staring and ending point which could be troublesome in the coding process as well. Last reason I chose to go with this type of draw-bot is because the ease of manufacturing it would be so much better because only the arm moves not the whole thing, so you don't have to cram all of the wiring into a small area like the ones with wheels. Link to original maker : http://workshopweekend.net/arduino/projects/arcbot
In this stage we can get an understanding of how our product will work, and function. In this phase we will see what changes we need to make in order for it to run perfectly. The more mistakes you make in this process the more you learn about the subject, and the better your project will turn out to be. By using cheap materials, we can do as many tests, and redo's as we want because we can reuse materials over and over again. We did this in our projects, with new codes, and new materials to see what worked and what did not.
This is how my circuit looks in real life. you can see that the brown wires are connected to the ground pin, and the red wires are connected to the 5v pin.
Diagram of my wires in Tinkercad
This is how my draw - bot looks before complex coding a software fixes
In this stage of the project you able to get a peer review of how the prototype works, and what others think you can do to improve of the design. This is generally in the last few prototypes that we do this. This is also usually not the final product that you are displaying, because others will almost always think you can do something to improve of the design. We did not do this for out project because we can not see each other face to face and evaluate the full extent of each others designs.
In this stage all of our design is solidified, and perfected to the best of our abilities. We now should be able to use this perfectly in real world situations. In this step we will also use real, durable, materials that generally cost more to get. But that is ok because this is the final product. The code should also be fully ready for use, and function.
#include <Servo.h>
Servo Shoulder;
Servo Elbow;
int Shoulderpos= 0;
int Elbowpos = 55;
void setup() {
Shoulder.attach(11);
Elbow.attach(9);
}
void loop() {
for (Shoulderpos= 0; Shoulderpos<= 55; Shoulderpos+= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(500);
for (Shoulderpos= 55; Shoulderpos>= 0; Shoulderpos-= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(500);
for (Elbowpos = 0; Elbowpos <= 75; Elbowpos += 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(500);
//this is back
for (Elbowpos = 75; Elbowpos >= 0; Elbowpos -= 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(500);
}
#include <Servo.h>
Servo Shoulder;
Servo Elbow;
int Shoulderpos= 0;
int Elbowpos = 55;
void setup() {
Shoulder.attach(11);
Elbow.attach(9);
}
void loop() {
for (Shoulderpos= 0; Shoulderpos<= 35; Shoulderpos+= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(0);
for (Elbowpos = 20; Elbowpos <= 75; Elbowpos += 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(0);
for (Shoulderpos= 35; Shoulderpos>= 0; Shoulderpos-= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(0);
for (Shoulderpos= 0; Shoulderpos>= 35; Shoulderpos-= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(0);
//this is back
for (Elbowpos = 20; Elbowpos >= 75; Elbowpos -= 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(0);
}
#include <Servo.h>
Servo Shoulder;
Servo Elbow;
int Shoulderpos= 0;
int Elbowpos = 55;
void setup() {
Shoulder.attach(11);
Elbow.attach(9);
}
void loop() {
for (Shoulderpos= 0; Shoulderpos<= 35; Shoulderpos+= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(0);
for (Elbowpos = 20; Elbowpos <= 75; Elbowpos += 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(0);
for (Shoulderpos= 35; Shoulderpos>= 0; Shoulderpos-= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(0);
for (Elbowpos = 20; Elbowpos <= 20; Elbowpos += 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(0);
for (Shoulderpos= 0; Shoulderpos>= 35; Shoulderpos-= 1) {
Shoulder.write(Shoulderpos);
delay(15);
}
delay(0);
//this is back
for (Elbowpos = 20; Elbowpos >= 75; Elbowpos -= 1) {
Elbow.write(Elbowpos);
delay(15);
}
delay(0);
}
This is the finished product of the draw bot that we created in class, and it has three different patterns that it can do. The first pattern is just a simple arc shape. The Elbow and the shoulder move at different times to create this shape. The second on is almost the same shape, however, it almost as if it figure 8's in an arc shape. It also has the elbow and shoulder moving separate, but the code makes the speed slower, and changes the angle to create the figure 8. The third shape is a rhombus shape. The rhombus has three different movements, so that it can create a full shape. The project was fun, and less difficult than I had originally anticipated it being. It still did take some trial, and error, but the shapes were fairly simple once you got the hang of it.
These are the different parts of my draw-bot.
This is an inventory of all of our materials, so that we can move on with the project knowing that we have all the pieces.
This is the base of the robotic arm, and we assembled it in class today. It was assembled using 1 servo, and 5 other pieces.
Today in class we worked on our arm build. This is how far we got. We used spacers, metal rods, and wood sticks.
In today's class we assembled our robotic arm even further. We connected the two 21 hole pieces that we put together in the last classes build. We also added an elbow to the robotic arm using an 29 hole piece.
#include <Servo.h>
Servo left;
Servo right;
int leftpos= 0;
int rightpos = 0;
void setup() {
left.attach(7);
right.attach(4);
}
void loop() {
for (leftpos= 0; leftpos<= 90; leftpos+= 1) {
left.write(leftpos);
delay(15);
}
delay(3000);
for (leftpos= 90; leftpos>= 0; leftpos-= 1) {
left.write(leftpos);
delay(15);
}
delay(5000);
for (rightpos = 0; rightpos <= 90; rightpos += 1) {
right.write(rightpos);
delay(15);
}
delay(3000);
//this is back
for (rightpos = 90; rightpos >= 0; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(5000);
}
This is the installed base for our robotic arm. It helps stabilize it, and it also helps the arm swivel left to right. This is also the robotic arm moving in different directions.
This is a picture of the Actual claw that will be used to pick up objects. It uses one motor that spins one arm of the claw, and using a simple gear-like system it spins the other.
This is a video of a functioning claw. In the video the claw is opening a closing.
This is an updated image of our robotic arm build. This is what the finished product will look like. All that is left is to code.
This is the robot that we built with fully functioning code. It is able to move left, right, up, down, forward, backwards, and the claw is able to open and close.
#include <Servo.h>
Servo left;
Servo right;
Servo base;
Servo claw;
int leftpos= 0;
int rightpos = 0;
int basepos = 90;
int clawpos = 0;
void setup() {
left.attach(7);
right.attach(4);
base.attach(11);
claw.attach(9);
}
void loop() {
for (leftpos= 30; leftpos<= 90; leftpos+= 1) {
left.write(leftpos);
delay(15);
}
delay(1000);
for (rightpos = 80; rightpos <= 110; rightpos += 1) {
right.write(rightpos);
delay(15);
}
delay(1000);
for (leftpos= 90; leftpos>= 30; leftpos-= 1) {
left.write(leftpos);
delay(15);
}
delay(1000);
for (rightpos = 110; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(1000);
for (basepos= 0; basepos<= 75; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(1000);
for (basepos = 75; basepos >= 0; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(1000);
for (clawpos= 144; clawpos>= 40; clawpos-= 1) {
claw.write(clawpos);
delay(15);
}
delay(1000);
for (clawpos = 40; clawpos <= 144; clawpos += 1) {
claw.write(clawpos);
delay(15);
}
delay(1000);
}
This is a video of my arm making the same repetitive movements grabbing an object and moving it to another place. You can see the extension of the arm. This is done by moving the second servo forward and keeping the first servo still. When picking the paper ball up the second servo simply moves the other way. It swivels to another spot using the base servo and drops the object by opening the claw servo.
#include <Servo.h>
Servo left;
Servo right;
Servo base;
Servo claw;
int leftpos= 90;
int rightpos = 35;
int basepos = 0;
int clawpos = 0;
void setup() {
left.attach(7);
right.attach(4);
base.attach(11);
claw.attach(9);
}
void loop() {
for (basepos= 0; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(1000);
for (rightpos = 80; rightpos <= 110; rightpos += 1) {
right.write(rightpos);
delay(15);
}
delay(1000);
for (clawpos= 40; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(1000);
for (rightpos = 110; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(1000);
for (leftpos= 90; leftpos>= 30; leftpos-= 1) {
left.write(leftpos);
delay(15);
}
delay(1000);
for (basepos = 80; basepos >= 0; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(1000);
for (leftpos= 30; leftpos<= 90; leftpos+= 1) {
left.write(leftpos);
delay(15);
}
delay(1000);
for (rightpos = 80; rightpos <= 110; rightpos += 1) {
right.write(rightpos);
delay(15);
}
delay(1000);
for (clawpos = 144; clawpos >= 40; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(1000);
}
A function is when a task is completed using an organised block of code.
A pseudo code is like when you describe the code using regular terminology instead of actual code. To the left is an example of that.
Below is an example of this but using my code instead.
1. My robot makes a downward motion using its arm.
2. My robot reaches out with it's arm.
3. My robot makes an upward motion with it's arm.
4. My robot reaches back to it's original position of it's arm.
5. My robot swivels to the right.
6. My robot swivels to the left.
7. My robot opens it's claw.
8. My robot closes it's claw.
9. The task is repeated until manually stopped.
This is the final code and motions of our robots that we made in class. We had to make the robots start off by moving the base left and right in small 10 degree increments. Once it made it to the next part of the song where it sung "jingle bells" the claws on the robot would open and close quickly. The next part of the song was the verse "snowing and blowing" where the robot would use it's arm to pick up bells. I didn't have the bells but it made the correct motions. The next line was "now the jingle hop has begun." In this line the robot move the base 30 degrees from the center in both directions. The next "jingle bell" lines we again opened and closed the claws. At "Dancing, and prancing" the robot moved 45 degrees from its center to make a 90 degree range of motion. The last step was to move the claw forward from it's original position 45 degrees.
#include <Servo.h>
Servo left;
Servo right;
Servo base;
Servo claw;
int leftpos= 70;
int rightpos = 160;
int basepos = 0;
int clawpos = 144;
void setup() {
left.attach(7);
right.attach(4);
base.attach(11);
claw.attach(9);
for (clawpos= 40; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(1000);
for (leftpos= 90; leftpos>= 70; leftpos-= 1) {
left.write(leftpos);
delay(15);
}
delay(1000);
for (rightpos = 80; rightpos <= 160; rightpos += 1) {
right.write(rightpos);
delay(15);
}
delay(1000);
}
void loop() {
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 70; basepos<= 80; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 80; basepos >= 70; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(10);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(1000);
for (rightpos = 160; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(10);
for (leftpos= 70; leftpos<=80 ; leftpos+= 1) {
left.write(leftpos);
delay(15);
}
delay(250);
for (clawpos = 100; clawpos <= 144; clawpos += 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (leftpos= 80; leftpos>=70 ; leftpos-= 1) {
left.write(leftpos);
delay(15);
}
delay(100);
for (rightpos = 80; rightpos<= 160; rightpos+= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (basepos= 50; basepos<= 110; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 110; basepos >= 50; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos= 50; basepos<= 110; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 110; basepos >= 50; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (clawpos = 144; clawpos >= 100; clawpos -= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);for (clawpos= 100; clawpos<= 144; clawpos+= 1) {
claw.write(clawpos);
delay(15);
}
delay(100);
for (basepos = 135; basepos >= 45; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10); for (basepos= 45; basepos<= 135; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 135; basepos >= 45; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10); for (basepos= 45; basepos<= 135; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (basepos = 135; basepos >= 45; basepos -= 1) {
base.write(basepos);
delay(15);
}
delay(10); for (basepos= 45; basepos<= 135; basepos+= 1) {
base.write(basepos);
delay(15);
}
delay(10);
for (rightpos = 160; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 80; rightpos<= 160; rightpos+= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 160; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 80; rightpos<= 160; rightpos+= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 160; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 80; rightpos<= 160; rightpos+= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 160; rightpos >= 80; rightpos -= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
for (rightpos = 80; rightpos<= 160; rightpos+= 1) {
right.write(rightpos);
delay(15);
}
delay(100);
}
Our project for this semester is to make a functioning pinball machine.
These are the requirements for the pinball machine prototype.
These are the final requirements for the pinball machine project.
These are the things we should master by the time we finish the project.
I like the way this one is made because It is very neatly done, and the pieces were symmetrical throughout the whole board. I also like the amount of slope the board has, and I will likely make my slope similar to this.
This board is more homemade looking, and I like that they have the rubber bands place on the board. I also like how this has many layers.
This Board has some plastic pieces, but these could be easily made out of cardboard. I wish that there was some more objects filled in the middle of the board though.
This is a simple spring loaded pinball machine plunger. I uses a stopper and two springs to launch the ball.
This one is made of wood and is slightly more complex. This does use a rubber band though which is helpful to the design of my pinball plunger. This also uses a gear system to keep three balls in constant rotation with each other.
This one is made with a pre-made kit, but it uses different wires to show results on the board because it's a virtual pinball machine
This one is also made of wood and uses pieces to make a rotational motion for the balls.
Pinball Layout Research 1
I like how many pieces there are to the board in this and how different it looks.
Pinball Layout Research 2
I really like how there are two ramps in this and that one of them goes upside down.
Pinball Layout Research 3
It's cool how there are spinning pieces on the board and that implements a cool part in the game.
Pinball Layout Research 4
I think this is cool because they have several different tracks on this so you can have many different outcomes.
These are the dimensions of the body of my pinball machine.
This is my board layout, and there are several pieces that each provide a different outcome for the ball to go to.
These are pictures of the completed prototype building stage. There are six pictures all from different views of the game board. These also represent the dimensions that were drawn previously.
This is the functioning pinball flippers. They are able to flip the ball to the back of the board easily and with force. The flippers are connected to a block that is pushed by the wood dowel. The rubber band is also attached to the block. This makes it so that the flippers go back to the original position after each launch.
This is the video of my functioning plunger. It consistently hits the back of the board with force, and it also a simply design. It's four pieces of cardboard hot glued together with a hole in each of the them for a rubber band to go through. the rubber band is attached to each side of the board and creates tension when pulled.
This is the simple circuit that had DIN connect to D6, GND connect to GND, and 5V connect to 5V
This is the function code for our neopixel lights.
This is the circuit diagram for the capacitive touch sensor. One ground pin is connected to the end of the light and the other ground pin is connected to the servo motor. Pin D6 is connected to the Aluminium foil. This makes the servo and light activate.
This is the functioning touch sensor that powers an LED and a servo. It follows the same wiring as the diagram to the left.
#include <CapacitiveSensor.h>
CapacitiveSensor Sensor = CapacitiveSensor(4,6);
long val;
int pos;
#define led 13
#include <Servo.h>
int servoPin = 2;
Servo SensorServo;
void setup() {
Serial.begin(9600);
pinMode(led,OUTPUT);
SensorServo.attach(servoPin);
}
void loop() {
val = Sensor.capacitiveSensor(1);
Serial.println(val);
if (val >=1 && pos == 0)
{
digitalWrite(led, HIGH);
pos=1;
SensorServo.write(90);
delay(500);
}
else if (val >= 1 && pos ==1)
{
digitalWrite(led, LOW);
pos = 0;
SensorServo.write(0);
delay(500);
}
}
This is the Circuit Diagram of the working LED controlled by LDR there are wires going from both resistors to the GND pin, and 5V goes to the LDR.
This is the Functioning LED controlled by LDR
//set pin numbers
//const won't change
const int ledPin = 13; //the number of the LED pin
const int ldrPin = A0; //the number of the LDR pin
void setup() {
Serial.begin(9600);
pinMode (ledPin, OUTPUT); //initialize the LED pin as an output
pinMode (ldrPin, INPUT); //initialize the LDR pin as an input
}
void loop() {
int ldrStatus= analogRead(ldrPin); //read the status of the LDR Value
//check if the LDR status is <=300
//if it is, the LED is HIGH
if (ldrStatus <=300) {
digitalWrite(ledPin, HIGH); //turn LED on
Serial.println("LDR is DARK, LED is ON");
}
else {
digitalWrite(ledPin, LOW); //turn LED off
Serial.println("----------------");
}
}
This a diagram of the functioning circuit implemented in the board. It is an LDR controlling an LED.
This is a video of the functioning LED controlled by an LDR in the Board.
//set pin numbers
//const won't change
const int ledPin = 13; //the number of the LED pin
const int ldrPin = A0; //the number of the LDR pin
void setup() {
Serial.begin(9600);
pinMode (ledPin, OUTPUT); //initialize the LED pin as an output
pinMode (ldrPin, INPUT); //initialize the LDR pin as an input
}
void loop() {
int ldrStatus= analogRead(ldrPin); //read the status of the LDR Value
//check if the LDR status is <=300
//if it is, the LED is HIGH
if (ldrStatus <=300) {
digitalWrite(ledPin, HIGH); //turn LED on
Serial.println("LDR is DARK, LED is ON");
}
else {
digitalWrite(ledPin, LOW); //turn LED off
Serial.println("----------------");
}
}
This is the Circuit diagram for the Functioning LDC Scoreboard. All the 5V pins are in RED, all the GND pins are in BLACK, and the rest of the colors are Digital pins.
This is the functioning scoreboard
/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 7 Nov 2016
by Arturo Guadalupi
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld
//https://ictronic.wordpress.com/2016/07/02/interfacing-16x2-lcd-with-arduino-without-potentiometer/ but use 4 and 5 instead of 0 and 1
*/
// include the library code:
#include <LiquidCrystal.h>
int score = 0;
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
//const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 2;
LiquidCrystal lcd(3, 4, 5, 6, 7, 2);
void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
lcd.print(score);
}
This is the circuit diagram of the photo resistor controlling the LED and functioning scoreboard
This is the video of the photo resistor controlling the LED and functioning scoreboard
/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 7 Nov 2016
by Arturo Guadalupi
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld
//https://ictronic.wordpress.com/2016/07/02/interfacing-16x2-lcd-with-arduino-without-potentiometer/ but use 4 and 5 instead of 0 and 1
*/
// include the library code:
#include <LiquidCrystal.h>
int score = 0;
//set pin numbers
//const won't change
const int ledPin = 13; //the number of the LED pin
const int ldrPin = A0; //the number of the LDR pin
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
//const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 2;
LiquidCrystal lcd(3, 4, 5, 6, 7, 2);
void setup() {
Serial.begin(9600);
pinMode (ledPin, OUTPUT); //initialize the LED pin as an output
pinMode (ldrPin, INPUT); //initialize the LDR pin as an input
lcd.begin(16, 2);
lcd.print("hello, world!");
}
void loop() {
int ldrStatus= analogRead(ldrPin); //read the status of the LDR Value
Serial.println(ldrStatus);
//check if the LDR status is <=300
//if it is, the LED is HIGH
if (ldrStatus <=10) {
digitalWrite(ledPin, HIGH);
score +=1;
//turn LED on
Serial.println("LDR is DARK, LED is ON");
}
else {
digitalWrite(ledPin, LOW); //turn LED off
Serial.println("----------------");
}
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
lcd.print(score);
}
This is the final functioning Pin-Ball machine. I wasn't very good at the game, and the touch sensor was very slow to receive information and make a reaction so every time the ball did pass over it; nothing would happen because the ball was moving too fast. So I just showed what it would look like if the ball could me read and received by the touch sensor in time. The video also shows the launcher, and the bumpers holding the ball in the playing area very well.
// include the library code:
#include <LiquidCrystal.h>
int score = 0;
#include <CapacitiveSensor.h>
CapacitiveSensor Sensor = CapacitiveSensor(4,8);
long val;
int pos;
#define led 12
#include <Servo.h>
int servoPin = 2;
Servo SensorServo;
//set pin numbers
//const won't change
const int ledPin = 13; //the number of the LED pin
const int ldrPin = A0; //the number of the LDR pin
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
//const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 2;
LiquidCrystal lcd(3, 4, 5, 6, 7, 2);
void setup() {
Serial.begin(9600);
pinMode (ledPin, OUTPUT); //initialize the LED pin as an output
pinMode (ldrPin, INPUT); //initialize the LDR pin as an input
lcd.begin(16, 2);
lcd.print("hello, world!");
Serial.begin(9600);
pinMode(led,OUTPUT);
SensorServo.attach(servoPin);
}
void loop() {
int ldrStatus= analogRead(ldrPin); //read the status of the LDR Value
Serial.println(ldrStatus);
//check if the LDR status is <=300
//if it is, the LED is HIGH
if (ldrStatus <=50) {
digitalWrite(ledPin, HIGH);
score +=5;
//turn LED on
Serial.println("LDR is DARK, LED is ON");
}
else {
digitalWrite(ledPin, LOW); //turn LED off
Serial.println("----------------");
}
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
lcd.print(score);
val = Sensor.capacitiveSensor(1);
Serial.println(val);
if (val >=5000 && pos == 0)
{
digitalWrite(led, HIGH);
pos=1;
SensorServo.write(180);
delay(1000);
}
else if (val >= 200 && pos ==1)
{
digitalWrite(led, LOW);
pos = 0;
SensorServo.write(0);
delay(50);
}
}
While there was no clear problem; the board had constraints from the client, and had to be made to fit those requirements. The goal of this process is to get an understanding of what we want to accomplish throughout the duration of this whole project. When we understand what the goals for the project are we can make a really high quality product, that is effective, and useful.
We did a lot of research on what the board should look like. This included 13 photos of pinball machines of different types that could be used as inspiration, and four videos of pinball machines functioning in real life. We were mainly trying to figure out what it took to make a good pinball machine body. This is also Important because we can see the successes of people who already completed the project, and learn from them.
We had to make a couple of plans on what our board should look like, and we made so sketched and scaled drawings of what we thought the pinball machine should look like. This was useful in later steps when we had to have dimensions of our board be exactly right, and exactly the way we wanted them to be.
We originally made a prototype of our board, and the it's functions. This was a really good step to show what we could improve on with our final board, and what needs to be kept, and untouched in our final board. This was also important to get an understanding of what we need to make the board, and what makes a good board.
During the feedback step we made videos and put them on an online video sharing platform where students could react to them and give feedback on the videos. This is important to get an understanding of what your board should have fixed, and what is good about it. This is also helpful because it gives you opinions from other people who are doing the same project. I was told to add more obstacles, and make the board more colorful.
On the final iteration of the pinball body design, I made the board a little bit steeper, and smaller. I also made the board more colorful, and made the board filled up with obstacles, and other bumpers. I think these improvements really made my board look good, and complete. This step was to finish the project, and do as well of a job as I could in order to get the best grade possible, and also finish my building constraints with good quality.
05/24 Pathway Reflection
Engineering is the practical design of a good, and/or product. There are several different types of engineers, and they all have to do very different task from one another. They can impact the world in many different ways including making more sustainable ways to impact design, and create a safer experience for users. During my engineering pathway at drew we had several projects and some of them were very difficult in my opinion, but the way we overcame is more important than how we failed because we can learn from that. I would say that the Pinball machine is a great example of this because I was really struggling with the code, and the practicality of the actual project, but I eventually figured it out by asking for help from peers and my teacher. These troubles really helped me progress through the pathway faster and faster. I also had some projects that weren't necessarily hard, but they were really fun. One of those projects was my wooden box that we made in 9th grade. We had to make a hinge for the box which was harder than expected but not because of the design, but because of the craftsmanship. But the box project was really simple, and we worked as a team so we could get it done more quickly. I just liked the environment of the team creating all of our stuff together and creating a final product everyone liked. Overall I liked that the class had multiple projects that we could keep for ourselves, and actually use at our own homes. I also like how interactive the class was, and it wasn't all just taking notes the whole time. The only thing that I would change about the class is that I think that our teacher didn't have the adequate amount of help needed to make the class run as smoothly as possible. I think that impacted our learning process because it didn't allow for the teacher to help everyone at once, and we also couldn't cover everything to a good extent because our teacher had to teach every grade with a different lesson everyday for each class. It quite frankly didn't seem effective for a lot of the time. As much as enjoyed engineering class I think I realized that I'm really not interested in a lot of the fields that engineering has, and the amount of desk time that engineering has really frustrated me. That being said I want to get into government, and study poly-sci in college because it can give me an opportunity to create social change.