Showing posts with label arm. Show all posts
Showing posts with label arm. Show all posts

Tuesday, September 5, 2017

Updates: Intel Joule, LoRa, Arduino and Protocase

Blog Break

It has been a while since I posted a blog entry.  I have been knee-deep in a challenging internal project and haven't had much time to come up for air.  Today, I've got a chance to reflect on some of the things that have been happening here at Gumstix and share my perspective with you.

First, there's the EOL announcement from Intel that blindsided the x86-focused IoT community:
 the Joule, Edison, and Curie modules are soon to be no more than a footnote in the history of embedded computing.

Also, Just recently, hardware support for LoRaWAN was added to the Geppetto module library and 3 LoRa boards were released.  I got to play with that quite a bit.  It also brought with it an ATmega32U4 Geppetto module, supplanting the Curie module as our primary Arduino-compatible MCU.

Finally, I've been talking a lot with Protocase.  These guys are cool.  They provide design and production services for custom small-run enclosures, rackmounts, brackets, and consolets. I'm very excited to see what they're making for me.

Intel EOL Announcements and Me

I'll admit it, I took the Intel Joule news harder than maybe I should have.  I spent a lot of time working with it and it's carrier boards.  I was looking forward to putting the GadgetDrone in the air with the AeroCore 2 for Joule, the Caspa HD and one of the RealSense point cloud cameras we have at the office.  I liked the idea of setting up my Workstation board in a 3D-printed enclosure as a Yocto build slave.  Oh and I still hope to test the Caspa 4K's "tone-mapping (Er, I mean HDR) Video" mode.


I was also sad to see the Curie go.  Working with our Radium 96Boards IE board is a lot of fun.  It had been a while since I'd worked at the MCU level.  Bare-wire programming on an 8051 and using a dual-Arduino Uno plus ZigBee robot controller were highlights of my academic career, but I haven't done anything of the sort since.  The Radium's nice and small, IE compliant and has all the cool features of the Curie, like Bluetooth, 6-axis IMU and Neuron pattern recognition nodes.

For whatever reason, Intel decided to terminate their IoT-targeted endeavors.  Maybe it was the slow - and sometimes negative - response from the community.  It's also possible that the challenges in providing software support for their hardware were more monolithic than anticipated.  Either way, the Joule, Curie and Edison are gone.

For all of you who jumped on board with Intel's IoT hardware just over a year ago, I empathize with your plight.

LoRaWAN

If you're into IoT, you may have heard of LoRa, LoRaWAN and the LoRa Alliance.  It's a communication protocol for sub-GHz long range LPWANs, and it's sweeping Europe and North America's IIoT industry.  It works like this:  

You set up a Gateway. This is the equivalent of a WiFi router in your home, but the difference is these things can have a range of up to 15 km, depending on the quality of your antenna.

You deploy nodes.  These are your data acquisition points - temperature, presence detection, air quality, etc.  Whatever you need to know.  Put them where they need to be and hook them up to a battery, solar panel or hamster wheel (No hamsters were harmed in the writing of this blog post).  The idea is that they require very little power to run and can last anywhere from a week to several months on a single charge, or indefinitely with solar.  These tend to have a range of 2-5 km.

You monitor the data and use it as you see fit.

Gumstix released a gateway/concentrator and a transciever module in Geppetto, as well as a gateway dev board for both the Overo and the Raspberry Pi Compute Modules (Overo Conduit and Gumstix Pi Conduit boards), and a weather station sensor board (Strata Node).  They're in the store and available in both North American and European frequency bands.

Once I had my Gumstix Overo Conduit gateway and an RHF0M301 gateway/concentrator module in hand, I was impressed with how quick and easy it was to set up on thethingsnetwork.org.  The Strata node I recieved was pre-release and hadn't had the bootloader flashed yet (they come pre-flashed now), so it took a little longer, but writing a sketch and setting up a project on TTN and cayenne.mydevices.com went super-smoothly.  It just so happens that I made a bit of a quick-start video:

Arduino Stuff

Arduino is a great thing.  For artists, makers, inventors, amateur developers, and teachers, it's a great way to avoid the challenges of bare-wire programming and get physical objects doing what you want them to do.  For professionals, it's a good prototyping tool, delivering your proof of concept to the project manager in hours or days instead of weeks (or worse).

Adding the ATmega32U4 to the Geppetto library means I'll get a lot more time to play with Arduino hardware, projects, board support, and the IDE.  It also means that there will likely be more Arduino boards coming to the store and hardware modules coming to the Geppetto library.

I'm also going to have to find a quick and easy way to set up my 'arduino_pins.h' file.

Discovering Protocase

If you've seen my previous posts, chances are you've seen my low-tech enclosures, mounting brackets and test environments.  My indoor quadcopter test flight had a paracord tether tied to the rafters so that I didn't give my co-workers a hair cut.  I like to think of it as ISRU (In Situ Resource Utilization).  However, in some cases, a solid, well-made case is more than just a good idea.  When I went shopping for enclosures for my Overo Conduit board so that I could deploy it outside, my boss pointed me to protocase.com.  I think he just wanted me to stop asking for a 3D printer for the office.

These guys are awesome.  They're working on something for me and I can't wait to show it off.  They have a huge variety of custom products: L-shape, U-shape 5-sided, milled aluminum, and more!  They'll build from your CAD drawings and have free templates to help get started.  They even have their own design software for you to use.  If all else fails, they will work with you and design a fully customized enclosure for your device.


If you've got a prototype, an invention or a first-run for a kickstarter campaign, Protocase might be for you.  Just check out their page and see for yourself.


To Summarize:

I've been busy.  From grinding away at that internal project to working on LoRa and Arduino board support to designing enclosures to recovering from the Intel IoT fallout, I've hardly had enough time to catch my breath.  Now that things are settling down a bit, I am looking forward to spending more time telling you all about the cool stuff I'm working on.

Wednesday, February 15, 2017

There is Nodana...

96Boards

For those of you who don't know about the 96Boards open-specification hardware platform, it's a design spec for single-board computers (SBCs) that enables SoC vendors to provide their hardware in a standard form factor for increased compatibility.  It's also an engaged community working together to develop applications, software, and mezzanine cards for this ecosystem.

96Boards now has 3 different specifications for 3 classes of application.  There's Consumer Edition (CE), with standardized breakouts for both high-speed and low-speed signals, USB ports, HDMI, and so on.  There's also the Enterprise Edition (EE), which is more for server and networking applications.  It's a larger and more free-form design, with a low-speed header, USB and Ethernet, minimum 1 GB DRAM or expandable SODIMM slots, and optional 1 - 16 x PICe.  Finally there's the brand new IoT Edition (IE) spec.  It's designed to be tiny in order to fit anywhere.

All of these specifications have variants that allow hardware developers to add extra bits to their boards, making this a very flexible way of standardizing the important parts of SBCs.

The big benefit is that you can unite developer communities accross platforms.  The mezzanine card or maker project developed for board A will be compatible with board B, and vice versa.  With support from Linaro, providing a common Linux ecosystem for these boards, not even software compatibility should get in your way.

My honest opinion is that this open specification is very cool.

Gumstix is a 96Boards Partner

Yep, we're in cahoots with the folks at 96Boards and Linaro to bring you compliant hardware.  The release of the AeroCore 2 for Dragonboard 410C was only the start.  At the same time, we added the 96Boards Mezzanine Connector module to Geppetto D2O's library so that users can design their own mezzos for other applications.  If you don't know what Geppetto is, you can learn more by going to the Meet Geppetto page, read my earlier posts, or go straight to geppetto.gumstix.com and give it a try.

I did a demo for 96Boards OpenHours, hosted by Mr. Robert Wolff (@sdrobertw) and actually flew my MAV, using a Dragonboard and the AeroCore 2 live in my office -- complete with a visit from the "demo demon".  The whole thing's on YouTube.



...Only Joule

So for those of you who don't know, a little compute module was released last year with quite a lot of juice hidden under its heat dissipator. The Intel® Joule™ module delivers unprecedented compute power in a tiny package.  From its two 100-pin Hirose connectors pour USB 3.0, MIPI LVDS,  PCI Express, HDMI, and a lot of what you already expect from COMs and SoCs.  It also houses its own WiFi and Bluetooth hardware.  All with the power of a quad-core processor akin to the Core-I7s you find in your desktop PCs.

Surprise, surprise, Geppetto's got that too!  You can go in and build your own host board using the Intel module and harness most of what it has to offer.

So a Square Peg and a Round Hole Walk Into a Bar...


On one hand you have this fantastic open spec hardware platform [round hole].  In the other, this epic compute module [square peg].  "those will never fit together," you might say (in fact, one 96Boards community member did).  Well, we gumstixians are very resourceful.  And the spec doesn't restrict the SoC's architecture to ARM, that's just the expectation.  So what did we do?  We took all of the components that make the 96Boards Consumer Edition spec great, we wired it up to the Joule connectors, (tested it), gave it a name, and unleashed it on the unsuspecting masses.

And that is how the Nodana 96Boards Consumer Edition (96BCE) for the Intel Joule module came to be.  Here it is:

Gumstix Nodana Features

The Black Sheep


That's right, all you doubters.  Now you can test your 96Boards projects on a powerful 64-bit multi-core Intel chip.  It's the first of its kind -- the first non-ARM 96Boards device.  Take it for a spin and tell me about what you do with it.  You can order it at store.gumstix.com/nodana-96bce.html

x86 IoT Fun

Psst!  We are also taking the IE spec to this dimension.  Our Radium 96BIE board complies with the 96Boards IoT Edition specification and runs the Intel® Curie™ module.  A 32-bit Quark processor  in bed with an ARCv2 MCU, a 6-axis internal measurement unit (IMU) and an independently programmable Bluetooth controller. Check it out at store.gumstix.com/radium-96bie.html.

Friday, November 4, 2016

How I Got My Dragonboard 410C Airborne

I was recently a guest on 96Boards OpenHours to demonstrate how the Aerocore 2 for Dragonboard 410C can be used to quickly and easily build a working quadcopter.   I even powered it up and tested it out indoors live.

If you want to see what happened, check out the YouTube video. The test flight happens at around the 40-minute mark.


Drones are awesome and not that hard to set up.  You can follow along with me if you're building your own.  Once you've got your rig put together, then you can start adding software to the Dragonboard -- or Any 96Boards CE SBC -- to turn it into a self-piloting, obstacle-avoiding, object-following marvel of automation... or whatever it is you plan to do with it.

To find out more about the Aerocore 2 for Dragonboard 410C, you can read my previous post or watch this promo video

The Parts

 The first step in building your quadcopter is to make sure you have all of the hardware you'll need.  Here's what I had on-hand:



You know you work somewhere cool when you can assemble a drone from hardware lying around the office.

The Prep

To keep this post brief, I'm going to glaze over the following steps.  They're fairly straightforward and unrelated and ubiquitous in MAV deployment so there are plenty of instructions available on the web.


  1. Assemble your drone kit.
    • Do not attach the rotor blades yet. You really don’t want your drone unexpectedly taking flight in the middle of your office/house/garage.
  2. The 12V battery connector and regulator on the Aerocore can handle the main battery’s output but there is no built-in connector on the drone or the battery.  
  3. solder-highlight.png
    • You can solder some jumper wires onto one of the motor power terminals on the base plate of your drone (circled in green here)
  4. Make sure you’ve flashed your Dragonboard with Linux. Linaro’s Debian 16.09 was used for this demo.
  5. Build QGroundControl.
  6. On your dragonboard 410C install the necessary packages
    • $ sudo apt-get update && sudo apt-get install python-wxgtk3.0 python-pip python-numpy python-dev libxml2-dev libxslt-dev gstreamer1.0-tools
    • $ sudo pip install pymalink
    • $ sudo pip install mavproxy
  7. Bind your satelite DSM receiver with your radio

(UPDATE:  Since the original project was completed, something about the pymavlink pip package has changed and will no longer install dependencies correctly.  therefore, add python-lxml to your apt-get command before installing pymavlink and mavproxy)

Put It All Together

Now the fun stuff can begin!  It's time to get everything hooked up and ready to fly.

Step 1: Attach your boards

With this thing going up in the air, you won't want your hardware sliding around at all so it's good to put some thought into how your boards are mounted.  The chassis I'm using doesn't have what I'd call a universal mounting system, so I made my own.  The box for an Intel Edison turned out to be just the right size and very sturdy.  I've already been using one on the rover in my RTK project to house a Beaglebone Black.

Some zip ties, screws and risers quickly transformed the cardboard box into a mounting bracket for my Dragonboard.  A touch of shameless self-promotion and it's ready.

Board goes on brackets, Aerocore on board.  I used a bit of electrical tape to hold the receiver in place and was ready to wire it up.

Pro-Tip:

MAVs tend to have alarm buzzers, used to indicate low battery and signal loss.  This is very important when in flight, but when you're setting everything up it can be really annoying.  Thankfully, the buzzer on the Aerocore 2 has a bypass circuit. After soldering a 2-pin header on the underside of the Aerocore, directly underneath the buzzer, you can use a jumper to deactivate the alarm.  For obvious reasons, I don't recommend hard-wiring the alarm bypass.  The picture to the right should help you find the two vias to connect.


  Step 2: Connect Wiring

One benefit of using a box as a mounting bracket is that it has proved to be the ideal place to hide excess wiring.  I cut a small opening in the bottom of the box and fed all of my wires in and through.  I got my hands on a webcam and managed to squeeze its base and cable in there too.  I labeled the following image so you can see where the various connections are.

Not having previous experience with MAVs, I had no idea what order to hook the electronic speed control PWMs in.  It took me a while, but I figured it out.  I put together an infographic for the rest of the amateur MAVers so that you don't have to struggle like I did.

Step 3: Software

The final pre-flight step is to configure your software.  There are three steps:
  1. Flash PX4 firmware to the MCU
  2. Start data pipeline on the Dragonboard
  3. Calibrate on-board sensors

QGroundControl makes programming and configuring your drone a snap.  Open up the program and go to the setup tab (Selection_065.png).  Along the left-hand side will be a button labeled “Firmware”. When you click on this button and then connect the Areocore 2 MCU’s “stm console” via USB, QGC will guide you through the flash process.
microcontroller-console.png

The rest of the pre-flight work can be done over WiFi on the Dragonboard. Going wire-free will also make calibration a little easier.

Disconnect the USB cable from your Aerocore and connect the battery. Once the MCU and Dragonboard boot, SSH into the Dragonboard and enter the following command:

mavproxy.py --master=/dev/ttyMSM1 --baudrate 115200 --out xxx.xxx.xxx.xxx:14550 --aircraft MyCopter
Where xxx.xxx.xxx.xxx is the IP address of your PC.

Once the MAVlink command interface comes up on the Dragonboard, QGC should be able to connect to your drone. If it does not connect correctly, you may have to add a UDP connection to QGC’s settings.  The setup screen should look simmilar to the following screenshot:

drone_setup.png

If this is the first time your Aerocore has been configured, the cicles that appear green in this shot will be red and you will not be able to deploy your drone until they all appear green.

Configuring your drone and calibrating the sensors is very straightforward thanks to the self-explanatory interface in QGC.  Click on each item along the left-hand side in turn -- apart from “Firmware”, which you have already done -- and follow the on-screen instructions.  Once all the lights are green, you’re ready to fly.

The final, and completely optional steps are getting the camera feed from the Dragonboard to QGC, and attaching a Pre-GO GPS module.  

Adding a GPS module is very easy.  Once it’s connected, it will work right away.  Connect it to the 5-pin molex connector next to the DSM satellite receiver connector.  Power down your drone and plug the module in using the included cable, and it's ready.  I added mine last thing right before the live test flight and it worked with no set-up required.

The video streamer, like the MAVlink proxy, is a single command on the Dragonboard:


gst-launch-1.0 uvch264src initial-bitrate=1000000 average-bitrate=1000000 iframe-period=1000 \
   device=/dev/video0 name=src auto-start=true src.vidsrc ! video/x-h264,width=1920,height=1080, \
   framerate=24/1 ! h264parse ! rtph264pay ! udpsink host=xxx.xxx.xxx.xxx port=5600


With both the proxy and the video feed running on the Dragonboard, your flight screen will look something like this:

in-flight.png

If you have added a Pre-GO GPS module, your drone’s location will appear in the navigation map seen here in the inset. You can switch the primary view between the video stream and the navigation map by clicking on the inset in the bottom left-hand corner.

 

And There You Have It...

You now have yourself a working drone.

Wednesday, August 24, 2016

Make Your Own 96Boards CE Mezzanine Board


www.96boards.org
96Boards is really gaining some traction in the embedded world. Its open specification, software support, and community make it an appealing platform for hardware developers, programmers and makers alike.  Part of the specification for the Consumer Edition boards is a mezzanine connector.  This allows users to expand the hardware capabilities of their 96Boards-compiant SBC.  So where do these mezzanine boards come from?


Commercial Mezzanine Boards

Several expansion boards already exist and are available for purchase from online vendors such as ARROW.  These boards are meticulously crafted by hand by a team of engineers and can take a considerable amount of time from conception to market and may not be ideal for your needs.  It would be good to be able to design your own board to meet your project specifications.  For example Gumstix has released the AeroCore 2 for Dragonboard 410C.  But what if you need additional sensors or another UART port or two?  Soldering in wires and adding breadboards is one way of doing this, but it's messy and cumbersome... Especially for drone applications.

Enter Geppetto D2O

What if I told you that you could just take the board, stretch it out and drop in some new hardware?  That would be nice, wouldn't it?  Well, when you import a design into your workspace from our existing ones, that's exactly what you can do.  And, of course, you can always start a design from scratch.

Geppetto D2O (Design to Order) allows you to design or customise an expansion board with a familiar-feeling drag-and-drop interface.  A long list of modules can be placed wherever you need them on your design and
connecting them to the other modules on your board is easy with Geppetto's context menu system.

The Geppetto workspace
Gumstix will even build and test your board for you, ensuring that your design is mechanically sound and ready to go.  A $1999 set-up fee and a few weeks later and your design is in your hands.

Aside from Gumstix's own Overo and DuoVero COMs, connectors for many 3rd party COMs and some on-board SOCs and microcontrollers are available as well.  Alongside the release of the new AeroCore 2 board, which, by the way, was itself designed in Geppetto, we have added a 96Boards-compliant mezzanine connector to the Geppetto module library.

It has never been easier to create your own expansion boards.  If you're looking for the shortest path to market or just want to design your "ultimate IoT development board," make sure you check this out.

Making the AeroCore 2 for 96Boards

Like I said earlier, the Aerocore 2 for Dragonboard 410C was designed in Geppetto by our engineers. All of the hardware on the board comes from the modules in Geppetto's library and the process is easily reproduced.  In fact, I think I'll just walk you through it right now.  How about I make my own version of the design from scratch?  It won't take long.






Step 1: Go to Geppetto

Geppetto is entirely online.  There is no need to install any software, configure settings, or hassle with any of the plethora of problems that CAD software can cause.  If your browser works, Geppetto works.

When Geppetto finishes loading, which only takes a few seconds, your workspace comes up.  This is where you design your board.  There are a few tutorial videos if you want a detailed look at the Geppetto interface.  For now I'm going to focus on building my own AeroCore 2 for 96Boards.







Step 2: Add the Connector

Grab the mezzanine connector for 96Boards from the "COM Connectors" tab in the column to the right.  It snaps to the bottom edge of the board.  This makes sure that the USB and HDMI ports on the host board are accessible.  The default board size is a little small for the module and can be resized as you would a window on your desktop.  Once the connector fits on the board you will notice that the board outline and the connector module are  both red.  That is because there are unmet reqirements.





Step 3: Satisfy Requirements

Almost every module that you place on the board will either require or provide certain signals and
buses.  The only exceptions to this rule are mechanical elements, such as mounting holes.
When you hover over a module, its requirements are displayed in a menu that pops up beside the module.  If you click on it, a list of modules that will satisfy that reqirement will appear in the library. Once you've placed a compatible module on the board, you can connect the modules by clicking on them in turn.  As soon as the requires are satisfied, the board and modules turn green.

Yes, it's a big game of "red light, green light." My kids love that one.  Make everything green and the board will work.  So far, all we can do is boot the board with a 16V battery for power.  Time to add some features.

Step 4: A Microcontroller

Some boards require a microcontroller to, say, manage sensor output or control some servos.  In the case of the AeroCore 2,  an ARM Cortex-M4 MC does more than that.  It actually runs a PX4 compatible autopilot software suite for drone control.

The COM connections for 96Boards are mounted on the underside of the board so modules can be placed within its shadow, as long as they don't overlap with the green footprint.  So in order to save space, I'm going to squeeze the M4 in there.  I can rotate the module by right-clicking it and selecting "rotate" from the context menu.  Double-clicking modules also rotates them.

The M4 requres 3.3V so we need to add a regulator in order to power it from the battery.  The regulator could also take 5V from the host board, but we'll be multiplexing that source with the battery later.





Step 5: The Meat

Now that the compute devices are placed, it's time to add the sensors, headers and connectors that make up the AeroCore 2.  If you watch the animation to the left, you can see the board come to life.  With each module added, all of the requires are provided and all of the modules turn green.  This only took me about 30 minutes to do, and with a little extra time and patience, I could re-arrange the board to match the design for the AeroCore 2 for Dragonboard exactly.  The only thing my design lacks is the LTE modem.  That one we added in after the Geppetto design was completed, squeezing it in over other module footprints.
You can see from the pictures below that my design (below) is pretty good, compared to the original design (above).
The Gumstix Aerocore 2 for Dragonboard 410C

My Aerocore 2 for 96Boards


But don't take my word for it, get started now! Go to geppetto.gumstix.com and start designing your own board for free.

Friday, July 22, 2016

More on the Areocore 2 for Dragonboard 410C



 As you could probably tell from my earlier post, I'm pretty excited for  the new Aerocore 2 board.  I just posted a short video showing off the board's features and performance that you really should watch if you have any interest in MAVs, drones or swarms.  This board's got some awesome capabilities.

Check out the video and see for yourself:



Friday, July 8, 2016

Remote Data Collection Board Chapter 2: Geppetto Design Process

So let's go through the steps it took to design my board.  Geppetto D2O is a web application so there is no download or software configuration steps, just straight to the design process.

First, click on that link or the one at the top of the page.  The app will load and you will see your workspace:

Geppetto Workspace
That column on the right hand side has all the modules that are available to add to your board.

Making the RDC Board

First, here are the main modules I'm going to use:

Processor: TI Sitara AM4378

Storage:
  • bootable uSD card reader
  • 8GB eMMC
Power: 5V barrel connector

USB:
  • USB type-A host 
  • USB micro-B console port
Network: NimbeLink Skywire LTE modem connector

Sensors: 
  • 9-axis IMU (gyro, mag, accel)
  • humidity
  • barometer
  • camera (on-board tiny caspa)
Headers:
  • 5-pin Pre-GO GPS connector 
  • 4-pin ADC
  • I2C
  • UART
  • SPI
  • 20-pin GPIO
There will definitely be other bits and pieces to add.  A reset button and power light, to name a couple.  Anyway let's get started.

Placing and Connecting Modules

A sensible place to start is the processor.  You can find the TI Sitara AM4378 module under the "Processors" tab in the right-hand column.  That section also has a couple other ARM microcontrollers and processors on there.  Just drag
Drag-n-drop your modules
and drop it onto your board the way you would an icon on your desktop.  This module is taller than the default board size but you can resize it just like any desktop window.

What I like to do next is to satisfy all of the module's dependencies before moving on to the next main module on my list.

With the connections option selected in Geppetto's toolbar, when I hover over a placed module, a list of required signals appears.  If I click on a red signal, that right-hand column is filtered to only display those modules that provide that signal.

AM4378 module's required signals
In order to supply a 5V signal to the processor module, I am going to use a 5V power multiplexer for reasons I'll explain later.

Once I place the power muxer on the board, the 5V signal on the CPU module turns yellow.  Yellow means that this signal can be provided by a module on the board.  Now when I click on it, a matching signal appears next to the power muxer, which I can click on to complete the connection.

I'll add the uSD reader, a 1.7mm 5V barrel connector and a USB micro-B connector.  I needed to add a 3.3V regulator to correctly power the uSD reader and a USB-UART interface adapter to connect to the proccessor's console.  You'll notice, connecting the USB-UART module to the processor, a little penguin head appears next to UART0.  This is the "Tux Approved" icon.  That means that if you connect to UART0, the console connection will work out of the box.  Otherwise, you might need to edit your boot sequence accordingly. 

Also I connected the muxer to the barrel connector AND the USB micro-B, again, for reasons I'll explain in a second.  As I connect the required signals between my modules, the modules turn green.  When all modules are green the board's border turns green too.
All my modules are green


Now it's time to add our LTE modem.
This one's under the "Network" tab.  Adding this module to our board is tricky in the case of our board.

I've been promising to tell you why we need a power muxer and this is it.  Nimbelink's specifications for current on their  modems is high to account for increases in power usage when signal quality is poor.  I'm sure you've noticed that when your smartphone's signal drops below two bars, your battery drains much faster.

Now this is supposed to be a REMOTE data collection device so we want it to be able to run off of solar panels and backup batteries.  So if the weather conditions are not condusive to providing enough power to the board, we want to continue collecting data. So once the reserve battery is depeleted, let's just run the processor and sensors off of the trickle of power the photovoltaic cells are providing.

To do this I'll hook the 5V signal directly to the barrel connector while everything else uses the power muxer.  The muxer will automatically switch to whichever source is providing the most power.

Another new task required for connecting the modem is choosing between multiple options.  It can communicate with the CPU either by USB or UART, so the signals pop-up has a "choose  >" item.  Hover over that and you see these two options.  In this case I want to use USB.  Overall, I need two USB host devices because I want to use a USB WiFi dongle for testing later.  That and some external sensors may require a USB connection.
Not enough USB host connections

But what's this?  The AM4378 module only provides ONE USB host?  No problem.  We'll just add an on-board 3-port USB hub. 

And that's about as difficult as placing and connecting modules can get.

I'll skip over the addition of the sensors and headers and go straight to layout.

Arranging Modules

The next step in my workflow is layout.  I like to get everything on the board first and put the puzzle together later.  That's one thing that's great about Geppetto.  Doing this in, say, Eagle is not a trivial process.  Here we can just move them arround and not worry about traces, vias, etc. This is my design now:
My arranged board


Once I clean it up, drop the eMMC I forgot about and add some mounting holes, it looks like this:


Saving and Previewing

Now that I have my design the way I want it, I don't want to lose it.  In order to save you need an account, but I'm sure you can set that up after clicking the login button on the top-right corner of the page.

When you click the save button, you'll be asked to provide a title and description.  When you click next, there will be a short wait while Geppetto thinks, then, and this is really cool, you'll see a 3D render of your board.


This design image can even be exported to an STL file, which is handy for making enclosures for it.

The final step in the Geppetto workflow is ordering, but for now, we'll stop here.  My imaginary company needs to approve the design before we commit to it.

NEXT TIME: Ordering and preparing for software development