Projektet kan fästas på valfri textil: en väska, ett gosedjur, en tröja eller, som i vårt exempel i filmen, på ett pennfodral.

(Det går att tvätta projektet försiktigt för hand när det är klart, men batteriet måste tas bort först. Att tvätta sliter dock på ledningarna, så det är bättre att placera elektroniken på något som inte måste tvättas.)

Produkter som används:

Gemma m0

Neopixlar

Batterihållare

Batterier 2 st CR2032

Ledande sytråd

Nålar

Testkablage

Vanlig sytråd

Papper och pennor

Pennfodral eller annan textil

Här är en smidig länk till en färdig varukorg med de varor vi säljer till det här projektet: textilslöjdsprojekt

Vill du köpa en klassuppsättning för 15 elever och 1 lärare, använd den här länken istället.

Kolla gärna vår inspirationsfilm.

Lektion 1: Sy ihop

Börja med att skissa hur du tänker att kretsen ska se ut och fundera på hur du tänker fästa det på din textil. Observera att ledningarna inte får korsa varandra (då blir det kortslutning). (Det går att bygga korsningar om man verkligen vill genom att isolera trådarna i korsningen (enklast med krympslang), men det är säkrare att låta bli.)

Koppla därefter upp kretsen med testkablaget för att se att allt fungerar som du tänkt.

Testa en prototypkoppling först:

När du köper paketet är styrkretsen redan programmerad med ett medföljande program, men det känner inte till de extra två lysdioderna vi ska sy dit, så vi behöver lägga till ett annat program.

Koppla in Gemman med en USB-kabel till datorn. Gemman kommer dyka upp som en extern disk. Var alltid noggrann med att mata ut den externa disken innan du drar ur kontakten, så slipper du eventuella problem med att Gemman fastnar i ett konstigt mellanläge.

Kopiera hem filen som presenteras nedan och spara den med namnet code.py

# elektrisk textilslöjd del 3

import time
import board
import neopixel
import adafruit_dotstar as dotstar

# led på Gemma M0
dot = dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1, brightness=0.1)

pixel_pin = board.A0 # neopixlarnas utgång
num_pixels = 2 # antal neopixlar i slingan
num_leds = num_pixels + 1 # antal leds inklusive den på Gemma M0
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.1, auto_write=False)


def wheel(pos):
    # Input a value 0 to 255 to get a color value.
    # The colours are a transition r - g - b - back to r.
    if pos < 0 or pos > 255:
        return (0, 0, 0)
    if pos < 85:
        return (255 - pos * 3, pos * 3, 0)
    if pos < 170:
        pos -= 85
        return (0, 255 - pos * 3, pos * 3)
    pos -= 170
    return (pos * 3, 0, 255 - pos * 3)

def calc_wheel_pos(led_index, j):
    return ((led_index * 256 // num_leds) + j) & 255


def rainbow_cycle(wait):
    for j in range(255):
        for i in range(num_pixels):
            pixels[i] = wheel(calc_wheel_pos(i, j))
        pixels.show()
        dot[0] = wheel(calc_wheel_pos(num_pixels, j))
        dot.show()
        time.sleep(wait)

while True:
    rainbow_cycle(0)  # Increase the number to slow down the rainbow

Dra och släpp den till Gemma-disken, så ska det nya programmet börja köras automatiskt.

  • Stäng av Gemman innan du börjar prototypkoppla och koppla även bort USB-kabeln.
  • Anslut en svart kabel från GND på Gemma till – på första neopixeln.
  • Anslut en röd kabel från Vout på Gemma till + på första neopixeln.
  • Anslut en kabel av någon annan färg (till exempel blå) från Gemmas digitala utgång D1 till anslutningen med en pil in mot dioden på första neopixeln.
  • Anslut en micro-USB-kabel som ger Gemman +5V till micro-USB-ingången på Gemman. Alternativt stoppa i två CR2032 i batterihållaren och koppla in den på Gemmans batteriingång.
  • Sätt switchen på Gemma till On.
  • Njut av den blinkande dioden!
  • Stäng av Gemman och koppla ifrån strömmen. Koppla därefter in även nästa neopixel på samma sätt.

Dags att sy:

  • Fäst tråden på undersidan av tyget till exempel genom att slå en knut. Börja med exempelvis jordledningen. Sy några extra varv i Gemmans anslutning så den säkert får kontakt. Sy därefter med förstygn till den första dioden. Sy några varv i neopixelns -ingång och sy vidare mot nästa neopixel. Fäst tråden några varv i andra neopixelns -ingång och fäst den därefter på baksidan.
  • Sy övriga ledare på samma sätt. Observera att den blå ledaren sys i två delar och inte kopplas ihop hela vägen.
  • Ledarna får inte korsa varandra eller ha kontakt – då blir det kortslutning och dioderna kommer inte lysa.
  • Det är viktigt att sy några varv extra runt anslutningspunkterna för att det säkert ska bli kontakt.
  • Sy fast Gemman med vanlig sytråd i underlaget. Använd några av de oanvända anslutningarna.
  • Sy fast batterihållaren och fäst gärna kablarna mellan den och Gemman lite på vägen som dragavlastning.

Tips:

  • Skissa först hur kretsen är tänkt att sys för att ha kontroll på att inga trådar behöver korsas. Det går utmärkt att använda sömmen som ett dekorativt inslag, så det är inte nödvändigt att sy kortaste vägen.
  • Vaxa gärna tråden så håller den ihop bättre och blir enklare att sy med.
  • Klipp tråden med något annat än den finaste sysaxen – det är metalltråd.
  • Klipp av ungefär så lång bit som behövs till just den slinga som ska sys. Tråden slits snabbt och fransas lätt upp för varje gång den dras genom tyget.
  • Om något behöver repas upp är det bättre att ta ny tråd än försöka återanvända den.
  • Testa ofta så blir det lättare att felsöka. Sy till exempel en anslutning och testa resten med kablar. Funkar det fortfarande? Fortsätt sy.

Felsökning:

  • Har tråden fransats upp någonstans så att något får kontakt som inte borde ha det?
    • Klipp bort lösa småtrådar och limma eventuellt sömmen med textillim.
  • Är kretsen glapp? Det vill säga funkar den ibland och om du böjer på tyget?
    • Du kan behöva fästa komponenterna ytterligare med sytråd för att de ska sitta stilla och kanske sy lite extra runt paddarna (anslutningspunkterna på komponenterna) med ledande tråd.

Om du dekorerar ett pennfodral, tänk på att inte lägga metallsaker i det som skulle kunna kortsluta kretsen. Alternativt, sy ett foder!

Lektion 2: Programmera hela härligheten

Kolla gärna in vår inspirationsfilm först.

Vårt program använder den inbyggda lysdioden på Gemman samt de två ditsydda och växlar dem alla i en kontinuerlig regnbåge.

Programmeringsspråket som används heter Python. Vi har skrivit en introduktion till programmering i Python här om du vill fördjupa dig.

Annars är det bara att kasta sig in och redigera koden försiktigt. Du kan använda valfri texteditor, men en lättanvänd variant är mu som även Adafruit själva rekommenderar. Du kan läsa mer om den här.

Det fiffiga med Gemma M0 är att koden automatiskt kompileras och laddas upp varje gång du trycker på spara, så det har blivit väsentligt mycket enklare att programmera själv än det var med tidigare versioner av Gemma.

Det du ska vara uppmärksam på är att Python använder indentering för att hålla reda på hur funktionerna hänger ihop (istället för exempelvis parenteser som är vanligt i andra programmeringsspråk) och är därför extremt känsligt för antalet mellanslag och tab:ar. Tänk på detta när du börjar redigera koden eftersom så lite som ett mellanslag på fel ställe kan få koden att sluta fungera.

Ett annat exempel som du kan testa istället fokuserar bara på de ditsydda dioderna, men går igenom olika färger och blinkmönster.

# CircuitPython demo - NeoPixel

import time

import board
import neopixel

pixel_pin = board.A0
num_pixels = 2 # Antalet ditsydda dioder

pixels = neopixel.NeoPixel(pixel_pin, num_pixels,
                           brightness=0.3, auto_write=False) # brightness anger ljusstyrkan i procent, 0.3 = 30%


def wheel(pos):
    # Input a value 0 to 255 to get a color value.
    # The colours are a transition r - g - b - back to r.
    if pos < 0 or pos > 255:
        return (0, 0, 0)
    if pos < 85:
        return (255 - pos * 3, pos * 3, 0)
    if pos < 170:
        pos -= 85
        return (0, 255 - pos * 3, pos * 3)
    pos -= 170
    return (pos * 3, 0, 255 - pos * 3)


def color_chase(color, wait):
    for i in range(num_pixels):
        pixels[i] = color
        time.sleep(wait)
        pixels.show()
    time.sleep(0.5)


def rainbow_cycle(wait):
    for j in range(255):
        for i in range(num_pixels):
            rc_index = (i * 256 // num_pixels) + j
            pixels[i] = wheel(rc_index & 255)
        pixels.show()
        time.sleep(wait)

# Här kan du definiera egna färger, eller byta nyansen på de förprogrammerade
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)

while True:
    pixels.fill(RED)
    pixels.show()
    # Increase or decrease to change the speed of the solid color change.
    time.sleep(1)
    pixels.fill(GREEN)
    pixels.show()
    time.sleep(1)
    pixels.fill(BLUE)
    pixels.show()
    time.sleep(1)

    color_chase(RED, 0.1)  # Increase the number to slow down the color chase
    color_chase(YELLOW, 0.1)
    color_chase(GREEN, 0.1)
    color_chase(CYAN, 0.1)
    color_chase(BLUE, 0.1)
    color_chase(PURPLE, 0.1)

    rainbow_cycle(0)  # Increase the number to slow down the rainbow

Lycka till!