Week 12: Output Devices

This week's tasks:

  • Group assignment:
  • Individual assignment:
    • Adding an output device to a microcontroller board I've designed, and program it to do something!

Challenges:

  • Designing the main board
  • Adding and using Adafruit library in Eagle
  • Desoldering neopixels from the board.
  • Identifying the cause of the short circuit.

Technology used:

  • Eagle
  • fabmodules.org
  • Milling Machine
  • Soldering Iron
  • Arduino

What I did for this week?

For this week's task, I decided to design the main board and the flower board that I need for my final project.
The board consists of ATmega328P microcontroller and other components such as a pin header for programming, a pin header for connecting to the flower board, FTDI header, resonator, resistors and capacitors. Understanding and designing this board was quite challenging and took a lot of time. Antti, our fab lab manager, had helped Kati for designing her main board. And as Antti suggested, in order to understand it better, I studied Kati's documentation and asked Antti for some guidance. Eventually I managed to successfully fabricate the main board and also the flower board. Therefore, I use these boards for this week's assignment, which would also be a good dedication to my final project.

Ordering Information
  • The speed: 20MHz
  • Power Supply: 1.8-5.5 V
  • Package type: 32 A

Schematic of the Board for Controling LEDs (flower shape)



Board View



Traces and Outline Images of the Main Board




Milling

  • Unsuccessful Milling
  • It cut the side of the board that I defined the Z axis in the same side's corner but it did not cut enough another side of the board. So I considered another Z point (in the middle of the design) and it worked.
  • Successful Milling


Soldering

  • List of Components:
    • One ATmega 328P-AU Microcontroller
    • One 2x3 pin header: for NeoPixel
    • One FTDI header
    • One 2x3 ISP header
    • One 16 MHz Resonator
    • One Resistor 0 Ω: Jumper
    • One Resistor 1 KΩ
    • One Resistor 2 KΩ
    • One Resistor 1o KΩ
    • One Capacitor 1 UF
    • One Capacitor 10 UF


  • I soldered a resistor that I had forgotten to solder earlier and then I resoldered some components after checking the board with microscope with Jari.

  • I checked for short circuit with multimeter and everything was fine.
  • Issue with Supporting FTDI-header
  • The FTDI pin header should be placed on the edge of the board not out of the board, I should say that yes unfortunately I noticed it after soldering all the other components and at the end when I wanted to solder FTDI pin header I noticed it and it was too late. So after testing, it perfectly worked. And I added more solder to the legs to make it more tight and fixed. But it was my first design on my own and it was a good experience and I kept it in mind to consider enough space for FTDI-header on the other boards that I designed later on.


Testing

  • I opened Arduino Software.
  • I made the connections among board, computer and programmer.

  • Tools > Board > Arduino/Geuino Uno
  • Tools > Programmer > USBtinyISP (Using My Programmer(week 5) )
  • Tools > Port > COM5
  • Tools > Burn Bootloader (Setting the fuses)


Testing Programming

  • For a quick test I used an example in Arduino that prints "Goodnight Moon".

  • Sketch > Upload using programmer (the programmer should be attached to the computer)
  • Tools > serial Monitor (shows the serial communication)


SK6812 5050 RGB LED

It basically has 4 legs:

  • Input
  • Output
  • VCC
  • Ground
    • The typical application circuit of SK6812

    • Pin Function and The Electrical Parameters:
      • VSS: Ground: The signal and power supply and grounding
      • DIN: Data Input: Control signal input data
      • VDD: Power: Power Supply pin
      • DOUT: Data Output: Control signal output data

    Schematic of Neopixel for my Flower-Shaped Neopixels

    It was quite challenging to use Adafruit library. Becuase I used to download it and adjust the directory and whatever necessary to get it worked. But surprisingly it was not working and although I had it there in Eagle, the components were not appearing in search result. So after lots of afforts and trying different ways to use this library, Jari (our fab lab instructor) found the solution to the problem. I used to right click and download the library that appeared in google search result. Jari told me to get inside the webpage and dowloand the package directly from there. And when I did so, it worked!

    • It did not work when I downloaded it from here:

    • It worked when I downloaded it from: https://github.com/adafruit/Adafruit-Eagle-Library

      Output of the first neopixel would be the input of the second one and so on. All VCC legs are connected to each other and to the VCC. All GND legs are connected to each other and to the GND. The input of the first LED is connected to a pin header (it receives input from the main board that I designed). The output of the last LED could be connected to another series of LEDs for example. Or if I wanna to fabricate another flower board, I would use this output as the input of the new board.

    • Schematic


    Board View of my Flower-Shaped Neopixels



    Preparing Individual Neopixels

    • Desoldering individual neopixels from the strip

    • Testing with multimeter

    Since we now have individual neopixels now available in fab lab Oulu, I used the ready ones.


    Traces and Outline Images of the Flower Board

    • Traces

    • Outline


    Milling



    Soldering

    Components

    • 6 Individual neopixels (SK6812 5050 RGB LED)
    • 5 capacitors (10UF)

    • Trying to figure out the connections measuring using multimeter

    • Soldering the wires from main board to the GND, VCC and Input of the flower board.


    Programming

    Here I list those pins that I used.

    • Arduino Uno Pinout
      PC3 (AVR) | A3 (Analog) (for Neopixel Input)
      PD0 (AVR) | RX (Serial)
      PD1 (AVR) | TX (Serial)
      PB3 (AVR) | MOSI (SPI)
      PB4 (AVR) | MISO (SPI)
      PB5 (AVR) | SCK (SPI)
      PC6(AVR) | Reset (Power)

    • I connected the FTDI cable to the main board and then to the computer.
    • I connected the programmer to the main board and to the computer.
    • I also connected the main board to the flower board.

    • The LED on the programmer was off and when I checked in device manager the connections I noticed that the FTDI and programmer connection is not established. So as my friend Jari suggested, I disconnected everything and connect them one by one to the computer and the problem was the flower board. As soon as I connect the flower board, all the connections disappear. So as Jari suggested I checked for short circuit in the flower board and I had a wrong connection of GND and VCC. That happened because a very tiny part of the wire that goes to the VCC was spread in the GND. When I was inspecting the wires, I pulled one of them and it was a bit deattached from the board. So I should also glue the wires to the board to make them fixed. Currently they could easily be pulled out of the board.
    Solving the problem
    • I removed the piece of solder that I thought is the cause of the problem. But still VCC and GND was connected somehow. So I tested all the components and found the source of beeping. And that components was connected to 2 other compoents. So with Jari's help and using microscope, I figured out that one of the LEDs is soldered a bit sidelong and out of it's trace. So I desoldered it and resoldered it and the problem was fixed.

    Continuing Programming
    • Then I used a simple example of neopixel available in Arduino examples.

    • I defined the pin of Arduino that is connected to neopixel as: #define PIN A3
    • I defined number of neopixels as: #define NUMPIXELS 6
    • After half a second delay the nex LED flashes: int delayval = 500;
    • In the main loop, the first neopixel is 0, the second is 1 and so on till the sixth, which is 5.
    • Pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    • I added: pixels.setPixelColor(i, pixels.Color(150,26,200)); for changing the color between green and a random color.

    The Result


    Flower Board Improvement for the Final Project

    • Since I find attaching wires directly on the board not a suitable solution and the wires dispart easily from board in this way, I decided to modify my design considering a pin header.


    • I milled and soldered 2 flower boards. First I connected and programmed the first one. I used one of the examples in Arduino Software: File > Examples > Adafruit NeoPixel > RGBWstandardtest
      The only thing that I changed was:
      #define PIN A3 and #define NUM_LEDS 12

    • Then I connected the second flower board as well.
      From the output pin in the first flower board to the input pin of the second flower board.
      And connecting VCC pin of the second board to a VCC pin in my main board.
      If I want to have more flower boards I should think about their VCC connection.


    Original Design Files

    Schematic of the main board
    Board of the main board
    Traces of the main board (.rml)
    Outline of the main board (.rml)
    Schematic of the flower board
    The board of the flower board
    Traces of the flower board (.rml)
    Outline of the flower board (.rml)
    Schematic of the flower board_Version2
    The board of the flower board_Version2
    Traces of the flower board_Version2 (.rml)
    Outline of the flower board_Version2 (.rml)
    Arduino Code (.ino)