Вы находитесь на странице: 1из 28

57

Appendices

Appendix A

Source code

#include <Servo.h>
Servo servoright;
Servo servoleft;
Servo servogripper;
Servo servobase;
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frequency = 0;
int R=0;
int G=0;
int B=0;
int angle = 0;
int angle1 = 0;
int angle2= 0;
int angle3= 0;
void setup()
{
servoright.attach(11);
servoleft.attach(10);
servogripper.attach(12);

58

servobase.attach(9);
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Setting frequency-scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop()
{
digitalWrite(S2,LOW);
read

// Setting red filtered photodiodes to be

digitalWrite(S3,LOW);
frequency = pulseIn(sensorOut, LOW);
R=frequency;
Serial.print("R= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
digitalWrite(S2,HIGH);
read

// Setting Green filtered photodiodes to be

digitalWrite(S3,HIGH);
frequency = pulseIn(sensorOut, LOW);
G=frequency;
Serial.print("G= ");
Serial.print(frequency);
Serial.print(" ");

// Reading the output frequency

59

delay(50);
digitalWrite(S2,LOW);
read

// Setting Blue filtered photodiodes to be

digitalWrite(S3,HIGH);
frequency = pulseIn(sensorOut, LOW);

// Reading the output frequency

B=frequency;
Serial.print("B= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
if (R<94 & R>79 & G<150 & G>129 & B<60 & B>50)
{
Serial.println(" - RED");
for (angle=3; angle <= 3; angle += 1) {
servobase.write(angle);
delay(20);
}
delay(2000);
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);

60

}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <=25; angle += 1) {
servobase.write(angle);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=130; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);

61

}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=25; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(10);
}
}
if (R<188 & R>162 & G<153 & G>130 & B<75 & B>65)
{
Serial.println(" - GREEN");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);

62

}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 35; angle += 1) {
servobase.write(angle);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);

63

delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=35; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(15);
}
}
if (R<138 & R>120 & G<95 & G>81 & B<43 & B>31)
{
Serial.println(" - BLUE");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);

64

delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <=50; angle += 1) {
servobase.write(angle);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down

65

servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=50; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(20);
}
}

66

if (R<50 & R>35 & G<79 & G>65 & B<31 & B>21)
{
Serial.println(" - ORANGE");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 65; angle += 1) {

67

servobase.write(angle);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=65; angle >= 3; angle -= 1) {

68

servobase.write(angle);
delay(15);
}
}
if (R<148 & R>134 & G<165 & G>147 & B<75 & B>65)
{
Serial.println(" - BROWN");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up

69

servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 80; angle += 1) {
servobase.write(angle);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);

70

delay(20);
}
delay(1000);
for (angle=80; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(20);
}
}
if (R<138 & R>125 & G<125 & G>115 & B<60 & B>50)
{
Serial.println(" - GRAY");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
delay(500);
for (angle2=130;angle2>=85; angle2 -= 1) { //up

71

servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 95; angle += 1) {
servobase.write(angle);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);

72

delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=95; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(20);
}
}
if (R<35 & R>30 & G<43 & G>36 & B<20 & B>15)
{
Serial.println(" - PINK");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
delay(100);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close

73

servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 110; angle += 1) {
servobase.write(angle);
delay(15);
}
for (angle1=140;angle1 > 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close

74

servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=110; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(15);
}
}
if (R<40 & R>30 & G<53 & G>45 & B<25 & B>20)
{
Serial.println(" - YELLOW");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}

75

for (angle2=90;angle2<=127; angle2 += 1) { //down


servoright.write(angle2);
delay(20);
}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 125; angle += 1) {
servobase.write(angle);
delay(15);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}

76

for (angle3=128; angle3 >= 90; angle3 -= 1) { //open


servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=125; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(15);
}
}
if (R<50 & R>35 & G<45 & G>30 & B<20 & B>10)
{
Serial.println(" - SILVER");
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}

77

for (angle1=140;angle1 >= 90; angle1 -= 1) { //down


servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
delay(1000);
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <= 140; angle += 1) {
servobase.write(angle);
delay(15);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}

78

for (angle2=90;angle2<=127; angle2 += 1) { //down


servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=140; angle >= 3; angle -= 1) {
servobase.write(angle);
delay(15);
}
}
if (R<110 & R>90 & G<110 & G>95& B<48 & B>38)
{
Serial.println(" - VIOLET");

79

for (angle3=128; angle3 >= 90; angle3 -= 1) { //open


servogripper.write(angle3);
delay(20);
}
for (angle1=140;angle1 >= 90; angle1 -= 1) { //down
servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
delay(1000);
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
for (angle=3; angle <=155 ; angle += 1) {
servobase.write(angle);
delay(15);
}

80

for (angle1=140;angle1 >= 90; angle1 -= 1) { //down


servoleft.write(angle1);
delay(20);
}
for (angle2=90;angle2<=127; angle2 += 1) { //down
servoright.write(angle2);
delay(20);
}
for (angle3=128; angle3 >= 90; angle3 -= 1) { //open
servogripper.write(angle3);
delay(20);
}
for (angle3=90; angle3 <= 128; angle3 += 1) { //close
servogripper.write(angle3);
delay(20);
}
for (angle2=127;angle2>=90; angle2 -= 1) { //up
servoright.write(angle2);
delay(20);
}
for (angle1=90;angle1 <= 140; angle1 += 1) { //up
servoleft.write(angle1);
delay(20);
}
delay(1000);
for (angle=155; angle>=3; angle -= 1) {
servobase.write(angle);
delay(15 );
}

81

}
else
{
Serial.println();
}
delay(1000);
}

Appendix B

82

TCS3200 Color Sensor Datasheet

Appendix C

83

MG995 Servo Motor Datasheet

84

Вам также может понравиться