Artibot - en porträtt måleri robot (1 / 2 steg)
Steg 1: programvara
Arduino var försedd med en Ethernet-shield så att det kan kommunicera till servern.
För att förklara programvaran, överväga följande ritningen:
I ovanstående modell, vinkel alpha är vinkeln på den första armen från y-axeln och vinkel beta är vinkeln på andra armen från linjen den fortsätter den första arm-riktningen. Detta är vinklarna servomotorer använda som deras värde eller position. R1 och R2 är den första och andra arm längden.
För att beräkna den pen positionen, använder vi dessa ekvationer:
MX = oxe + R1 x sin(alpha)
Min = Ox - R1 x cos(alpha)
x = Mx + R2 x sin(alpha+beta)
y = min - R2 x cos(alpha+beta)
där x växer till höger och y växer ner och origo (0,0) är i det övre vänstra hörnet.
Vi gjorde konverteringen från (alfa, beta) utrymme till bild utrymme i serverkod att göra arduino del enklare. Servern i princip fått en begäran om en viss vinkel alpha och det skulle då gå på alla beta värden, beräkna x, y och karta den till bild utrymme, läsa pixelvärdet och returnera värden för alla betaversioner till arduino.
Ritning sekvensen var stepping axeln (alpha) positionen av en grad och för varje sådan position, flytta armbåge motorn från vissa minsta beta till en maximal beta.
Det allmänna flödet av arduino programvaran var:
1. setup - upprätta anslutning till servern
2. ögla för alpha = minAlpha till maxAlpha
3. Ring servern för att få en sekvens av grå värden för den aktuella alpha
4. hoppa över HTTP svar header-byte och läsa de första byten nyttolast. Detta byte kommer att vara 0 om servern har inga mer data
5. Loop för beta = minBeta till maxBeta
6. Läs nästa tecken som representerar den grå nivån vid nuvarande beta
7. om grå är mörkare än en tröskel, flytta pennan nedåt för 0,5 sekunder, och sedan uppåt (Rita en prick)
8. en gång gjort, göra bara ingenting i en loop - användaren borde trycka på reset-knappen att hämta nästa bild från servern
Arduino skiss källkoden är tillgänglig här: