Week 10 – Output Devices

This week is basically about creating physical output such as light, motion or sound. The output might be based of the input data that we captured during the last week. I may develop a new controller or use the one that I developed during electronic production week.

Describe

AI prompt: ""


Assignment Overview

Group Task:
  • Measure the power consumption of an output device
Individual Task:
  • Add an output device to a microcontroller board you've designed, and program it to do something

Weekly Activity Log
Day Activity Status
Thursday Class, Group Assignment 📐 and Group Assignment Documentation📝 Pending
Friday Week Planning 📅, LAB Activity 🛠 and Documentation 📝 Pending
Saturday Brainstorm for Machine Building week Pending
Final Project 🛠 and Documentation 📝 Pending
Sunday Watch Input Week 📺 Pending
Monday LAB Activity 🛠 Pending
Reflection and Learnings 💡 Pending
Complete Documentation - Regional Review 📝 Pending
Tuesday Regional Review 👨‍🏫💬 Pending
Lab Activity 🛠 Pending
Watch Prof. Neil’s 2025 Lectures 📺 Pending
Wednesday Go the Extra Mile - On Final Project⚙️ Pending
NuEval - Final Documentation 🏁 Pending
Make instagram Reel 🎬🚀 Pending

Group Assignment

As part of the group assignment, we calculated the power consumption of a servo motor and Neopixel LEDs using bench power supply.

Group Assignment


Output Device - Neopixel

As my project is on integrating Neopixel RGBs with Traditional embroidery work I choose to work with Neopixel WS2818B in my output device week.

These Neopixel are connected in series supply pins and ground pins of all Neopixels are connected and data-out of first is connected to data in of next Neopixel , the first one takes off it's values and passes on the information to next one, the next one takes it off and my message hops through them.

WS2818B is the IC inside the NEOPIXEL 5050. The package 5050 is from Adafruit Industry.

PIN Functions

  • Pin 1: VDD power supply
  • Pin 2: DOUT Control Data Signal Output
  • Pin 3: VSS Ground
  • Pin 4: DIN COntrol Data pin signal input

Absolute values

Absolute Maximum Ratings
Parameter Symbol Ratings Unit
Power supply voltage VDD +3.5 ~ +5.3 V
Input voltage VI -0.5 ~ VDD + 0.5 V
Operation junction temperature Topt -25 ~ +80 °C
Storage temperature range Tstg -40 ~ +105 °C

Microcontroller Board

While designing my week 8 electronic production I added totaL 4 Neopixels one connected to Pin D10 and 3 connected to pin D10. I added them already because I knew that my project involves Neopixels as output device.

Week 8 PCB Board
  • Pin D9 has 3 Neopixels
  • Pin D10 has 1 Neopixel

My Objective in testing Neopixel:

  • Understand the Neopixel Protocol
    • Single-wire Control, Self-Clocking (no separate clock wire)
    • Each Neopixel needs 3 bytes of data (Red, Green, Blue) - Total 24bits
    • Thus after transmission for each pixel,the data is reduced 24bit
    • Operates at roughly 800kHz (1.25us per bit)
    • After the data for the entire strip is sent, the data line is held low for a reset period typically >50µs
  • Power Measurement deciding battery rating
  • To measure power, I planned to turn on 1 Neopixel with White color with different brightness levels.

    Arduino Code
    
    #include   // Include NeoPixel library
    #define PIN        D9  // Define NeoPixel data line
    #define NUMPIXELS  3   // Total no. of NeoPixels at D9
    
    // Create an object named 'pixels'
    // Parameters:
    // 1. Number of LEDs
    // 2. Pin used for communication
    // 3. LED type + signal speed (GRB order + 800kHz timing)
    Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    
    void setup() {
    
      pixels.begin();  
      // Initialize NeoPixel communication
      // Sets the pin as OUTPUT and prepares internal buffers
    
      pixels.setBrightness(50);  
      // Set overall brightness (0 to 255)
    }
    
    void loop() {
    
      // Loop through each LED (index 0 → 2)
      for (int i = 0; i < NUMPIXELS; i++) {
    
        pixels.setPixelColor(i, pixels.Color(255, 255, 255));  
        // Set color of LED at position 'i'
        // pixels.Color(R, G, B)
        // (255,255,255) = White (full intensity of all colors)
      }
    
      pixels.show();  
      // VERY IMPORTANT:
      // Sends all color data to LEDs
      // Without this → LEDs will NOT update
    }
              

    Brightness level range : 0 to 255

    • Brightness Level 005 --> Voltage 5.016V --> Current 0.044A --> Power 0.202W
    • Brightness Level 050 --> Voltage 5.033V --> Current 0.052A --> Power 0.263W
    • Brightness Level 100 --> Voltage 5.033V --> Current 0.060A --> Power 0.303W
    • Brightness Level 150 --> Voltage 5.033V --> Current 0.072A --> Power 0.362W
    • Brightness Level 200 --> Voltage 5.025V --> Current 0.080A --> Power 0.402W
    • Brightness Level 255 --> Voltage 5.033V --> Current 0.092A --> Power 0.462W
    • ESP-32C6 Consumption --> Voltage 5.025V --> Current 0.044A --> Power 0.222W
  • Identify the way of portable/battery 5V power supply for LEDs
  • Control the Neopixel with PIOs customizable processor around the main processor
  • Develop program blocks based on Niel's Micropython Library
  • Use array for RED, GREEN and BLUE value
  • Use PWM to control the LEDs

Charlieplexing

I designed a microcontroller board using ATTiny 1624 and LED Matrix of 5 Rows and 4 Columns as (n) x (n-1). The Charlieplexing concept states that I can control (n) x (n-1) LEDs using n pines of a micro-controller. Thus, here I can control 20 leds using 5 pins of micro-controller ATTiny 1624 IC.

Schematic Design

As I wanted to embed the PCB into clothing, I wanted to make the matrix with in 30mm x 30mm area the so I need to go for double layer PCB.

Because of time constrain and under pressure, I chose to use Autoroute tool to trace the paths, however the DRC gave about 344 errors of Trace width and and Trace spacing and made the circuit very complex.

Using KiCad Plugging Tool - "Freerouting"

What Went Wrong

Because of time constrain and under pressure, I chose to use Autoroute tool to trace the paths, however the DRC gave about 344 errors of Trace width and and Trace spacing and made the circuit very complex.

What I Learned

My instructor advice me to do manual routing, even though it takes time. Then I figure out optimal way of doing manual and auto routing.

  • First, draw a pencil sketch of micro-controller PIN layout and optimally arrange de-coupling capacitors, pull-up resistors, TX/RX straight connection, SDA and SPI lines, Power and GND lines.
  • Second, I arranged the components I placed the LEDs at proper equal distance to have symmetric placing and then connected columns and planned to connect row on the Kapton take 3 layers
  • Third, I flipped the properly arranged components and moved within the edge-cut layer boundary.
  • Forth, after completing above 60-70 % traces manually, and leave the traces that can not be routed, then perform autorouting. The unroute traces will be connected by vias by freerouting tool.
  • Fifth, check the positions of Vias and very nearer traces, and rearrange them.
  • Last, do the DRC - design rule check.

AS this was the complex circuit, I got feedback in the regional review of making 3-Layer PCB, making third layer of connections on Kapton Tape. This I remover the connection that I wanted on Kapton tape from the PCB schematics, so that the Freerouter do not route them and I can connect them later.

Double-Layer PCB Milling

I first time tried the double layer PCB milling in my fab academy journey.

Double-Layer PCB Milling
TOP and BOTTOM Layers

What Went Wrong

At the step-3 after top layer outline cute, I flipped in the wrong direction and thus the via-holes for top layer and trace of bottom layer was not matching after step 4, which is bottom layer tracing.

Mismatch

What I Learned

Always double check the alignment of vias and bottom layer traces of before starting the Trace Bottom layer operation. I milled the PCB again.

3-Layer PCB Fabrication

The Steps I followed are:

  • First, solder the via-holes.
  • Second, solder the top LED-Matrix layer.
  • Third, solder the bottom layer starting with ATtiny first and then other components.
  • Forth, leaser cut the Kapton Tape.
  • Fifth, placed the kapton tape and soldered the third layer.
Components
Top layer and Bottom layer

Then, I downloaded the top trace layer PNG without traces it included only pads and outline. and Then I used Gimp to edit the PNG.

Gerber2PNG Plugin

I used Gimp, I selected the Brush and then adjusted it's size, aspect-ratio, and hardness. and then drew the black pads (basically connecting the LED pads vertically to have LED cutout).

Gimp to edit PNG
Gimp to edit PNG
Inverted the Image on GIMP (by using Tools --> Invert)

I used xTool F1 Ultra to cut the Kaptop tape for third layer and followed the steps in this Week 8th Group Assignment. First I downloaded, installed and open the xTool Studio 1.6.6.

We need to either convert the SVG in the xTool SW or we need to use already converted SVG using Inkspace. I already have the file that I converted to SVG using Inkscape. Now I clicked New project --> Import SVG --> Verify the Scale --> Set the frame --> set the material --> Set power 90% --> set speed between 1500-3000 --> no. of pass 5 --> repeat operation multiple time until it is you see while line on the cutting path.

Test and Validation coming soon....!!

What Went Wrong

What I Learned

Always double check the alignment of vias and bottom layer traces of before starting the Trace Bottom layer operation. I milled the PCB again.


Downloads & Useful Links

This week taught me that documentation is not a task, it is part of the design thinking process...