Podcast spotlight

Intelligent Autonomous Robots with Ilia Baranov

Got a great interview in with This Week in Machine Learning and AI.

Check it out!

Importing Images into Altium Circuit Maker


One of the things Altium Circuit maker current lacks (see a short review here: Altium) is the ability to import images into Altium’s board design.

There is a fairly painful way to do this via making an image into a font, installing the font to your computer, and then “typing” it in to get the image to appear. This is.. sub-optimal.

However, one can import/export from a .csv file into vertices of a polygon pour. This could enable importing images into Altium.


The rules for polygon pours seem to be as follow:

  • polygons are filled when vertices form a (clockwise oriented) closed surface.
  • Lines that cross back on themselves have a zero thickness, and hence don’t appear.
  • The entire list must start and end on the same vertex.

So, we could make a script that generates a list of vertices, and import a (somewhat blocky, 1 bit color image) in this way.

Here is an example done by hand (note the thin lines do not appear in a gerber export!). The lower left square is drawn first, then the lower right, and lastly the center square.

Hand Desgined Image into Altium Circuit Maker

The starting/ending point is always the lower left origin.

The vertices for just that simple shape are fairly lengthy:


Index X (mil) Y (mil) Arc Angle (Neg = CW)
0 -1550 -700
1 -1550 -690
2 -1550 -680
3 -1540 -680
4 -1540 -690
5 -1550 -690
6 -1550 -700
7 -1540 -690
8 -1530 -690
9 -1530 -680
10 -1520 -680
11 -1520 -690
12 -1530 -690
13 -1540 -690
14 -1550 -700
15 -1540 -690
16 -1540 -680
17 -1540 -670
18 -1530 -670
19 -1530 -680
20 -1540 -680
21 -1540 -690
22 -1550 -700

Notice above, we do have the ability to specify Arc angle for each segment, but that is a level of complexity I will likely avoid in the near term.

It speaks with a hiss

My favorite tool in the bag of tricks is Python, mostly due to avoiding the need to compile, and lots of good libraries. This is especially true of graphical manipulation, which we will need if we want to get images into Altium Circuit Maker.

I used Python 2.7 for this, on Windows. (you will need the python pillow library, execute “python -m pip install pillow”)

See the full code here:


Open the “ImGen.py” file, and change the file name, size and inversion as needed. Once the program is run, it will generate a .csv file with the same name as the image input. This can then be imported into the polygon pour.

Menu for  Image into Altium Circuit Maker



Test Image into Altium Circuit Maker

The lines returning to the center can be seen above, however they do not appear on a Gerber file.

What’s the catch?

There’s a few downsides to this approach over the image-font-import method:

  • Resolution is low. For your sanity and RAM usage, I don’t suggest using any image over 20×20 pixels.
  • This looks much nicer with images that are blocky to start with. I’ve used this to generate QR codes, barcodes, etc.
  • Images are placed at the origin, but can be moved later

Future Work

  • Use Arc Angle to make smoother images
  • Generate triangle instead of squares, and take into account 50% filed cells, instead of only black and white.
  • Automate generating multiple layers (top layer, top solder, top mask, silkscreen) to generate 4 color images
  • Optimize path-ing algorithm to reduce path complexity

Ultrasonic Amplifier – Part 1

This ultrasonic amplifier project comes in two parts, design, and testing. Today we will cover the design and rational.


Many animals emit high pitch noises, what we call ultrasonic, that is beyond the hearing range of humans. Two such animals I am interested in are rats/mice, and bats. I want to hear the noises that they emit.

The classic approach that many bat detectors use is to amplify the signal coming from an ultrasonic microphone, then just treat it as a square wave and divide it down into human hearing range. This seems a little cheap to me, as you are getting a severely distorted noise, that does not carry amplitude info at all. Imagine a speaker screeching in distortion because someone set it too high, that is essentially what you are hearing from this detector.

My thought was, why not do a FFT (or even better, an FHT) to get the spectrum of the sound, compress it if needed, and then shift it down into human hearing range. Lastly, we just do an inverse FFT/FHT, and voila, truthful sound at roughly the right speed.

Attribution in alt text


ultrasonic amplifier Circuit Design

First things first, we need to amplify the signal from a ultrasonic microphone. The ultrasonic amplifier works in three stages, with the final stage having an adjustable 1-100x gain. When selecting the gain per stage, don’t forget to consider the gain-bandwidth product of the amplifier! The 1/2Vcc below is generated by a simple resistor divider, which works fine in this use case, as your op-amp input impedance is very high.

Ultrasonic AmplifierThis signal is then fed to a single stage Sallen-key filter, to remove any signals above ~90kHz, and then into an ADC. Remember to always chose an ADC with a sampling frequency at least 2x your highest signal frequency, this is known as the Nyquist rate. In reality, you want a sampling frequency of ~5x or more, to get a decent picture of the sampled waveform.

Ultrasonic Amplifier ADC

The signal can then be read by a oscilloscope for testing, and fed via SPI to a microcontroller. I will be using the ESP8266 for the FHT and IFHT steps later, possibly showing the waveform in a webpage.

Circuit Layout

The circuit layout is a fairly straightforward 2 layer board. The only trick for this ultrasonic amplifier is that the microphone is mounted horizontally to save on board space.

Ultrasonic Amplifier Layout

Now to wait 2-4 weeks for delivery and assembly 🙂

As always, these projects are open source and usable for any reason (preferably with some attribution). You can find the designs on my Altium circuit maker page:


Altium Circuit Maker – Review and Tutorial Part 1

Altium Circuit Maker

Altium (used to be Protel) makes some very nice PCB design tools, and Altium Circuit Maker is their newest product, with the added benefit that it is free! This two part series looks into Circuit Maker, and has a quick tutorial on usage. As always, leave comments below!

Altium Circuit Maker has upsides and downsides, but overall I think this will be a GREAT addition to the open source hardware movement! Sharing all your designs and parts libraries by default is a bold move, and should lead to great things!


  • New, Modern tool, looks good and is much easier to use than most other stuff out there.
  • Integrated design and library sharing system (see cons), integrated parts backend uses Ciiva
  • Exceptionally well done online manual
  • Unlimited FREE usage (no layer limits, no parts limits)
  • Did I mention it is FREE with NO LIMITS (looking at you EAGLE, Upverter, etc…)


  • Always online, no local storage of any files
  • Forced to share designs, no real choice apart from a few “Sandboxed designs”
  • Slightly buggy, though way better than the professional version of Altium!
  • Not much Tutorial content, more of a manual here-is-everything-and-kitchen-sink approach from Altium.
  • Fatal version control flaw!

If I had to point to one thing that Altium Circuit Maker desperately needs is better community support! The starting community page is lackluster and random.

Altium! Please add this stuff:

  • Ability to rate Users. Show recognition for the best and brightest designers!
  • Make re-use of sub-circuits easier! Right now, my only real option is to go randomly searching through projects, hoping to stumble onto something useful, copy the project, and tear it out. The ideal case would be to have separate sub-circuits section, where I can easily find a buck/boost converter, battery charger, and other stuff EEs use over and over. Then make it easy to place right into the design.
  • Improve Ability to rate designs! You can post a comment and rating, but there is no detail. What about the design is 5/5 stars?
  • Let us comment and accept pull requests on commonly used parts.
  • Let user have their own homepages to show their work! (Kinda exists under Community Profile…)
  • Have a website we can check for community activity, instead on only through Altium Circuit Maker.
  • Speedup access to community. I have a fairly fast internet, and it takes 5-10 seconds to load each page. Very frustrating when you are searching for anything.
  • Bring back the Altium keyboard shortcuts! I miss being able to press P(place) -> W(wire)
  • Many to one relation, or generic parts. I need only 1 model of a 0402 resistor, and then specify that it is a 10k 0402 resistor later.

Version Control

Here is the current deal breaker though: There is no version control for library parts or anything in place at the moment! I can go in and change practically any library part in any way I want, authors retain no control on their parts library entries. My changed part becomes the new default revision, as in the first one listed and selected when importing a part. THIS is a deal breaker, for 3 reasons:

  1. A malicious script kiddie can come in make empty parts for every part in the library, which is easy to restore but annoying. More serious is they can subtly break designs, such that when users make em, the board goes up in smoke!
  2. There is no way to know how good or accurate a design is! It could be off by a mile or perfect, but without visibility into the versioning, I can’t tell what has happened to it.
  3. Even with the best intentions of fixing a mistake, changing a part that is already in someone’s design is a recipe for disaster. The existing design doesn’t change by default, but doing a library update or making a new design and bringing in the part does cause the change. Multiple version revision control is needed.

If Altium Circuit Maker wants to fix this, they need to employ the Github model, and FAST! That way, every part would have an “issues” page, a rating page, and authors would hold the “master” copy. If someone comes along and notices a mistake, they can submit a pull request. If the author is not responsive or doesn’t want to fix, they can then make a fork and direct people to the corrected version. This would solve all of the versioning issues very quickly.

Quick tutorial

There doesn’t yet seem to be a lot of tutorial content out there for Altium Circuit Maker, so I am going to walk through getting a simple board produced! The tutorial will also cover some tips for first time circuit designers. General steps are idea, parts selection, schematic capture, part creation, board layout, and production output. The full documentation is available here: http://documentation.circuitmaker.com/


What do you want the circuit to do? Does this function already exist? (please please PLEASE do not make another level converter or RS232-USB circuit, there are thousands of em). Things to consider:

  • Voltages and currents. Designing for 5V at 500mA max is a good place to start, as you can easy get tons of power supplies for this (USB)
  • Complexity. The complexity of what you are trying to do drives both board size and layer count, which in turn is the major driver of cost on most small projects
  • Manufacturing. Is this a 1 off, or something you are planning to make thousands of. The more you are planning to make, the more time you should spend minimizing parts counts and making more robust designs.

In this example, I will be making a small programming header board to get from the venerable AVRISPv2 to a small integrated board. I will need to source USB power, provide some simple protection, and have a signal inverter for the reset line. I am making 1 board only.

Parts selection

Now that you have decided what the circuit must do, we should consider the core parts of the design. The main microprocessor or other central parts should be listed. For my project, this is simply a header, an inverter, plus a 3.3V linear regulator. When selecting parts, be sure they follow the requirements from the Idea section above.

Schematic capture and starting a Project

Open Altium Circuit Maker, and start a new project. Note that Altium Circuit Maker makes project open to the world by default, but has recently made a “Sandbox” mode available to keep it private. Next, right click on the project and select Add New To Project -> Schematic

Pro Tip: Use the Windows Problem Steps recorded to help easily write super detailed tutorial steps and screenshots

The first part I am going to add is the inverter. Go to the View top toolbar, and select Libraries. On the right side menu, I input the part I am looking for, ensuring the top “Has Model” checkbox is checked, the NC7SV04P5X. Repeat this with enough parts until you have most of the important ones.

Now that we have some components, we can take our first stab at wiring them together. For now we are going to stick strictly to the basics, things like sheet re-use, buses and differential pairs are to be covered later. First add power ports, one for each GND and power signal. Don’t make the mistake of leaving the power port named VCC, double click it and rename it to something like 3.3V. This makes your design less error prone and much more readable. After your power ports, wire up all remaining connections.

You can also add comments, to help explain design decisions. These are publicly viewable, and can also let users flag issues.

Part Creation

Sometimes the part you want does not exist in the Altium Circuit Maker included CIIVA library. This is your chance to create a part and give back to the community! In my case, a header that matches the AVRIPSII programmer does not exist, with part number 75869-131LF.

Open the Libraries side panel under View -> Libraries. Here, enter the part number you want (ensuring the top “Has Model” checkbox is NOT checked) right click on the brought up component and select “Build this component”. Altium Circuit Maker now automatically populates the part entry with a ton of data, saving you time. We now need to add a Schematic symbol and a Footprint. This is done by clicking the + signs at the bottom of the page.

If you realize later on that you made a mistake here, got to Libraries, search for your part, right click and select Edit.

WARNING: Make sure to click “Commit” when leaving, else your work is LOST!

Schematic symbol

Here we draw the schematic representation of the part. This consists of adding pins (Passive, In, Out, etc) and drawing an overall shape of the part.


  • Keep inputs on the left, outputs on the right, +Ve Power on top, -Ve (or Gnd) on bottom
  • You don’t have to match the physical layout of the part, make it easy to understand instead
  • For truly huge pin counts, split the part into several schematic parts. Take a look at the STM32F407 for an example of this, they split the power from all other pins.
  • Keep pin lengths at 20 or 30
  • Hit Tab when placing a part to change its properties
  • Select multiple parts, hit F11 to change properties for all of them
  • The “Display Name” should match what the spec sheet for the part states, the “Designator” is used to match pins from schematic to footprint.
  • When drawing a bounding box, keep it transparent and extend slightly past last pin
  • Adding symbols is optional, but recommended for usability. Good free list here: symbols
  • Add a Reference Designator to your part! Click Library -> Component Properties. My connector is labelled J, from the Standards here: Reference Designator

More info here: Add a Symbol


The footprint is the physical model of the part. It is used to define pin and pad placement, silkscreen outline, and ensure mechanical fit. All parts created should ideally have a 3D model, but this is not required. The bare minimum is a mechanical outline, pads, and indicator for orientation (usually silkscreen symbol for pin 1).


  • Search for existing community footprints with “Place Existing Footprint”, don’t re-invent the wheel!
  • For complex parts, search to see if a manufacturer provided .step model exists. This can be directly imported into the footprint. Read more here: 3D body
  • If there is no pre-made 3D model, draw the outline, and then head to Tools -> Manage 3D Bodies. There, extrude the outline you drew up to the height of the part.
  • Pin 1 or center of the part is generally used as the “reference” point of the part, that is the 0,0 location.
  • You can have multiple footprints. This is generally used to make a “tight tolerances” version, and a “relaxed tolerances” version.
  • Press q (with nothing selected) to toggle between imperial and metric measurements
  • Always identify Pin 1 with silkscreen markings or pad shape or BOTH (ideal solution)!

Simulation Model

You may have noticed a third box on the parts creation page titled Simulation model. This is used when simulating electrical parts prior to production. In my opinion, in 99% of cases for the hobby/small project world, it is not worth the effort to use the simulator.


That’s all for today! Tune in next week for Part 2 – schematic naming, Board layout and manufacture!