Академический Документы
Профессиональный Документы
Культура Документы
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
digitalWrite(S3,LOW);
frequency = pulseIn(sensorOut, LOW);
R=frequency;
Serial.print("R= ");
Serial.print(frequency);
Serial.print(" ");
delay(50);
digitalWrite(S2,HIGH);
read
digitalWrite(S3,HIGH);
frequency = pulseIn(sensorOut, LOW);
G=frequency;
Serial.print("G= ");
Serial.print(frequency);
Serial.print(" ");
59
delay(50);
digitalWrite(S2,LOW);
read
digitalWrite(S3,HIGH);
frequency = pulseIn(sensorOut, LOW);
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
76
77
78
79
80
81
}
else
{
Serial.println();
}
delay(1000);
}
Appendix B
82
Appendix C
83
84