Paso 3: Combinar motores y sensores de fotocelda
DescripciónEn este paso tomando los tres sensores de fotocelda y utilizarlos para manejar las velocidades del motor. En nuestro código estaremos consultando los motores a base de Motor A o Motor B, basado en donde estén enchufados en el protector de motor y los sensores será 3 Sensor y Sensor 4 Sensor 5, en donde se unen a las lecturas analógicas. Sensor 3 y 4 Sensor los sensores direccionales y Sensor 5 será el sensor de luz ambiental.
Algoritmo de
Para controlar los motores, va a obtener la base de la lectura de todos los sensores de tres primeros (estos se almacenan en photocellReading #).
Entonces las diferencias entre el Sensor de 3 y 5 del Sensor (y guardarlo en photocellDifference1) así como la diferencia entre Sensor de 4 y 5 del Sensor (y guardarlo en photocellDifference2). Esto nos dirá cuánto más brillante los sensores direccionales son del sensor de ambiente. Puesto que la luz que brillo en estos sensores, las lecturas de diferencia deben decirnos cuanta luz está siendo dirigido en cada sensor.
Luego reste photocellDifference1 y photocellDifference2 unos de otros y guardarlo en lrValue. Teniendo esta diferencia, somos capaces de decirle cuánto más luz cada sensor direccional es detección. Si este número es negativo que significa Sensor de 4 tiene menos luz que el Sensor de 3 y más velocidad debería estar orientado al Motor B. Si el lrValue es positivo que significa que 3 Sensor tiene más luz que el Sensor de 4 y más velocidad debe orientarse a Motor.
Código
/*
int photocellReading3; el análogo del divisor de resistencia análoga
int photocellReading4; el análogo del divisor de resistencia análoga
int photocellReading5; el análogo del divisor de resistencia análoga
int photocellDifference1;
int photocellDifference2;
int lrValue;
void setup(void) {}
Serial.Begin(9600);
pinMode (12, salida); A pin inicia canal de Motor
pinMode (9, salida); A pin inicia canal de freno
pinMode (13, salida); Clavija de iniciados Motor canal de B
pinMode (8, salida); Pin de B inicia canal de freno
digitalWrite (13, bajo); Establece la dirección de avance de canal A
digitalWrite (8, bajo); Soltar el freno para el canal A
digitalWrite (12, bajo); Establece la dirección de avance de canal B
digitalWrite (9, bajo); Soltar el freno para el canal B
}
void loop(void) {}
photocellReading3 = analogRead(3); base luz lectura
photocellReading4 = analogRead(4); base luz lectura
photocellReading5 = analogRead(5); base luz lectura
obtener diferencias entre los sensores de los motores y sensor de luz ambiental
photocellDifference1 = (photocellReading3 - photocellReading5);
photocellDifference2 = (photocellReading4 - photocellReading5);
obtener la diferencia entre las dos lecturas
lrValue = photocellDifference2 - photocellDifference1;
control de la velocidad para cada motor basado en lrValue
Si (lrValue < = -120) {}
analogWrite (11, 255);
analogWrite (3, 100);
} else if (lrValue < = -90) {}
analogWrite (11, 224);
analogWrite (3, 100);
} else if (lrValue < = -60) {}
analogWrite (11, 193);
analogWrite (3, 100);
} else if (lrValue < = -40) {}
analogWrite (11, 162);
analogWrite (3, 100);
} else if (lrValue < = -25) {}
analogWrite (11, 131);
analogWrite (3, 100);
} else if (lrValue < 25) {}
analogWrite (11, 100);
analogWrite (3, 100);
} else if (lrValue < 40) {}
analogWrite (11, 100);
analogWrite (3, 131);
} else if (lrValue < 60) {}
analogWrite (11, 100);
analogWrite (3, 162);
} else if (lrValue < 90) {}
analogWrite (11, 100);
analogWrite (3, 193);
} else if (lrValue < 120) {}
analogWrite (11, 100);
analogWrite (3, 224);
} else {}
analogWrite (11, 100);
analogWrite (3, 255);
}
}
Video del control de los motores con sensores de luz
Velocidad de romper
En el código, se puede ver tenemos una larga lista de if else declaraciones controlando la velocidad de cada motor. Este código funciona para nuestra serpiente y nuestra combinación de motor/sensor de la fotocélula. Si han cambiado los materiales para su serpiente o encontrar que estos valores no funcionan para usted, cuando sienta libre cambiar los valores hasta encontrar control de velocidad que trabaja para usted. La serpiente está destinado a trabajar en condiciones de poca luz y a una velocidad bastante rápida. Si desea que su serpiente más lento, por ejemplo, puede que desee ampliar su gama de lrValues en el if else declaraciones, por lo que se llevará una luz de alta potencia dirigida a un sensor antes los motores alcancen mayor velocidad.
También se encontró que cada motor necesita un valor mínimo de velocidad (nuestra era 100) para poder tirar el peso de la serpiente. Nunca podría ser un valor de velocidad de 0 a un motor. Si un motor parar completamente, luego tomaría demasiado trabajo conseguir el motor otra vez en movimiento.
Se encontró que fue más fácil planificar los controles de velocidad en una tabla antes de escribir lo if else declaraciones. Esta era nuestra mesa:
Motor A Motor B
lrValue analógico 3 analógico 11
-∞ →-120 225 100
-→ 119-90 224 100
-→ 89-60 193 100
-→ 59-40 162 100
-39 →-25 131 100
-24 → 24 100 100
→ 25 39 100 131
→ 40 59 100 162
60 → 89 100 193
90 → 119 100 224
120 → ∞ 100 225