The Alpenglow Industries FUnicorn is a fun way to share a special message, and the Full Kit adds to the fun with a big F’ing button, for remote detonation of your F bombs. But what if you want to make the FUnicorn your own – and create a more-than-one-trick pony? Also included in the Full Kit are user-solderable headers, so that you can add an Arduino shield and create the equine masterpiece of your dreams*!
*provided that your dreams are compatible with 3v3 I/O
In order to not perforate the FUnicorn’s majestic form on the front of the board, we used surface mount headers rather than through-hole. This cosmetic decision means that you may find the headers harder to solder than other Arduinos you may have come across in the past, but, you can do it! If you believe in FUnicorns, we believe in you!
We recommend using any shield you may have handy to hold everything in place. Tack opposite corners to maintain alignment, then work your way along the rest of the outer pins. If everything is looking good, go ahead and carefully remove the shield. Remember at this point that the headers are only half-soldered, so if you yank it off with full Clydesdale strength, there's a chance that the headers – and even the pads that they are attached to – could come off with it, causing permanent damage. So please wiggle gently! With the shield out of the way, you are now clear to complete the interior pins (below, left). You may experience some balling or other flow issues – feel free to reflow any problematic areas. At this point, your board should look like the below right:
To confirm alignment, go ahead and reattach the shield, verifying that all of the pins are correctly seated and insertion/removal does not require an unreasonable amount of force. At this point, you are ready to put the U in FUnicorn, and give your idea wings (which would perhaps make it an FAlicorn?!)! If you want to be a nerd (don’t worry, we love nerds!) you can sneak ahead by completing Step 3 in our Hackaday instructions, or if you’d prefer to nerd out vicariously, stay tuned for the second part of this series: the making of the Wi-FUnicorn!
by Carrie Sundra
SOT-523. Is that one I can hand-solder, or is that one of those ridiculously tiny packages? SC-89. Is that basically the same as an SC-75, just one has bent pins and one has flat pins? And wait, are those both actually the same as a SOT-523?
If you're been around the block with PCB design, you'll know exactly the frustrating mess of nomenclature I'm talking about. After finally having had enough of it, I spent 3 weeks reasearching standards, poring over countless datasheets, and using Digi-Key's priceless parametric search to bring you...drumroll please....the WHAT THE SOT?! and FOR THE LOVE OF SOD! printed circuit board footprint rulers.
Not only did I want a tool that would help me identify the right size part to put into a design, but I also wanted a tool that would help me identify a drop-in replacement when the inevitable stock issue or obsolescence issue came up. Because there is NOTHING worse than having to re-spin a PCB just to change a footprint!
Did someone say stock issue? With the worldwide parts shortage the electronics industry is currently experiencing, my email has been bombarded by panicked current and past clients who are trying to order boards only to find that 1/3 of the parts are out of stock. Having these handy references on my desk has allowed me to quickly and easily identify alternates and save some manufacturing schedules. Warning: side effects may include your clients or boss thinking you have superpowers.
Here's my process for identifying an alternate. Let's say a trusty N-channel MOSFET in a SOT-523 package that you designed into a board is out of stock for 52 weeks. Your client might be sweating bullets, thinking their manufacturing schedule and income for the next year is completely shot. But you're cool, calm, and collected because you have the WHAT THE SOT?! ruler and Digi-Key's parametric search.
First, you type "transistor" into Digi-Key's search bar, and select "FETs, MOSFETs - Single".
Now to narrow it down from 41k results. Of course we want only parts that are "In Stock" and they should be "Active" so that we can (hopefully) continue to source them for several years to come.
That gets us down to a mere 10k results. Ok, now to the specifics. We want an N-channel FET, and we want it in a SOT-523 or footprint-compatible package. Looking at our trusty WHAT THE SOT?! ruler, we see that there are flat-lead versions that will very likely fit on our board that used a gull-wing part. So we scroll the Package/Case category, using a CNTL-click to select all compatible parts. Check out how the Suppliers have even more names for the packages!
This finally brings us down to a very manageable 25 parts. Now you can go onto other features, like Vgs, Rds(on), etc, to find the most compatible one.
I hope these ruler footprint references help you too! WHAT THE SOT?! has transistor patterns from 3 to 8 pins, from as small as the insanity-sized SOT-883 to the big whopping D3PAK. FOR THE LOVE OF SOD! has diode and passive 2-pin patterns from the finely-ground-salt-sized SOT-962 to the mighty SMC. Each footprint has the more colloquial "small outline transistor" SOT or "small outline diode" SOD size names (with alternates), as well as the equivalent JEDEC "transistor outline" TO or "diode outline" DO names, as well as the Electronics Industry Association of Japan SC names.
You can buy these handy footprint rulers from our Tindie Store, or from Digi-Key. We're a Marketplace seller, we ship fast and have a $5 shipping option.
by David "ishotjr" Groom
16x2 character LCDs are a great way to add a visual output to an Arduino project, though they are somewhat inflexible in terms of the information that they are able to display - for example, the character size and font is fixed. Or is it ? By using the 8 available user-defined characters, it's possible to add your own custom glyphs - and if you're clever, you can combine them to completely transform the capabilities of this humble display!
Our own resident clever clogs Carrie published the BigNums2x2 library a while back as a byproduct of another project she was working on. This library redefines the 8 available characters to create Big Numbers which each occupy 2x2 characters! As explained in her original blog post, Carrie was inspired by other, larger examples of the same technique, using 3x2 characters. Combining characters in this way revolutionizes LCD usage, since you can now easily take a reading from across the room, making it ideal for at-a-glance data. One of the most common numeric values that humans like to glance at is temperature data, so I thought it would be fun to create a simple thermometer using a DHT11 and an Arduino Uno, in order to put the library through its paces.
I happened to have an unused Adafruit RGB backlight positive LCD 16x2 handy, so I soldered on the headers, then followed their wiring guide to ensure everything was working. The particular LCD that I'm using is RGB-backlit, but to keep the project somewhat generic and applicable to standard single-color displays, I resisted the urge to get fancy, and only wired up the R(ed). There's quite a bit of wiring required, with 12 of the 16 pins populated on the standard LCD (the RGB adds another two pins for controlling green and blue). The Adafruit tutorial has an excellent description of how to hook it up, as well as what each pin does, but here's a cheat sheet so that you can check your work, or skip the long version:
Once you've got the LCD wired up, it's a good idea to give it a quick test before proceeding, so grab the built in HelloWorld example from File->Examples->LiquidCrystal. The Adafruit tutorial uses different pins than the Arduino default, so we'll need to tweak the code slightly; instead of:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
for the way we wired it. Compile and Upload the sketch, and you should see a lovely "hello, world!" on your LCD. If not, hit us up in the comments and we'll try to help you figure out what went wrong!
Now that we know the LCD is working, let's have a look at the temperature. I'm using the commonly available, inexpensive, DHT11. It's not the fastest or most accurate way to measure temperature, but it's cheap, and good enough for our purposes. Hook the middle ("out") pin on the DHT11 to digital pin 2 on the Arduino, and the + and - pins to 5V and GND respectively. You'll need to install the Adafruit DHT sensor library as well as its dependency, the Adafruit Unified Sensor library - if you've not done this before, Adafruit has an excellent walk-through. With the libraries installed, we can run another quick test sketch like we did for the LCD: open File->Examples->DHT->DHTtester and uncomment this line (15 at the time of writing) by removing the leading forward slashes:
#define DHTTYPE DHT11 // DHT 11
then comment out this line (16) by prefixing it with two forward slashes:
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
and give it a quick Compile. If you run it, chances are you won't see the expected output on the serial monitor, but as long as it compiled OK, we should be good for now.
After confirming all is well with the basic hardware, it's time to go large! The first step in using the BigNums2x2 library is...well...getting your hands on the library! Like the other libraries that we installed via the Library Manager, we can simply search for "bignums" to locate and install it:
The library comes with two nice examples, which are worth a quick try, like we did with the previous libraries, in order to ensure everything is working. Load File->Examples->BigNums2x2->BigNums2x2FontDemo, and like we did with the basic LCD example, update the pins to:
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
then Compile and Upload to get a feel for the available fonts and how they work. File->Examples->BigNums2x2->BigNums2x2LocDemo is also worth a quick try in order to understand how the positioning functionality works.
Now it's as simple as combining the DHT11 and BigNums2x2 examples to create our own big numeric thermometer remix! Create a new sketch, and add the header portions of each, including the library includes, as follows:
In setup(), we need to initialize the LCD, and DHT:
Then in the never-ending loop(), we just read the temperature value and output it to the LCD via BigNums, over and over, with a 2 second (2000ms) delay between each run:
Now that we have our temperature values outputting via BigNums2x2, let's get a little fancy. The numeric value alone is useful if you're completely familiar with the context (and you probably are, since you wrote the code!), but most temperatures will indicate which scale they are using in order to eliminate ambiguity. Although we're using BigNums, there's nothing stopping us from using plain ol' LCD characters alongside their chonkier sistren, so let's add a small °F legend to the right of our temperature value. To do this, we'll shift the position of our BigNums two to the left, plus use (char)223 in order to tell lcd.print that we want to use the ° character; replace bigNum.print(f); with the following 5 lines:
Behold, a pretty decent-looking thermometer, which can easily be viewed across a room:
If Celsius is more your thing, just swap dht.readTemperature(true) to false, and the F character to C. Or you could get really fancy and cycle between the two, or add a button to toggle them, or calculate the heat index with computeHeatIndex(), or ... well, let us know what crazy things you come up with in the comments below!
Alrighty! We're onto our last installment (for now). Are you have buyer's remorse yet? Are you wondering exactly where your $7k plus $2k yearly maintenance fees are going? Are you ready to kick whoever thinks getting images onto circuit boards isn't necessary or important? Me too!
Saving Your Image for the Future
Now that you have a really nice image in Altium using Method 1 or Method 2, you may want to save it to use it again, especially if the image happens to be a logo! There are 2 ways you can go about this.
That about wraps it up. There used to be some script that imported logos into Altium as a bitmap, but I never had very good results with it and am not sure it's still supported.
Got yet another way of creating a logo or image in Altium? Let us know in the comments!
Method 2 - BMP, JPG, or PNG using Microsoft Word
We're kicking it old-school in this one using good old Microsoft tools, Paint and Word. Buckle up!
In Method 1, we went over how to import images with smooth edges, keeping them smooth and resizable, and with a low vertex count. In this method, we'll go over the best way to import images that are more complex, where it's OK if they look a little pixelated. Again, if you have better ways of doing this, tell us in the comments!
Part A - Quick & Easy PNG from a Word doc
Let's say you have a PNG image already completely ready for import. It should be either a full monochrome or a grayscale image, and the grey/black pixels should be the ones that you'll want to reproduce in silk. Even though I only used "black paint" to create the below image, it contains a fair bit of grey to make the rough areas appear lighter, and to make the edges of the heart appear smooth.
Part B - JPG to BMP with Paint and Word
This goes through importing a photo into Altium. The original image is a jpeg, from a Notorious RBG meme. I did this the weekend after she died. Yes, I create circuit boards for mental health.
You might think that instead of Saving As, you could just go to Image Properties and select “Black and White” instead of color. You would be wrong. This is what happens.
If you're wondering, I haven't released these boards yet, I have one revision to make. They'll be really cool when ready, though, I promise! If you want to be notified, sign up for our newsletter.
But wait! There's more! What? Really? Just a bit. We talk about how to save your nice shiny image for future use in Part 3.
What - you think paying $7000 once plus $2000 yearly for THE premium circuit board layout software on the market would mean it would be no big deal to stick a logo or graphics on your PCB? Or at least that your money was enough to pay them for a nice step-by-step tutorial? HA. Think again. It's such a painful process that I finally had to make myself a cheat sheet, which I continuously add to as I figure out new tricks. And then last week I spent way too much time on the heart design above and was like - fuck it. I'm sharing this with the world because it's just ridiculous that importing graphics is this much of a pain in the ass. So if you've banged your head against the wall importing a logo into Altium Designer, here's a How To guide with 2 different ways, using a bitmap, png, jpg, and dxf. Got another method? Got improvements on the below? Tell me in the comments! For the Love of Bob, no one should have to go through hours of misery trying to figure this out.
Also - kudos to the KiCad designers and whoever made their import tool. While it could be better, it puts Altium to shame.
Method 1 - PNG to DXF
I think this is the best method I've been able string together. It's best for an image with very clear edges, in which a clean outline can be created from the image or image components. For anything that has pixelated or rough edges (think a wood-carved ink stamp), this method creates a dxf (and therefore final image polygon) with waaaaaay to many vertices. Altium has a hard time handling this and you’ll bog the entire program down and cause crashes. For something a little “rougher” - hand-drawn, or a graphic from a photo - proceed to Method 2.
The "# 1 ! " were all imported from the DXF according to this process. The "1" and "!" were converted to Regions instead of Polygons, since they didn't need cutouts. Curious about the rough heart outline? That was imported according to Method 2 - Bitmaps to Copy/Paste from Word. The smooth heart board outline was drawn by hand in Altium, outlining the rough heart by using the Arc (Any Angle) tool and a couple of straight lines. I had tried to use an imported dxf for the board outline, and everything seemed fine. I saved my work, shut down Altium properly, then when I opened it the next day, I was greeted with the following vision of pink puke:
WTF, Altium? Pro tip: at this point I closed the PCB file and went into the History folder in my project, and started unzipping previous saves until I found one that was normal. Fortunately, it just seemed to have barfed when I created the board outline. So I decided to play it safe and draw a low-vertex-count one by hand. That one has been fine.
We've been keeping these a secret for almost three years now, and oh man, are we stoked to finally be able to release these ponies into the wild! The FUnicorn (we say eff-unicorn) started as a very quickly made white elephant gift exchange gag gift, but we had so much darned fun making them, we decided to do a few revisions, and make them fully arduino-compatible. Check out our little movie and enjoy!
FUnicorns are for sale on our Tindie storefront and more info is on our FUnicorn page. We even made a Social Distance version for ourselves.
I Voted Blinky Badges are here!
You may have noticed something new and fun on our homepage - inspired by the "I Voted" stickers, we made blinky badges. Now you can show your pride in voting, and encourage others to vote, day after day before November 3rd!
What are they?
They're wearable circuit boards that you can "pin" to your clothes using 2 super-strong magnets. We have a pre-assembled version and a solder-it-yourself kit, and all have an ON/OFF button and a BLINK/SOLID button, in case you're sensitive to flashing lights or just don't feel like blinking at the moment. All come with a battery and the two magnets used for "pinning".
My Voting Story
Voting is important to me now because I grew up in a community of people who were mostly disenfranchised by voting. I grew up in the US Virgin Islands, a US territory, where the US citizens who reside there are stripped of their right to vote. I say it like that for a reason - I think people tend to easily "other" people living in US territories thinking either "oh they aren't acutally US citizens" or "no one really lives there, it's just a place people go on vacation." Both of those are very very wrong impressions. Many families have lived there for generations, and anyone born in the USVI or Puerto Rico is a US citizen. If YOU are a stateside-living US citizen and decided to move to the USVI tomorrow, you would not be able to vote for President and would have no voting representation in Congress. Yeah. You can move to Peru and still vote, but you cannot vote if you move to a territory of the United States. If you have any doubt this is due to racism against Black and brown people, read this Harvard Law Review article and some of the language used by - I shit you not - Professor Christopher Columbus Langdell, proclaiming that Puerto Rico and the USVI were "inhabited by alien races."
So the first election I was eligible to vote in because I moved to California, was the year 2000. And I was like "whatever, who cares" because frankly, the federal government of the United States is dismissive of its territories, so I was pretty dismissive of it too. But then a friend had an election night party, but only if you voted and he threatened to check stubs at the door (this friend is Adam Rakunas, he now writes some fun sci-fi with female protagonists, check him out). Well, a party with good friends and good food was relevant to my interests, so that's why I registered to vote and voted in that election - the first in a long time where the popular vote went against the electoral college and yes, my just-out-of-college-self was like, "see, this is bullshit, I told you so!" But despite that, I still continued to vote in presidential elections, and then I started to vote in midterms, and then I started to actually give a shit about voting.
Yes, I should have given a shit earlier. I shouldn't have HAD to been peer-pressured into it. This story isn't a shining example of inspiration. I wanted to share it because I know there are a millions reasons to be disenfranchised - feeling that your country doesn't give a shit about you, feeling like it's always a choice between bad and worse. But it is a choice, and some people don't even get that. And your vote absolutely matters at the local level - our mayor race was won by only about 40 votes in 2016.
I still think there are serious problems with the electoral college system, but voting is the main weapon I have. Even if it's dull as a spoon, I'm still going to use it. It's the LEAST I can do. If you've got a disenfranchised friend, keep working at them. It may only take a bribe of some cookies or beer. And please remember, voting is a privilege, it's not a guaranteed right. Please exercise the privilege you have.
I'm one of the organizers of a local Women in Tech group in San Luis Obispo. We firmly believe that the only kind of feminism is inclusive feminism, and this is especially important because San Luis Obispo is a very white town. SLO is 84% White (and 70% non-Hispanic White) and only 2% Black, and the demographics specifically in tech seem to be a lot worse. We talk a lot in our group about allyship - how we want men to be better allies for us, and what that looks like. In turn, we need to be better allies for Black women in tech. One of the ways we can do that is by speaking up and working to change each of our companies' cultures from their white - and let's be honest, kinda racist - default.
I originally wrote this piece for the women in tech group's newsletter, and after several people asked if they could share the newsletter, I decided to make it public and easily accessible. This article is written by a white woman (me) and is intended to be a resource for other white women who want to learn how to be better allies, and who would like some help with speaking up (including links to sites that go over specific examples and verbage). I draw a lot of parallels to sexism - this is not to remove focus from the immediate problem at hand, which is enormous systemic racism. I talk about sexism because it's a common ground we all share in the Women in Tech group, and I believe our experiences with sexism should make us more empathic to those who are experiencing racism.
Why We Need to Speak Up
In our group video meeting last week, one of our members brought up an experience she had at work. Someone made a racist joke in the workplace, and even though company leadership was present, nothing was said. This emboldened the person to keep making racist remarks and jokes because he took the silence as approval. It wasn't until someone spoke out later that the leadership made a public statement and put a stop to that behavior. Our group then had a good discussion about speaking up, which I've been chewing on, and reading more on, for the past few days.
Not only "speaking out", but speaking up immediately when a racist comment is made keeps coming to the forefront in much of my reading.
This article continues by focusing on racism in the workplace. But we should be speaking up whenever this happens; whether it's at work or in our daily lives. And my friend made the point that it's extra important to speak up when kids are present, because kids soak up everything, and will tend to assume that anything an adult says is OK. He then shared this story:
"When I was a kid my cousin spoke up against someone who made a gay joke and it was literally the first time in my life I heard someone say there was nothing wrong with being gay. I never forgot it and it was a lifeline. It was such a fleeting moment and when I told her about it a few years ago I couldn't even remember when it was and who was there. All I remember is her saying it and it mattered tremendously."
Why We Should Speak Up Right Away
I know from my own experience with sexism, that when an ally speaks up right when it happens, it makes a much bigger impact than if it's handled "discreetly" and "offline" later.
OK, But What Do I Say?
When something racist or sexist happens, we're often caught off-guard, and don't know what to say in the exact moment. And that can result in us not saying anything, which means that we're complicit in the racism that's happening. So that means we need to work on being anti-racist, and speaking out!
What Not to Say
If you're in a situation where a racist remark has been said and a person of color is in the group, don't make it specifically their problem. Don't say something like, "That was super racist, Jim, how do you think you just made Tiffany feel?" That singles Tiffany out, puts negative attention on her, and forces her to respond. You can say instead "That was super racist, Jim, and I don't tolerate that in my space." Never speak for the other person, just use your privilege to speak for yourself.
Speaking up is going to be uncomfortable. As women who are already battling sexism, it may even be risky for our jobs. But it's also one of the best ways we can combat racism and effect change. It's upon us white people to speak up to our fellow white people, and to dismantle white supremacy. And if we can speak up on racism, maybe that will embolden others to speak up on sexism. Let's be the kind of ally for others that we want others to be for us.
A while ago I released BitMarkers - binary stitch markers for knitters and crocheters. I didn't worry too much about a supporting how-to or blog page, because there are a lot of binary number tutorials on the interwebs. But after seeing that the most popular ones tend to dive straight into exponential notation and math-heavy explanations, I decided to go ahead and write my own. This is intended for beginners, and focuses on re-learning how numbering systems work in hopefully a more intuitive way. Then it goes into exponents at the very end.
To put everything in context, let's first review a "normal" number.
Each digit in our number can be 0 through 9. So including 0, there are 10 possible choices for each digit. This is called a base 10 numbering system, and is colloquially known as "decimal". It's also called the "Hindu-Arabic numeral system" after its origins.
In binary, there are only 2 possible choices for each digit: 0 or 1. So it's known as a base 2 numbering system, or binary.
Why only 2 choices? It all boils down to how computers work, electricity, and voltage. Computers can sense the presence of a voltage, or the absence of a voltage. It's either there or it's not. Presence/There = 1, Absence/Not There = 0. So if that's the medium you have for storing and reading information - basically either something's there and it's a 1, or something's not there and it's a 0 - you have to develop a language where you can communicate concepts based on long strings of 1's and 0's. This language is binary.
Binary Counting Method 1 - Rolling over Bits
I think the simplest way to think about counting in binary is to compare it to counting in decimal. What happens when we go from the number 9 to the number 10? Our "9" digit resets to 0, and the next digit rolls over to 1.
The same thing happens with binary. But since we only have 2 numbers possible with each digit, the rollover happens much sooner, at the number 2.
...and the digits just keep counting up and resetting and rolling over:
Each binary digit is called a "bit". 8 bits are called a byte. So if you have 128 GB of memory on your phone, you can store 128,000,000,000 bytes. That's 1,024,000,000,000 bits!
Binary Counting Method 2 - The Places
Another way to think about numbers is by their places. In a 3-digit decimal number, we have the ones, tens, and hundreds places:
We're so used to counting in decimal that we just know 198 = 198. But if we were explaining it to an alien, we could break it down like this:
Whoa! Only having 2 numbers per digit makes each digit rollover sooner and it looks confusing because we don't natively speak binary. But look up at the previous section - remember how 100 = 4? Does it start to make sense that the third digit would be the fours place? Let's break this number down!
Binary Counting Method 3 - Exponents
This is what most tutorials teach because it's technically the "truest" way of converting between numbering systems. But it's also the most mathy, and if you're not a mathy person, it can be confusing to start with this explanation. However, you've already read the above two methods, so you're totes ready for exponents.
Most of us are reasonably familiar with an exponent of 2, so we'll start there. If a number has an exponent of 2, it means the number is "squared" or that you multiple the number by itself.
Another way of thinking about an exponent of 2, is that it means 2 of the number are multiplied together.
An exponent of 3 means 3 of the number are multiplied together.
If you keep adding one to the exponent, you keep adding another multiplication by 3.
3^4 = 3 x 3 x 3 x 3 = 81
3^5 = 3 x 3 x 3 x 3 x 3 = 243
(The symbol "^" is also called "carrot" which means "to the" or indicates an exponent).
But what happens if the exponent is 1? Or 0?
It's a little weird, but just think of it this way.
Now we're ready to explain to our alien visitor how decimal numbers work using exponents, because each digit's place can also be thought of in terms of exponents.
We can go through the same exercise of calculating the value of each digit, using exponential representation.
Ready for the same thing with our binary number?
Ok, same steps: