Skip to content

8. Electronics production

This week was dedicated to producing a PCB board as well as soldering it together. As a group we were tasked with characterizing our labs Bantam milling machine, as seen here on my group site

Eagle Designing

When I first imported my TinkerCAD design I looked it over and realized there were several things I needed to change including making the Arduino, neopixles, and USB into header pins. While I was changing out my electronics, I realized I could make this entire project easier by switching out the ATtiny chip I wanted to use for a Seeed Xiao RP2040 chip instead. That way I could eliminate the need for the Arduino and code it directly from the microcontroller. Because I needed to change so many things about the schematic, I decided to delete everything I had previously and create a new schematic. I started gathering all of the things that I would need from the libraries I had including neopixels, a Seeed Xiao RP2040 chip, and a USB. began wiring everything together, then I realized there was no need to have either a USB or neopixles in my schematic. I then replaced them all with header pins that would not only be easier to wire but also easier to solder and test with later on. Once I made that change in my design, I started with the ground and connected everything that needed a ground together (screenshot 3). From there I moved on to power. Because I am using an external power source, I used to power being supplied from there to power the neopixles and the Xiao RP2040 chip (screenshot 4). After the power was connected I needed to connect the output header pin I would be using for my neopixles. This is where I ran into a problem. The power and the ground connections that ran connected the middle two header pins were cutting off the output pin, so I could not connect the output pin to the chip I was using. I decided to combat this by using a 0 ohm resister to jump a connection and lead to the pin on the Xiao RP2040 chip (screenshot 5). I originally connected all of my neopixles to the same pin but I realized that because I wanted to use a different light pattern for one of the neopixle strips, I could not have then shared a pin. I kept the one group of header pins that did not require a 0 ohm resister separate and connected it to its pin on the chip. For the other two, I connected them together because they would be using the same code and put them on a different pin (screenshot 6). I then switched to the PCB editor to add the nets and change the board shape. I connected all the nets in a way that everything I needed would be connected (screenshot 7). I then exported my board as a Gerber file so that I could mill it out (screenshot 8 & 9).

Milling- setup

I then used the bantam software to mill out my board. I would normally start by installing the bit I wanted to use, however, the bit I wanted (1/64 endmill) was already installed in the machine. I then took a piece of Nitto tape and used it to secure the copper onto the bed. Once that was done I moved on to the files setup portion of milling (screenshot 10). I downloaded my file from the google drive folder that I uploaded it onto. From there I looked through the different layers it downloaded and selected the copper top and profile files and put them into the downloads folder. After that was done I followed the instructions the bantam software provided for milling a board. Because I already set up the bit and the material I jumped to uploading the files I wanted to mill. I deleted the project that someone else had on the board already and imported my files. From there I cleared the option for holes and changed the outline cut to the profile cut I downloaded from Eagle. Once all the settings I needed to change were changed, I looked at the bit that was selected to mill with. The program automatically selected a 1/32 bit, but that was not what I was using, so I changed the bit to a 1/64 flat endmill bit and clicked the next button (screenshot 11). The next part of the process was the offset. The offset was automatically set to 4mm for the x and y and 0mm for the Z axes (screenshot 1), but I was receiving an error message that said “Toolpath may cause the spindle to retract too far”. This error message confused me for a bit until I realized what exactly the plan offset was. This is where the bit will go to start milling the PCB board. I changed the offset manually with the command arrows to be in the corner of the copper. I also noticed red lines in places that were too small to be milled with a 1/64, so I needed to go back to my design and space out my traces. Once I did that I reimported my file, I looked over everything and there were no red lines or warnings, so once that was updated everything was ready to mill and I pressed the mill all button.

Soldering- v1

while soldering this board I realized I did not actually need header pins soldered in the spots where I placed header pin in the design. while removing the headerpins, I ripped a trace and decided to redesign by board to work with a Xiao Rp2040 instead.

Redesigning

schematic

For this board I wanted to reduce the amount of neopixels I would be using for my final project, so I decided to only light up the perimeter of the shelf. I needed two sets of four header pins for the neopixels and for the color sensor. I connected the header pins for the color sensor to the ground, 3.3V, SDA, and SCL pins of the color sensor. I then moved onto the neopixles. I used neopixels that had red, green, and blue pads, so I connected each color to a pin on the Xiao Rp2040. and connected the 5v power to the 5v power pin.

PCB board

Next I needed to add net connections to each component so it could be milled. once that was done, I made the overall size of the board as small as possible to minimize the amount of space it would take up.

## Milling and soldering I then followed all of the mentioned earlier and milled out my board. I then soldered the header pins to the correct space and the Xiao Rp2040 in its place. once that was done, I when to test the board, but I noticed a major flaw, one set if header pins were placed directly in front of the cable port.

To fix this I simply moved the set of header pins further to the side of the board and remilled it.

I soldered the new version of the board and connected the appropriate parts of the color sensor and neopixels with female to female jumper wires.

## Code following Mrs. Dhiman’s advice, I perused this site to find a code to test out my board. The website provided me with this code: ```

include

include “Adafruit_TCS34725.h”

// Pick analog outputs, for the UNO these three work well // use ~560 ohm resistor between Red & Blue, ~1K for green (its brighter)

define redpin A1

define greenpin A0

define bluepin A2

// for a common anode LED, connect the common pin to +5V // for common cathode, connect the common to ground

// set to false if using a common cathode LED

define commonAnode true

// our RGB -> eye-recognized gamma color byte gammatable[256];

Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() { Serial.begin(9600); //Serial.println(“Color View Test!”);

if (tcs.begin()) { //Serial.println(“Found sensor”); } else { Serial.println(“No TCS34725 found … check your connections”); while (1); // halt! }

// use these three pins to drive an LED

if defined(ARDUINO_ARCH_ESP32)

ledcAttachPin(redpin, 1); ledcSetup(1, 12000, 8); ledcAttachPin(greenpin, 2); ledcSetup(2, 12000, 8); ledcAttachPin(bluepin, 3); ledcSetup(3, 12000, 8);

else

pinMode(redpin, OUTPUT); pinMode(greenpin, OUTPUT); pinMode(bluepin, OUTPUT);

endif

// thanks PhilB for this gamma table! // it helps convert RGB colors to what humans see for (int i=0; i<256; i++) { float x = i; x /= 255; x = pow(x, 2.5); x *= 255;

if (commonAnode) {
  gammatable[i] = 255 - x;
} else {
  gammatable[i] = x;
}
//Serial.println(gammatable[i]);

} }

// The commented out code in loop is example of getRawData with clear value. // Processing example colorview.pde can work with this kind of data too, but It requires manual conversion to // [0-255] RGB value. You can still uncomments parts of colorview.pde and play with clear value. void loop() { float red, green, blue;

tcs.setInterrupt(false); // turn on LED

delay(60); // takes 50ms to read

tcs.getRGB(&red, &green, &blue);

tcs.setInterrupt(true); // turn off LED

Serial.print(“R:\t”); Serial.print(int(red)); Serial.print(“\tG:\t”); Serial.print(int(green)); Serial.print(“\tB:\t”); Serial.print(int(blue));

// Serial.print(“\t”); // Serial.print((int)red, HEX); Serial.print((int)green, HEX); Serial.print((int)blue, HEX); Serial.print(“\n”);

// uint16_t red, green, blue, clear; //
// tcs.setInterrupt(false); // turn on LED // // delay(60); // takes 50ms to read // // tcs.getRawData(&red, &green, &blue, &clear); //
// tcs.setInterrupt(true); // turn off LED // // Serial.print(“C:\t”); Serial.print(int(clear)); // Serial.print(“R:\t”); Serial.print(int(red)); // Serial.print(“\tG:\t”); Serial.print(int(green)); // Serial.print(“\tB:\t”); Serial.print(int(blue)); // Serial.println();

if defined(ARDUINO_ARCH_ESP32)

ledcWrite(1, gammatable[(int)red]); ledcWrite(2, gammatable[(int)green]); ledcWrite(3, gammatable[(int)blue]);

else

analogWrite(redpin, gammatable[(int)red]); analogWrite(greenpin, gammatable[(int)green]); analogWrite(bluepin, gammatable[(int)blue]);

endif

} ``` I changed the pins in the given code to match those of the LED strip on the pcb board. After that I plugged in the Seeed Xaio Rp2040 to the computer, selected the appropriate board and COM port, then uploaded the code. At first I was receiving the same error message over and over again essentially saying that the Xiao was not connected. Later on Ginny pointed out that I had Thonny running in the background along with other Arduino tabs. She said that other tabs could interfere with the connection of the board. After I closed out all of the other tabs I had opened, I noticed that the the board was connecting properly. Once the code was uploaded, I noticed it started working:

PCB files

link here s

Reflection

while making this board I ripped several traces without even noticing. I learned about the importance of trace size and the best ways to prevent ripping a trace. After I milled this board and got it to work, I covered every trace with clear nail polish.That way the traces would be practically impossible to rip on accident.


Last update: July 14, 2023