Light Plotter with Intel Edison (12 / 16 steg)

Steg 12: XY-koordinater från ett SVG (Python kod)



Intro

Vi behöver ett enkelt sätt att skapa bilder som vi vill uppmärksamma, så jag valde att rita SVGs (scalable vector graphics) hjälp Inkscape (som är gratis). En SVG är faktiskt en XML-baserad filtyp, så du kan tolka det enkelt nog med python. Det kan bli mycket komplicerat, men om vi begränsar våra ritningar till sökvägen objekt, det är enkelt.

Python koden jag har skrivit nedan kan köras på din dator så att du kan visa utdata, när du förstår det är det lätt att genomföra samma sak på Edison i vår controller.

Ritning

Första intakt inkscape och dra något enkelt med linjeverktyget (min ritning av Intel-logotypen bifogas)

Se till att koordinaterna är inställda till absolut på följande sätt:

  1. Skift + Ctrl + p
  2. ingång/utgång
  3. SVG-utdata
  4. sökvägen data
  5. sökvägen strängformat: absolut

Om du rita komplicerade banor eller använda spårning verktyg, se till att först "bryta isär" stigar eller skriptet inte kommer att hantera dem.

När du har tillämpat den inställningen, markera hela bilden (ctrl + a) och flytta den till uppdatera koordinaterna och spara som en svg

Använda absoluta koordinater dramatiskt minskar den bearbetning som vi behöver göra för att vända ut SVG banor i linjesegment definieras av parar av x, y koordinater.

Python-koden

Här är en liten bit av python kod som läser i en SVG-fil och använda "minidom"-modulen, analyserar filen för banor.

Varje väg består av en serie av kommandon (som är "eller"L") följt av en koordinat. Här är några exempel (Läs detta för praktiska detaljer: länk):

  • Är "betyder,"flytta pennan till denna koordinat"
  • är "medel"flytta pennan detta långt, släkting till nuvarande position"
  • "L" betyder, "flytta pennan till denna koordinat, medan du ritar en linje"
  • är "medel"flytta pennan detta långt, släkting till nuvarande position, medan du ritar en linje"
  • "Z" eller "z":. "Rita en linje tillbaka till där vi började (nära formen)

Jag valde bara att ta itu med "M", "L" och "Z" i det här exemplet, därav kravet på absoluta koordinater.

Jag har även tagit lite kod som använder Matplotlib (ett python plotting verktyg) att dra SVG och spara den som en PNG för visning.

importera minidom från xml.dom
importera re

klass svgHandler:

def __init__(self):
Self.filename = ""
Self.Lines = [] #list segment av formuläret [x 0 y0 x1 y1 RGB] där x och y är 0-1 flyter

def importFile(self,filename):
doc = minidom.parse(filename) # parseString finns även
banor = doc.getElementsByTagName('path')
doc.unlink()
pathsandcolours =]
Self.Lines =]

"""
Gå igenom banorna och förvara sina samordna strängar och färger i en lista över tupler
"""
för p i sökvägar:
styleValues = p.attributes['style'].value.split(";")
val i styleValues:
om val.split(":") [0] == "stroke":
RGB = val.split(":") [1]
pathsandcolours.append((p.getAttribute('d'),RGB))

"""
För varje sökväg och dess motsvarande färg, konvertera till en uppsättning av linjesegment i formuläret [x 0 y0 x1 y1 RGB]
"""
xMin = float("inf")
xMax =-float("inf")
yMin = float("inf")
yMax =-float("inf")
unScaledLines =]

för väg, rgb i pathsandcolours:
pathCoords = re.split(r'([CcLlMmZz])',path)
startX = 0
startY = 0
lastX = 0
lastY = 0
newLine = sant
closeLine = False
#we utgår från absoluta koordinater i SVG

skriva ut pathCoords
för coord i pathCoords:
Coord = coord.strip()
om len(coord) == 0:
passera
Elif coord == är ': # är "är flytta markören till absolut position
newLine = sant
Elif coord == 'L': #' L' är Rita linje till absolut position
newLine = False
Elif coord == "Z" eller coord.strip() == "z": #close linje till första punkten
closeLine = sant
annat:
försök:

x = float(re.split(r'[\s,]',coord)[0])
y = float(re.split(r'[\s,]',coord)[1])
xMin = min(xMin,x)
yMin = min(yMin,y)
xMax = max(xMax,x)
yMax = max(yMax,y)

om closeLine:
lastX = x
lastY = y
startX = x
startY = y
unScaledLines.append([lastX,lastY,startX,startY,rgb])
Elif newLine:
lastX = x
lastY = y
startX = x
startY = y
annat:
unScaledLines.append([lastX,lastY,x,y,rgb])
#self.lines.append([lastX,lastY,x,y,rgb])
lastX = x
lastY = y
utom:
skriva ut "ohanterat kommando:", coord

#print "xMin, yMin", xMin, yMin
#print "xMax, yMax", xMax, yMax

xTotal = xMax-xMin
yTotal = yMax-yMin

för x0, y0, x 1, y1, rgb i unScaledLines:
X0normalised = (x0-xMin) / xTotal
X1normalised = (x1-xMin) / xTotal
Y0normalised = (y0-yMin) / yTotal
Y1normalised = (y1-yMin) / yTotal
Self.Lines.append([X0normalised,Y0normalised,X1normalised,Y1normalised,RGB])

def plotPath(self):
importera matplotlib.pyplot som plt
PLT.GCA().invert_yaxis()
för x0, y0, x 1, y1, rgb i self.lines:
skriva ut int(rgb[1:3],16),int(rgb[3:5],16),int(rgb[5:7],16)
PLT.Plot([x0,x1],[y0,Y1],Color=RGB)
PLT.savefig(Self.filename.Split('.') [0] + ".png")
PLT.show()

svgh = svgHandler()
svgh.importFile("example.svg")
svgh.plotPath()

Se Steg
Relaterade Ämnen

Cloud seismograf med Intel Edison

Vi är en grupp av beslutsfattare som vill tillbringa nätter och helger knorramed tecnology här på Verona FabLab (Verona är en stad i norra Italien) och med detta instructable vill vi beskriva projektet vi har insett för Intel Maker contest.Detta proj...

Geiger ryggsäck med Intel Edison

Vi är en grupp av beslutsfattare som vill tillbringa nätter och helger mixtra med tecnology här på Verona FabLab (Verona är en stad i norra Italien) och med detta instructable vill vi beskriva projektet vi har insett för Intel Maker contest.Vårt proj...

Intel Edison Sensor Dashboard med fribord/Python/kolv (minimal programmering krävs)

Först ville jag säga tack för möjligheten att arbeta med en Edison och ges en vid Intel/Instructables för att ange deras IoT tävling. Jag tror att detta är ett bra sätt att göra samhällsbyggande och uppmuntra utvecklare att få engagerade och ombord....

Göra ett intelligent skrivbordsklockan, skriven i JavaScript, drivs med Intel Edison

Varför min klockor måste vara mer intelligent...Jag ställa alltid in påminnelser för min kalender möten men när denna lilla "XYZ möte börjar i 15 minuter" desktop anmälan dyker upp i hörnet på min datorskärm jag trycker på Snooze eller Stäng kna...

WiFi baserade hemautomation av Intel Edison och banan Pi M1

#IntelIoT #2015HackNTUHej! Människor,Detta är projektet jag gjort ensam under den nationella Taiwan Univ. Hackthon, sedan 21 augusti 2015 till 23 augusti 2015 i Taipei. Jag försökte göra något kunde vara till hjälp för de Taiwaness vars ålder är gamm...

BeatBox: chock spårning för paket med Intel Edison - Intel IOT

Hej allaVi kom precis tillbaka hem efter deltagande till Intel IoT Roadshow (och hackathon) i London.Det var fantastisk och full av idéer och kreativa drar. En mycket bra erfarenhet. Du borde prova.Vi kom som en redan bildade lag och med en mycket br...

Intellekten IoT EDI - övervakning en bekväm och säker miljö (med Intel Edison)

Innan för att starta, jag skulle vilja tacka Intel och Instructables för tillfället: Jag har valts bland annat vinnaren av en fantastisk Intel IoT Edison & Grove Kit... Det var mycket förvånande för mig, och jag är mycket tacksam för det. Tack! :-)In...

Intel® Edison Hands-on dag 1: Tryckknapp

Låt oss göra det enklaste exemplet! Tryck på knappen för att slå på lampan.Komponent som krävs1 × digital piranha LED ljus-modul1 × digital tryckknapp1 × IO Expansion sköld1 × Intel® Edison med Arduino Breakout KitSteg 1: anslutning Digital tryckknap...

Intel® Edison Hands-on dag 3: Tända dimmer

Lätta dimmers är anordningar som används för att variera ljusstyrkan påen ljus. Med en rotation sensor, kan vi finjustera intensiteten i ljuseffekt. Du rotera mer ratten, desto ljusare LED. Så låt oss försöka göra en dimmer av oss själva.Rotationen s...

Intel® Edison Hands-on dag 5: Röst aktiverat lampa

Röst aktiverat lampaHade du någonsin varit nyfiken på den röststyrda glödlampan i din barndom? Hade du någonsin stämplade och om igen och bara slå på ljuset? Så länge du klappa händerna, kommer ljuset att vända på. I detta avsnitt kommer vi göra såda...

Intel® Edison Hands-on dag 6: Sensor lampa

I detta avsnitt kommer vi försöka göra en sensor lampa. Närnågon går förbi sensor lampa, LED kommer att automatiskt på. Naturligtvis blir det om ingen är runt. I detta exempel väljer vi PIR rörelsesensor. Det gör att du kan upptäcka om någon har flyt...

Intel® Edison Hands-on dag 7: Lysande Treasure Box

Självlysande skattkista, namnet låter kul. Och det skulle vara riktigt roligt! Vi kommer att göra denna box, som kommer att vara stängd under dagen, en gång i natt, dess ljus får ljusare med rutan öppnas långsamt. Ha-ha... det inre arbetet i rutan är...

Lösa Sudoku med Intel Edison

Mål• Från en bild av en Sudoku pussel, extrahera och (valfritt) lösa pussel.Målet element• Packa pussel från bilden (omforma bilden).• Identifiera talen i varje cell. – Korrelera nummer till deras respektive cell position.• (valfritt) lösa pussel och...

TEAM INVERKAN! Smart hjälm - Intel Edison, Sparkfun 9DOF

Intellekten Edison med Sparkfun 9DOF LSM9DS0 IMU3: e plats @ Intel IoT Roadshow NYC 2015Detta Instructable är för en Intel Edison IoT Smart hjälm som använder en Sparkfun 9DOF att samla in data från hjälmen för att mäta huvudet tramas och skapa en 3D...

Remote bil övervakning och spårning med Intel Edison

Jag är vanligtvis mångordig, men för denna del ska jag försöka vara kortfattad. Detta projekt är:En Intel Edison + en GPS-mottagare + en Bluetooth OBD-II läsare (tillval eftermarknaden bil sensorer) + en bil.Lägg i några program och du kan övervaka p...

MCU-1: En budget-medvetna Intel Edison MCU baserat Rover leksaksbil. (Intel IoT)

Liten video visar hinder skatteundandragande och få knappen baserat kommandon via bluetooth.Steg 1: SammanfattningDetta projekt kommer att bygga en enkel rover bil som kan styras av en android smart app med röst eller knappen baserat kommandon distan...

Intel Edison IoT remote miljöparametrar monitor

Detta är en mycket grundläggande projekt helt gjord i javascript genom IDE "Intel XDK IoT edition". När du är klar, har du ett system för att övervaka miljöparametrar (temperatur, ljus och luft kvalitet), lokalt i LCD-skärmen och på distans via...

IoT NFT Aquaponic System Controler med WebApp (Intel Edison & Node.js)

KretsloppsodlingAquaponic kombinerar vattenbruk (odla fisk) med Hydroponics (odling i vatten). Fisk utsöndrar bryts ner av bakterier till nitrat som absorberas av växter som näringsämnen, och plantera rötter agera som ett filter till rent vatten för...

Kontrollerande julbelysningen med Intel Edison + Grove Smart Relay

Detta Instructable guidar dig genom processen att använda Intel Edison styrelsen och Grove Smart reläet för att styra Christmas lights (eller andra elektroniska objekt för den delen).I slutet av detta Instructable har du ett eluttag wired att bara ha...