Paso 1: Software
El arduino estaba equipado con un escudo de Ethernet por lo que puede comunicarse con el servidor.
Para explicar el software, tenga en cuenta el siguiente dibujo:
En el dibujo anterior, la alfa de ángulo es el ángulo del primer brazo del eje y y ángulo beta es el ángulo del segundo brazo de la línea la sigue a la primera dirección de brazo. Estos son los ángulos de que los servomotores se utilizan como su valor o su posición. R1 y R2 son las longitudes de brazo primera y segunda.
Para calcular la posición de la pluma, usamos estas ecuaciones:
MX = Ox + R1 x sin(alpha)
Mi = Ox - R1 x cos(alpha)
x = Mx + R2 x sin(alpha+beta)
y = mi - R2 x cos(alpha+beta)
en x crece hacia la derecha y y crece hacia abajo y el origen (0,0) está en la esquina superior izquierda.
Realizamos la conversión de (alfa, beta) espacio para el espacio de la imagen en el código de servidor, para hacer el arduino parte más simple. El servidor básicamente recibió una solicitud para un alfa de cierto ángulo y se luego iterar sobre todos los valores de beta, calcular la x, y y mapa para el espacio de la imagen, leer el valor del píxel y volver los valores de todos los betas a arduino.
La secuencia de dibuja fue paso a paso la posición de los hombros (alfa) por grado y para cada tal posición, mueva el motor codo de algunos beta mínimo a un máximo beta.
El flujo general del software arduino fue:
1. fijar - establecer la conexión con el servidor
2. lazo para alfa = minAlpha a maxAlpha
3. llame al servidor para obtener una secuencia de valores de nivel de gris para alpha actual
4. pasar los bytes de encabezado de respuesta HTTP y leer el primer byte de la carga útil. este byte es 0 si el servidor no tiene más datos
5. lazo para beta = minBeta a maxBeta
6. Lee el siguiente carácter que representa el nivel de gris en la versión beta actual
7. Si el gris es más oscuro que un umbral, mover la pluma hacia abajo durante 0,5 segundos y luego (dibuje un punto)
8. una vez hecho esto, no sólo en un bucle - el usuario debe empujar el botón reset para buscar la siguiente imagen desde el servidor
El código del sketch de arduino está disponible aquí: