<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ClaraS</id>
	<title>Mech - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ClaraS"/>
	<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php/Special:Contributions/ClaraS"/>
	<updated>2026-05-15T03:47:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9438</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9438"/>
		<updated>2008-12-13T23:30:38Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Advanced Circuits and PCB Artist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|400px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|400px|right|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|200px|right|Selecting PCB]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
[[image:DropComp.jpg|thumb|200px|right|Adding Component]]&lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
[[image:netweb.jpg|thumb|300px|right|Nets Connecting Pads, A yellow web]]&lt;br /&gt;
&lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
[[image:routedcircuit.jpg|thumb|300px|right|A routed circuit]]&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Printing_Circuit_Boards&amp;diff=9437</id>
		<title>Printing Circuit Boards</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Printing_Circuit_Boards&amp;diff=9437"/>
		<updated>2008-12-13T23:21:31Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* CAD Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
==CAD Software==&lt;br /&gt;
*[http://hades.mech.northwestern.edu/wiki/index.php/PCB_Artist PCB Artist]&lt;br /&gt;
*[http://peshkin.mech.northwestern.edu/software/traxmaker.zip Traxmaker]&lt;br /&gt;
*Eagle&lt;br /&gt;
&lt;br /&gt;
==Design Tutorial==&lt;br /&gt;
[[Media:PCBDesignTutorialRevA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Media:TraxMaker_Manual.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Media:2_13_08_Workshop_Slides.ppt]]&lt;br /&gt;
&lt;br /&gt;
[[Media:2_13_08_Workshop_Video(50MB).zip]]&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Printing_Circuit_Boards&amp;diff=9436</id>
		<title>Printing Circuit Boards</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Printing_Circuit_Boards&amp;diff=9436"/>
		<updated>2008-12-13T23:21:13Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* CAD Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
==CAD Software==&lt;br /&gt;
*[http://peshkin.mech.northwestern.edu/software/traxmaker.zip Traxmaker]&lt;br /&gt;
*Eagle&lt;br /&gt;
*[http://hades.mech.northwestern.edu/wiki/index.php/PCB_Artist PCB Artist]&lt;br /&gt;
&lt;br /&gt;
==Design Tutorial==&lt;br /&gt;
[[Media:PCBDesignTutorialRevA.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Media:TraxMaker_Manual.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Media:2_13_08_Workshop_Slides.ppt]]&lt;br /&gt;
&lt;br /&gt;
[[Media:2_13_08_Workshop_Video(50MB).zip]]&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Routedcircuit.jpg&amp;diff=9435</id>
		<title>File:Routedcircuit.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Routedcircuit.jpg&amp;diff=9435"/>
		<updated>2008-12-13T23:16:26Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Netweb.jpg&amp;diff=9434</id>
		<title>File:Netweb.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Netweb.jpg&amp;diff=9434"/>
		<updated>2008-12-13T23:16:04Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9433</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9433"/>
		<updated>2008-12-13T23:15:49Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Selecting your component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|400px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|500px|right|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|200px|right|Selecting PCB]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
[[image:DropComp.jpg|thumb|200px|right|Adding Component]]&lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
[[image:netweb.jpg|thumb|300px|right|Nets Connecting Pads, A yellow web]]&lt;br /&gt;
&lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
[[image:routedcircuit.jpg|thumb|300px|right|A routed circuit]]&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9432</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9432"/>
		<updated>2008-12-13T23:15:36Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Selecting your component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|400px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|500px|right|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|200px|right|Selecting PCB]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
[[image:DropComp.jpg|thumb|200px|right|Adding Component]]&lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
[[image:netweb.jpg|thumb|300px|right|Nets Connecting Pads, A yellow web]]&lt;br /&gt;
&lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
[[image:routedcircuit.jpg|thumb|300px|right|A routed circuit]]&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:DropComp.jpg&amp;diff=9431</id>
		<title>File:DropComp.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:DropComp.jpg&amp;diff=9431"/>
		<updated>2008-12-13T23:15:15Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9430</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9430"/>
		<updated>2008-12-13T23:15:04Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|400px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|500px|right|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|200px|right|Selecting PCB]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
[[image:DropComp.jpg|thumb|300px|right|Adding Component]]&lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
[[image:netweb.jpg|thumb|300px|right|Nets Connecting Pads, A yellow web]]&lt;br /&gt;
&lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
[[image:routedcircuit.jpg|thumb|300px|right|A routed circuit]]&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9429</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9429"/>
		<updated>2008-12-13T23:14:07Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Advanced Circuits and PCB Artist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|400px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|500px|right|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|300px|right|Selecting PCB]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
[[image:DropComp.jpg|thumb|300px|right|Adding Component]]&lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
[[image:netweb.jpg|thumb|300px|right|Nets Connecting Pads, A yellow web]]&lt;br /&gt;
&lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
[[image:routedcircuit.jpg|thumb|300px|right|A routed circuit]]&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9428</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9428"/>
		<updated>2008-12-13T23:12:59Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|400px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|400px|center|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|300px|right|Selecting PCB]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
[[image:DropComp.jpg|thumb|300px|right|Adding Component]]&lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
[[image:netweb.jpg|thumb|300px|right|Nets Connecting Pads, A yellow web]]&lt;br /&gt;
&lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
[[image:routedcircuit.jpg|thumb|300px|right|A routed circuit]]&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Selectboard.jpg&amp;diff=9427</id>
		<title>File:Selectboard.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Selectboard.jpg&amp;diff=9427"/>
		<updated>2008-12-13T23:08:11Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:PCBArtist.jpg&amp;diff=9426</id>
		<title>File:PCBArtist.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:PCBArtist.jpg&amp;diff=9426"/>
		<updated>2008-12-13T23:07:35Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9425</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9425"/>
		<updated>2008-12-13T23:06:48Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|300px|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
[[image:PCBArtist.jpg|300px|PCB Artist screen shot and designed PCB]]&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
[[image:Selectboard.jpg|thumb|300px|right]]&lt;br /&gt;
[[image:BoardOutline.jpg|thumb|300px|right]]&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:CircuitBoard.jpg&amp;diff=9424</id>
		<title>File:CircuitBoard.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:CircuitBoard.jpg&amp;diff=9424"/>
		<updated>2008-12-13T23:01:33Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9423</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9423"/>
		<updated>2008-12-13T22:54:38Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Tips on Routing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient? What about flipping it and putting it on the other side of the board?&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route, do not max this out without changing other things too.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board?&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9422</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9422"/>
		<updated>2008-12-13T22:52:59Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Tips on Routing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, try the following tips.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9421</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9421"/>
		<updated>2008-12-13T22:52:28Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Routing the Circuit= */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit====&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9420</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9420"/>
		<updated>2008-12-13T22:52:19Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Wiring and Routing the Circuit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
====Routing the Circuit=====&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9419</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9419"/>
		<updated>2008-12-13T22:51:56Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Wiring and Routing the Circuit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools &amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
Routing the Circuit&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs.&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9418</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9418"/>
		<updated>2008-12-13T22:51:18Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* General Building Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
*Use the ruler to make sure your spacing is consistent (ruler icon on the left)&lt;br /&gt;
*To change the size of the board, select one of the board edges, green line and drag it.&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools&amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
Routing the Circuit&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9417</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9417"/>
		<updated>2008-12-13T22:48:59Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Placing components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add &amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools&amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
Routing the Circuit&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9416</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9416"/>
		<updated>2008-12-13T22:47:42Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Creating the Board */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
&lt;br /&gt;
File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The Wizard will open, selections in the wizard&lt;br /&gt;
&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add&amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.  This includes the exact package dimensions found on the data sheet.&lt;br /&gt;
&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
&lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools&amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
Routing the Circuit&lt;br /&gt;
&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9415</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9415"/>
		<updated>2008-12-13T22:45:59Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Advanced Circuits and PCB Artist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn-around and good prices on low volume printed circuit board (PCB) orders.  This is the main supplier for PCBs created by students for clasess or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use, then uploaded to Advanced Circuits.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
1) File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
2) The Wizard will open, selections in the wizard&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add&amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools&amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
Routing the Circuit&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9414</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9414"/>
		<updated>2008-12-13T22:44:21Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating the Board==&lt;br /&gt;
&lt;br /&gt;
===Getting Started===&lt;br /&gt;
&lt;br /&gt;
To start a new PCB design follow these steps:&lt;br /&gt;
1) File -&amp;gt; New, then select &amp;quot;New PCB Design&amp;quot;&lt;br /&gt;
2) The Wizard will open, selections in the wizard&lt;br /&gt;
*Specify size: (mil = 1/1000 of an inch)  Note: The size of the board can be changed later, this is just to get started.&lt;br /&gt;
*Design Requirement:  For most projects you will want a &amp;quot;Basic&amp;quot; 2-layer standard.  More complex boards are significantly more expensive.&lt;br /&gt;
*Layers: If you have selected 2-layer standard, there are few options on this page, if you have more layers you can select power and ground planes.&lt;br /&gt;
*Board parameters: The default selection is fine for most projects&lt;br /&gt;
*The next few pages are about production- click next, this will be set up later.  (Ignore all cost estimates- these drastically change later)&lt;br /&gt;
*Name your file and save it&lt;br /&gt;
&lt;br /&gt;
You should have a board outline on your screen.  You can select which layers you view using the interaction bar on the left. (If it isn&#039;t open go file&amp;gt;interaction bar, or press F9)&lt;br /&gt;
&lt;br /&gt;
===Placing components===&lt;br /&gt;
PCB Artist has a large libary of componets. From the screen with your board outline to add components you can do many things:&lt;br /&gt;
*Click the icon with the DIP in the top left of the scree&lt;br /&gt;
*Press F8&lt;br /&gt;
*Add&amp;gt; Component&lt;br /&gt;
*Click &amp;quot;Add Component&amp;quot; at the bottom of the interaction bar&lt;br /&gt;
&lt;br /&gt;
====Selecting your component====&lt;br /&gt;
At this point it is important to know exactly what component you are using.&lt;br /&gt;
Open the &amp;quot;Add Component&amp;quot; window and make sure that the &amp;quot;Preview&amp;quot; box is checked.  As you scroll through the component list, a preview of the part will be displayed.  This also allows you to scroll quickly looking for the appropriate part.&lt;br /&gt;
Note: For many parts there are multiple package options, you can select this from the package drop down menu. &lt;br /&gt;
*If you are using an IC it is a good idea to see if they have the exact chip. You can do this by clicking find in the &amp;quot;add component&amp;quot; window and entering the part number. This search is very hard to use.  If you know the manufacturer, select it under the libraries tab and scroll to see if your component is there.  &lt;br /&gt;
*If you are using a basic SIP or DIP package find the &amp;quot;PCB&amp;quot; library, this has many selections for SIP and DIP components.  Check the package type.  An N, ie DIPN, indicates narrow packaging (300mil size, vs 600mil size)  &lt;br /&gt;
*For other components, check to see if there is a designated library, ie &amp;quot;diode&amp;quot; &lt;br /&gt;
*If you are using a discrete component (resistor, capacitor etc) click the Discrete library, then look through the list. &lt;br /&gt;
&lt;br /&gt;
Once you have found your component click &amp;quot;Add.&amp;quot;  The window will close and you can now place the part by clicking.  To rotate the part, just press R.  To flip the part (mirror image, for the back of the PCB) press F.  (When you are done with the component you can either right click or press escape.)&lt;br /&gt;
&lt;br /&gt;
Once you have placed the component, measure it!!!  Click the ruler icon on the lower left then click parts of the component to measure the distance between centers etc.  Double check this with your part!&lt;br /&gt;
&lt;br /&gt;
====If you need to make a component====&lt;br /&gt;
If you cannot find the necessary component you can build your own component.  There are a couple of ways to do this:&lt;br /&gt;
*Add pads (add pad icon on the left - looks like a yellow doughnut) and then add outlines (the add shape icons on the middle left)&lt;br /&gt;
*Click libraries (Blue book on the top bar) and then create your own part using the wizard.  If you do this, please add directions here.&lt;br /&gt;
&lt;br /&gt;
=== General Building Notes===&lt;br /&gt;
*Changing properties of the compnents, pads and connections:  Right click and select properties&lt;br /&gt;
*To change many things at once: Click the Abc in the menu bar, top, this will open a chart with the current pads, components and sizes. To change something, click and change a value.&lt;br /&gt;
* Grouping functions have not been found, however you can drag select to select multiple items.&lt;br /&gt;
*Through the Abc button (Design Technology Window) it is possible to change many aspects of your board, check here first!&lt;br /&gt;
*Adding Text, this will show up on silkscreen: Click the T on the left, then enter and place the text as you would with a component&lt;br /&gt;
&lt;br /&gt;
===Wiring and Routing the Circuit=== &lt;br /&gt;
Have your schematic out for reference.&lt;br /&gt;
PCB artist is helpful because it allows you to connect two points that need to be connected, with a straight line, no routing.&lt;br /&gt;
&lt;br /&gt;
*Click &amp;quot;Add unrouted connection&amp;quot; button on the left (pencil with two dots)&lt;br /&gt;
*Click the first connection point, then the second.  This will leave a yellow line connecting the two points. &lt;br /&gt;
*Connect your entire circuit this way, it should look like yellow web.&lt;br /&gt;
*Go to Tools&amp;gt; Optimize nets to make this neater and the connections more intelligent.&lt;br /&gt;
&lt;br /&gt;
Routing the Circuit&lt;br /&gt;
Once all of your connections are made, click the route icon on the left (blue and red wires crossing)&lt;br /&gt;
For now stick with the default settings, you can alter these later if you need to.&lt;br /&gt;
Click &amp;quot;Route.&amp;quot;  Routing will begin and a report will be generated.&lt;br /&gt;
Routes that show up in blue are on the bottom of a 2-layer board, red is on the top.&lt;br /&gt;
&lt;br /&gt;
To select an entire route, click on part of that route, then press H this will highlight the entire signal.&lt;br /&gt;
To unroute nets: Tools&amp;gt; unroute nets &amp;gt; All nets  (This will bring you back to the yellow web)&lt;br /&gt;
&lt;br /&gt;
====Tips on Routing====&lt;br /&gt;
If you have a dense circuit with many signals, routing may be difficult, tips to try.  After trying any of these things, click optomize nets under tools.&lt;br /&gt;
*Are your components efficiently placed?  Would rotating something make it more efficient.&lt;br /&gt;
*When you click the route button, in the route options window increase the effort and passes.  This also increases the time it takes to route something.&lt;br /&gt;
*Look at the desnset areas of the board (ie the center) can you move components, or rotate to free up some board space?&lt;br /&gt;
*Can you use a larger board.&lt;br /&gt;
*If you have assigned some routes to Power or Ground these are thicker by default.  Unless you have a high power application, these can usually be standardized, see the Abc button.&lt;br /&gt;
*You can route nets by hand, much more complicated, and usually the computer is smarter, especially on complex designs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Design Check===&lt;br /&gt;
Once your board is routed, and before you order it, do a design check.&lt;br /&gt;
Click the design rule check on the bottom left (2 red bars)&lt;br /&gt;
Leave the default for basic designs.  A design rule check report will be generated.  If you have errors, ie pads are too small, correct them either manually by right clicking and editing or by using the Abc button at the top to change many things at once.&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Once you have a fully routed design which is error free, and has been double checked you are ready to order your board.&lt;br /&gt;
From PCB artist you can order most options, except bare bones.  To do this click order now at the very top and follow the directions.  For support, call Advanced Cirucits (number at the top of the screen) or there is an ordering tutorial avalible from [http://www.4pbc.com their website].&lt;br /&gt;
&lt;br /&gt;
===Ordering Options=== &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9413</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9413"/>
		<updated>2008-12-13T21:42:14Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Ordering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Ordering Options: &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [http://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9412</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9412"/>
		<updated>2008-12-13T21:40:24Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ordering ==&lt;br /&gt;
Ordering Options: &lt;br /&gt;
*Barebones:  These boards are very basic.  They do not have solder mask (the green coating), or text on the board and the traces are exposed.  However, they are fairly cheap (charged by area) and they ship in 1 business day.  Perfect for prototyping.   [https://www.barebonespcb.com More info]&lt;br /&gt;
&lt;br /&gt;
*33- Each 2 layer PCBs can be ordered for $33 each, shipping in about a week.  These are complete, boards with screen printing and solder mask.  The max size is 60 square inches.  With the promo “student” the min qty of 4 is waived, allowing you to order a single board. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=130 More info]&lt;br /&gt;
&lt;br /&gt;
*Other promotions:  Advanced Circuits offers various other promotions for students and first time customers.  If you have questions, contact Jackie Sartin, our rep. [http://www.4pcb.com/index.php?load=content&amp;amp;page_id=129 More info]&lt;br /&gt;
&lt;br /&gt;
After ordering, it’s a good idea to call and make sure they have received your order, check the turn around date, promotions and any other info.  &lt;br /&gt;
&lt;br /&gt;
===Advantages===&lt;br /&gt;
&lt;br /&gt;
Many robots are limited by the use of motorized wheels. However, there are many advantages for building a robot that mimics the motion of a snake. Several advantages for movement of a snake robot are listed below:&lt;br /&gt;
&lt;br /&gt;
*Move across uneven terrain, since it is not dependent on wheels&lt;br /&gt;
*Possibly swim if water-proofed&lt;br /&gt;
*Move across soft ground such as sand, since it can distribute its weight across a wider area&lt;br /&gt;
&lt;br /&gt;
Also, from a systems standpoint, the snake robot can be very modular with many redundant segments. As a result, it is very easy to replace broken segments as well as shorten or lengthen the robot.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Although there are many advantages for building a snake like robot, there are several disadvantages which are listed below:&lt;br /&gt;
&lt;br /&gt;
*Low power and movement efficiency&lt;br /&gt;
*High cost of actuators (servos or motors)&lt;br /&gt;
*Difficult to control high number of degrees of freedom&lt;br /&gt;
&lt;br /&gt;
(Ma, 206)&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9411</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9411"/>
		<updated>2008-12-13T21:38:19Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Getting Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
*Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]  Or, type “PCB Artist” into google. Then click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
*[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages / Disadvantages of Robotic Snake Motion ==&lt;br /&gt;
&lt;br /&gt;
===Advantages===&lt;br /&gt;
&lt;br /&gt;
Many robots are limited by the use of motorized wheels. However, there are many advantages for building a robot that mimics the motion of a snake. Several advantages for movement of a snake robot are listed below:&lt;br /&gt;
&lt;br /&gt;
*Move across uneven terrain, since it is not dependent on wheels&lt;br /&gt;
*Possibly swim if water-proofed&lt;br /&gt;
*Move across soft ground such as sand, since it can distribute its weight across a wider area&lt;br /&gt;
&lt;br /&gt;
Also, from a systems standpoint, the snake robot can be very modular with many redundant segments. As a result, it is very easy to replace broken segments as well as shorten or lengthen the robot.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Although there are many advantages for building a snake like robot, there are several disadvantages which are listed below:&lt;br /&gt;
&lt;br /&gt;
*Low power and movement efficiency&lt;br /&gt;
*High cost of actuators (servos or motors)&lt;br /&gt;
*Difficult to control high number of degrees of freedom&lt;br /&gt;
&lt;br /&gt;
(Ma, 206)&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9410</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9410"/>
		<updated>2008-12-13T21:36:32Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Getting Set-up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Setup ==&lt;br /&gt;
Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]&lt;br /&gt;
Or, type “PCB Artist” into google.&lt;br /&gt;
Click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages / Disadvantages of Robotic Snake Motion ==&lt;br /&gt;
&lt;br /&gt;
===Advantages===&lt;br /&gt;
&lt;br /&gt;
Many robots are limited by the use of motorized wheels. However, there are many advantages for building a robot that mimics the motion of a snake. Several advantages for movement of a snake robot are listed below:&lt;br /&gt;
&lt;br /&gt;
*Move across uneven terrain, since it is not dependent on wheels&lt;br /&gt;
*Possibly swim if water-proofed&lt;br /&gt;
*Move across soft ground such as sand, since it can distribute its weight across a wider area&lt;br /&gt;
&lt;br /&gt;
Also, from a systems standpoint, the snake robot can be very modular with many redundant segments. As a result, it is very easy to replace broken segments as well as shorten or lengthen the robot.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Although there are many advantages for building a snake like robot, there are several disadvantages which are listed below:&lt;br /&gt;
&lt;br /&gt;
*Low power and movement efficiency&lt;br /&gt;
*High cost of actuators (servos or motors)&lt;br /&gt;
*Difficult to control high number of degrees of freedom&lt;br /&gt;
&lt;br /&gt;
(Ma, 206)&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9409</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9409"/>
		<updated>2008-12-13T21:36:17Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:CircuitBoard.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contact at Advanced Circuits====&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Set-up ==&lt;br /&gt;
Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]&lt;br /&gt;
Or, type “PCB Artist” into google.&lt;br /&gt;
Click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages / Disadvantages of Robotic Snake Motion ==&lt;br /&gt;
&lt;br /&gt;
===Advantages===&lt;br /&gt;
&lt;br /&gt;
Many robots are limited by the use of motorized wheels. However, there are many advantages for building a robot that mimics the motion of a snake. Several advantages for movement of a snake robot are listed below:&lt;br /&gt;
&lt;br /&gt;
*Move across uneven terrain, since it is not dependent on wheels&lt;br /&gt;
*Possibly swim if water-proofed&lt;br /&gt;
*Move across soft ground such as sand, since it can distribute its weight across a wider area&lt;br /&gt;
&lt;br /&gt;
Also, from a systems standpoint, the snake robot can be very modular with many redundant segments. As a result, it is very easy to replace broken segments as well as shorten or lengthen the robot.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Although there are many advantages for building a snake like robot, there are several disadvantages which are listed below:&lt;br /&gt;
&lt;br /&gt;
*Low power and movement efficiency&lt;br /&gt;
*High cost of actuators (servos or motors)&lt;br /&gt;
*Difficult to control high number of degrees of freedom&lt;br /&gt;
&lt;br /&gt;
(Ma, 206)&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9408</id>
		<title>PCB Artist</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=PCB_Artist&amp;diff=9408"/>
		<updated>2008-12-13T21:34:06Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: Contact Advanced Circuits:&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Snake_Robot_1.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Circuits and PCB Artist ==&lt;br /&gt;
&lt;br /&gt;
Advanced Circuits [http://www.4pcb.com (www.4pcb.com)] is a company based in Colorado known for their quick turn around and good prices on low volume printed circuit board (PCB) orders.  This has been the main supplier for PCBs created by students for class or research at Northwestern.&lt;br /&gt;
&lt;br /&gt;
Previously, the PCB was created in TraxxMaker or other CAD PCB program, many of which are outdated and difficult to use.  Advanced Circuits has created PCB Artist, free software to create schematics and PCBs.  This software is designed to order only from Advanced Circuits, although the file type produced is .brd.  This somewhat simplistic software is very intuitive (once comfortable) and allows for simple changes and editing.  Additionally, the component library offered is up to date and contains many specific components.  This Wiki page will cover the development and ordering process of the a simple PCB board.  &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Contact at Advanced Circuits===&lt;br /&gt;
&lt;br /&gt;
Jackie Sartin - Regional Sales Manager&lt;br /&gt;
&lt;br /&gt;
E-mail: jackies@4pcb.com&lt;br /&gt;
Call: 1-800-979-4PCB (4722) Ext: 1685&lt;br /&gt;
&lt;br /&gt;
== Getting Set-up ==&lt;br /&gt;
Have a complete circuit schematic and know exactly what parts (including part numbers) you are using.&lt;br /&gt;
[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=46 Download the software]&lt;br /&gt;
Or, type “PCB Artist” into google.&lt;br /&gt;
Click the download button in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
[http://www.4pcb.com/index.php?load=content&amp;amp;page_id=306 Help Guides and User Reference documents]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advantages / Disadvantages of Robotic Snake Motion ==&lt;br /&gt;
&lt;br /&gt;
===Advantages===&lt;br /&gt;
&lt;br /&gt;
Many robots are limited by the use of motorized wheels. However, there are many advantages for building a robot that mimics the motion of a snake. Several advantages for movement of a snake robot are listed below:&lt;br /&gt;
&lt;br /&gt;
*Move across uneven terrain, since it is not dependent on wheels&lt;br /&gt;
*Possibly swim if water-proofed&lt;br /&gt;
*Move across soft ground such as sand, since it can distribute its weight across a wider area&lt;br /&gt;
&lt;br /&gt;
Also, from a systems standpoint, the snake robot can be very modular with many redundant segments. As a result, it is very easy to replace broken segments as well as shorten or lengthen the robot.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages===&lt;br /&gt;
&lt;br /&gt;
Although there are many advantages for building a snake like robot, there are several disadvantages which are listed below:&lt;br /&gt;
&lt;br /&gt;
*Low power and movement efficiency&lt;br /&gt;
*High cost of actuators (servos or motors)&lt;br /&gt;
*Difficult to control high number of degrees of freedom&lt;br /&gt;
&lt;br /&gt;
(Ma, 206)&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The Head Segment ===&lt;br /&gt;
[[image:BallCaster.jpg|thumb|left|The Ball Caster Under the Front Segment]]&lt;br /&gt;
&lt;br /&gt;
The head segment is similar to the body segments except that it contains a PCB board with a PIC instead of a servo motor. The head segment is the same width but slightly longer than the body segment.  A ball caster was added to the front of the segment to help support the extra length and help the wheels stay on the ground.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Protection and Visual Appeal  ====&lt;br /&gt;
[[image:Housing.jpg|thumb|right|One Segment of the Housing]]&lt;br /&gt;
&lt;br /&gt;
As a final step, housing for each segment was created from 3&amp;quot; PVC pipe.  The pipe was cut into segments the same length as the chassis. The bottom of the pipe was cut off, allowing it to sit flat on the chassis. The housing provides a protective covering for the servo, batteries and electronics.  The pipe was attached with velcro straps which mounted under the chassis.  This housing can be easily removed to debug and to change batteries.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mechanical Debugging ===&lt;br /&gt;
&lt;br /&gt;
Wheels come off the ground:  Add washers to the standoffs to force the chassis to be parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
Wheels slide, but do not roll:  Increase frictionby either adding weight to the segment or changing the &amp;quot;tires&amp;quot; (the o-ring).&lt;br /&gt;
&lt;br /&gt;
The segments slip when the servo rotates:  Tighten the screws for the connector standoffs, both above the beam and below the chassis.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Electronics ==&lt;br /&gt;
====Parts List (Digikey Part Number)====&lt;br /&gt;
&lt;br /&gt;
*PIC: PIC18F4520&lt;br /&gt;
*Oscillator: 40MHz Oscillator (X225-ND)&lt;br /&gt;
*RC Servo (see mechanical design) preferably high-torque &lt;br /&gt;
*10 wire IDC ribbon cable&lt;br /&gt;
*10 pos IDC cable socket (ASC10G): 1 per segment&lt;br /&gt;
*10 pos IDC cable header (A26267-ND): 1 per segment&lt;br /&gt;
*3 pos AAA battery holder (BH3AAA-W-ND): 1 per segment&lt;br /&gt;
*2 pos AAA battery holder (BH2AAA-W-ND): 1 per segment&lt;br /&gt;
*475 Ohm resistors (transmission line termination)&lt;br /&gt;
*Various switches to turn power electronics and the motors on/off&lt;br /&gt;
*Standard Protoboard, to mount connector from ribbon cable, and switches for each motor&lt;br /&gt;
*Xbee radio pair and PC &lt;br /&gt;
&lt;br /&gt;
====Electronics in Each Body Segment====&lt;br /&gt;
[[image:RibbonCable_schematic_HLS.jpg|thumb|right|Ribbon Cable Schematic]][[image:ServoBoard_schematic_HLS.jpg|thumb|right|ServoBoard Schematic]][[image:ServoBoard_Hooked_up_HLS.jpg|thumb|right|A Complete Circuit Board on the Snake]]&lt;br /&gt;
&lt;br /&gt;
The each segment of the snake contains a Futaba Standard RC Servo.  Each servo has 3 wires: power, ground, and signal.  The signal generated by the microcontroller is carried by the IDC ribbon cable, and each servo board taps into a single signal line and the reference ground line as shown in the ribbon cable schematic.  Each segment of the snake contains a small circuit board (ServoBoard Schematic) which has a connector for the ribbon cable, a switch to control the power, and a power indicator LED.  Because of the length of the ribbon cable, each signal line must be terminated with a 475 ohm resistor to prevent reflected &amp;quot;ghost&amp;quot; signals from interfering with the original signal.&lt;br /&gt;
&lt;br /&gt;
Each servo board also has its own power supply of 5 AAA cells, which gives each servo 7.5V.  Although the servos are only rated for 6V, 7.5V was used because more torque was needed.  The current drain (up to 500mA) caused the voltage across the cells to drop due to the high internal resistance of the alkaline cells.  NiMH rechargeable cells are more capable of handling high current draw applications, but are also much more expensive and can take several hours to charge.&lt;br /&gt;
&lt;br /&gt;
The robot snake can run for about 1 hour on the alkaline cells, after which the servos no longer have enough torque to generate the serpentine motion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Electronics in The Head Segment====&lt;br /&gt;
[[image:PICBoard_schematic_HLS.jpg|thumb|right|The Mainboard Schematic]]&lt;br /&gt;
[[image:PICBoard_HLS.jpg|thumb|right|The Electronics in the Head]]&lt;br /&gt;
&lt;br /&gt;
The PIC18F4520 Prototyping Board designed by Professor Peshkin was used.  Schematics of the board can be found here: [[Main_Page#PIC_18F4520_prototyping_board|18F4520_prototyping_board]].  The only change applied to the board was to replace the 20MHz clock with a 40MHz clock. This allowed the microcontroller to perform calculations faster, improving the resolution of the servo signal.  The ribbon cable was connected to the ground and port D pins on the PIC.&lt;br /&gt;
&lt;br /&gt;
An [[XBee_radio_communication_between_PICs|XBee radio]] was used to communicate between the microcontroller and the PC. The wiring diagram shows a schematic for the Xbee connection with the PIC. The [[XBee_radio_communication_between_PICs#XBee_Interface_Module|XBee Interface Board]] was used to provide a robust mechanical mount for the radio, as well as supply the 3.3V needed by the XBee.  On the PC side, another XBee interface board was plugged into the FTDI USB-Serial converter. Other than this, no special electronics were needed for the XBee radio.  The radio simply acted as a serial cable replacement  The snake was controlled by sending commands with a terminal program. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIC Code ==&lt;br /&gt;
There are two PIC files used in this robotic snake, SnakeServos.c and main.h, which are shown below. main.h sets up  the default parameters used in SnakeServos.c. The microcontroller controls the RC servos and receives data from a computer via serial communication.&lt;br /&gt;
&lt;br /&gt;
The main purpose of SnakeServos.c is to calculate the motion profile of the servos, and send a corresponding signal to each of the servos every 20 ms.  The code for this is found in the &amp;lt;tt&amp;gt;ISR_20MS&amp;lt;/tt&amp;gt; function in the code which is run every 20ms.&lt;br /&gt;
&lt;br /&gt;
A secondary function is to update the parameters that affect the motion of the snake.  The code for this can be found in the &amp;lt;tt&amp;gt;ISR_USART_RX&amp;lt;/tt&amp;gt; function, which is run every time a byte is received on the USART&#039;s receive buffer.&lt;br /&gt;
&lt;br /&gt;
====Servo Control Details====&lt;br /&gt;
The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). See [[RC Servo Theory]] for a discussion of the control signal for an RC servo. The RC servo expects a pulse every 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the constant &amp;lt;tt&amp;gt;TMR1_20MS&amp;lt;/tt&amp;gt; (defined as &amp;lt;tt&amp;gt;15536&amp;lt;/tt&amp;gt;), which will cause Timer1 to overflow 20 ms later and re-trigger the interrupt. &lt;br /&gt;
&lt;br /&gt;
As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and the corresponding timer value is stored in an array called &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt;. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; only needs to be polled for 2.25 ms. &amp;lt;tt&amp;gt;TMR1_2point25MS&amp;lt;/tt&amp;gt; is a constant corresponding to the value of &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; 2.25 ms after the interrupt begins and is defined as &amp;lt;tt&amp;gt;15536 + 6250&amp;lt;/tt&amp;gt;. While &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is less than this variable, the counter is compared sequentially to the values in the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array plus 15536 (15536 must be added because the Timer1 started counting at 15536 instead of 0).  Since the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array corresponds to the pulse widths of the servos, when the value of &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is greater than a value in &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; plus 15536, the corresponding pin is set low. After the sequence is complete, &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than &amp;lt;tt&amp;gt;TMR1_2point25MS&amp;lt;/tt&amp;gt;. After all the servo signals have been sent, the values in the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array are updated to prepare for the next 20ms interrupt. &lt;br /&gt;
&lt;br /&gt;
Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.&lt;br /&gt;
&lt;br /&gt;
====Serial Communication Details====&lt;br /&gt;
The PIC communicates serially with a XBee radio to a PC with a XBee radio. As shown in the code, the serial communication allows the user to change the speed, the amplitude and period of the sine wave, and the direction (forward, reverse, left and right) of the robotic snake. When a byte is received in the UART receive buffer, a high-priority interrupt is triggered.  The received byte is put into a switch-case statement, and the corresponding parameters are updated.&lt;br /&gt;
&lt;br /&gt;
====SnakeServos.c====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Andy Long, Clara Smart, and Michael Hwang&#039;s snake robot code.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;18f4520.h&amp;gt;&lt;br /&gt;
#device high_ints=TRUE        // this allows raised priority interrupts, which we need&lt;br /&gt;
#fuses HS,NOLVP,NOWDT,NOPROTECT&lt;br /&gt;
#use delay(clock=40000000)&lt;br /&gt;
#use rs232(baud=9600, UART1) &lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;main.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Put your desired high duration here; &lt;br /&gt;
3200 is center  &lt;br /&gt;
1000 is 90 deg right &lt;br /&gt;
5400 is 90 deg left&lt;br /&gt;
*/&lt;br /&gt;
int16 RCservo[7];  &lt;br /&gt;
&lt;br /&gt;
//use volatile keyword to avoid problems with optimizer&lt;br /&gt;
volatile float a = A_DEFAULT;&lt;br /&gt;
volatile float b = B_DEFAULT;&lt;br /&gt;
volatile float c = C_DEFAULT;&lt;br /&gt;
&lt;br /&gt;
volatile float alpha;&lt;br /&gt;
volatile float gamma;&lt;br /&gt;
volatile float beta;&lt;br /&gt;
volatile float speed = 0;&lt;br /&gt;
volatile float prev_speed = SPEED_DEFAULT;&lt;br /&gt;
float t = 0; &lt;br /&gt;
&lt;br /&gt;
#INT_TIMER1 // designates that this is the routine to call when timer1 overflows&lt;br /&gt;
//generates servo signals&lt;br /&gt;
void ISR_20MS(){&lt;br /&gt;
   volatile unsigned int16 time;&lt;br /&gt;
   set_timer1(TMR1_20MS);		//set timer to trigger an interrupt 20ms later&lt;br /&gt;
   SET_ALL_SERVOS(0b11111111);	//begin pulse for servo signal&lt;br /&gt;
   time=get_timer1();			//poll timer&lt;br /&gt;
   while(time &amp;lt; TMR1_2point25MS){	//end this loop after 2.25 ms&lt;br /&gt;
      if (time &amp;gt; (RCservo[0] + TMR1_20MS)){	&lt;br /&gt;
         output_low(SERVO_0);	//end the pulse when time is up&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[1] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_1);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[2] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_2);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[3] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_3);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[4] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_4);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[5] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_5);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[6] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_6);&lt;br /&gt;
      }&lt;br /&gt;
      time=get_timer1();	//poll timer&lt;br /&gt;
   }&lt;br /&gt;
   SET_ALL_SERVOS(0);	//set all servos low in case some pins are still high&lt;br /&gt;
&lt;br /&gt;
    //3200 is center  //1000 is 90 deg right // 5400 is 90 deg left&lt;br /&gt;
   /*&lt;br /&gt;
   add value of sine wave with phase offset ((alpha*sin(t + X*beta), &lt;br /&gt;
   3200 for servo center position,&lt;br /&gt;
   an adjustment value to compensate for offsets when mounting servo horn (SERVO_X_ADJ),&lt;br /&gt;
   and bias (gamma) for turning.&lt;br /&gt;
   */&lt;br /&gt;
   RCservo[0]=(int16)(alpha*sin(t) + 3200 + SERVO_3_ADJ + gamma); &lt;br /&gt;
   RCservo[1]=(int16)(alpha*sin(t + 1*beta) + 3200 + SERVO_4_ADJ + gamma);&lt;br /&gt;
   RCservo[2]=(int16)(alpha*sin(t + 2*beta) + 3200 + gamma + SERVO_5_ADJ);&lt;br /&gt;
   RCservo[3]=(int16)(alpha*sin(t + 3*beta) + 3200 + gamma + SERVO_6_ADJ);&lt;br /&gt;
   RCservo[4]=(int16)(alpha*sin(t + 4*beta) + 3200 + gamma + SERVO_7_ADJ);&lt;br /&gt;
   RCservo[5]=(int16)(alpha*sin(t + 5*beta) + 3200 + gamma + SERVO_8_ADJ);&lt;br /&gt;
   RCservo[6]=(int16)(alpha*sin(t + 6*beta) + 3200 + gamma + SERVO_9_ADJ);&lt;br /&gt;
&lt;br /&gt;
   t+= speed;	//increment time, wrap around if necessary to prevent overflow&lt;br /&gt;
   if (t &amp;gt; 2*pi){&lt;br /&gt;
      t = 0;&lt;br /&gt;
   }&lt;br /&gt;
   else if (t &amp;lt; 0){&lt;br /&gt;
      t = 2*pi;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#INT_RDA HIGH    //High-Priority Interrupt triggered by USART Rx&lt;br /&gt;
//parameter update&lt;br /&gt;
void ISR_USART_RX(){&lt;br /&gt;
   char input;&lt;br /&gt;
   if (kbhit()){&lt;br /&gt;
      input = getc();&lt;br /&gt;
      switch(input){&lt;br /&gt;
         case &#039;w&#039;: //accelerate&lt;br /&gt;
            speed += 0.002;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;s&#039;: //decelerate&lt;br /&gt;
            speed -= 0.002;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;x&#039;: //pause motion&lt;br /&gt;
            prev_speed = speed;&lt;br /&gt;
            speed = 0;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;z&#039;: //resume motion&lt;br /&gt;
            speed = prev_speed;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;c&#039;: //reverse speed&lt;br /&gt;
            speed = -speed;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;a&#039;: //increase left turn rate&lt;br /&gt;
            c -= 1000;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;d&#039;: //increase right turn rate&lt;br /&gt;
            c += 1000;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;f&#039;: //set turn rate to 0&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma = 0;&lt;br /&gt;
         case &#039;t&#039;: //increase amplitude&lt;br /&gt;
            a += 10; &lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;g&#039;: //decrease amplitude&lt;br /&gt;
            a -= 10;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;y&#039;: //increase phases in body&lt;br /&gt;
            b += 0.1;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;h&#039;: //decrease phases in body&lt;br /&gt;
            b -= 0.1;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;1&#039;: //preset 1&lt;br /&gt;
            a = A_DEFAULT;&lt;br /&gt;
            b = B_default;&lt;br /&gt;
            c = C_default;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;  &lt;br /&gt;
         case &#039;2&#039;:  //preset 2&lt;br /&gt;
            a = 1400;&lt;br /&gt;
            b = 2*pi;&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;3&#039;:  //preset 3&lt;br /&gt;
            a = 1000;&lt;br /&gt;
            b = 5*pi;&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;              &lt;br /&gt;
         default:&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main() {&lt;br /&gt;
	//load default values&lt;br /&gt;
   a = A_DEFAULT;&lt;br /&gt;
   b = B_default;&lt;br /&gt;
   c = C_default;&lt;br /&gt;
   gamma=-c/num_segments;&lt;br /&gt;
   beta=b/num_segments;&lt;br /&gt;
   alpha=a*abs(sin(beta));&lt;br /&gt;
   speed=0;&lt;br /&gt;
   &lt;br /&gt;
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4 );       &lt;br /&gt;
   set_timer1(0);&lt;br /&gt;
   &lt;br /&gt;
   enable_interrupts(INT_TIMER1);	//enable Timer1 interrupt&lt;br /&gt;
   enable_interrupts(INT_RDA);		//enable USART receive interrupt&lt;br /&gt;
   enable_interrupts(GLOBAL);&lt;br /&gt;
      &lt;br /&gt;
   while (TRUE) {     &lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===main.h===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef __MAIN_H__&lt;br /&gt;
#define __MAIN_H__&lt;br /&gt;
&lt;br /&gt;
#define SET_ALL_SERVOS(x) output_d(x)&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
This chart matches the pin on the PIC to the wire on the ribbon cable&lt;br /&gt;
PIN WIRE IN USE&lt;br /&gt;
--- ---- -------&lt;br /&gt;
RD0  2&lt;br /&gt;
RD1  3      *&lt;br /&gt;
RD2  4      *&lt;br /&gt;
RD3  5      *&lt;br /&gt;
RD4  6      *&lt;br /&gt;
RD5  7      *&lt;br /&gt;
RD6  8      *&lt;br /&gt;
RD7  9      *&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
#define SERVO_3_ADJ 0&lt;br /&gt;
#define SERVO_4_ADJ 300&lt;br /&gt;
#define SERVO_5_ADJ (-150)&lt;br /&gt;
#define SERVO_6_ADJ 75&lt;br /&gt;
#define SERVO_7_ADJ (-200)&lt;br /&gt;
#define SERVO_8_ADJ 100&lt;br /&gt;
#define SERVO_9_ADJ (-150)&lt;br /&gt;
&lt;br /&gt;
#define SERVO_0 PIN_D1&lt;br /&gt;
#define SERVO_1 PIN_D2&lt;br /&gt;
#define SERVO_2 PIN_D3&lt;br /&gt;
#define SERVO_3 PIN_D4&lt;br /&gt;
#define SERVO_4 PIN_D5&lt;br /&gt;
#define SERVO_5 PIN_D6&lt;br /&gt;
#define SERVO_6 PIN_D7&lt;br /&gt;
&lt;br /&gt;
#define A_DEFAULT 1300&lt;br /&gt;
#define B_DEFAULT 3*pi&lt;br /&gt;
#define C_DEFAULT 0&lt;br /&gt;
&lt;br /&gt;
#define SPEED_DEFAULT 0.05&lt;br /&gt;
#define OMEGA_DEFAULT 1&lt;br /&gt;
#define num_segments 8&lt;br /&gt;
&lt;br /&gt;
#define TMR1_20MS 15536&lt;br /&gt;
#define TMR1_2point25MS 15536 + 6250&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
Overall, the robotic snake was successful. &lt;br /&gt;
&lt;br /&gt;
Initially, the mechanical design included a single wheel mounted in the center of the pvc pipe. However, the motion of the snake was very difficult to control because the robotic snake became unstable very easily. As a result, the chassis was built to include two wheels, as discussed in the mechanical design section, in order to provide stability which made the robot easier to control. &lt;br /&gt;
&lt;br /&gt;
Wireless control from a laptop allowed easy demonstration of the snakes capabilities, and allowed others to easily control its movement.&lt;br /&gt;
&lt;br /&gt;
The final robotic snake can be seen in action here. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=Sb8WqaLX1Vo Video of the robot snake without housing]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
The robotic snake was developed within five weeks, and proved to be a very successful demo. There are many options that could be researched and developed to add to this robot and discussed below.&lt;br /&gt;
&lt;br /&gt;
==== Position Sensors ====&lt;br /&gt;
Sensors could be added to the robot to allow it to know its position. This could be accomplished with a combination of encoders on a segment. Most likely, the middle segment should be used since it would be the approximate center of gravity. Knowledge of the position of the center of gravity would potentially the robotic snake to be sent to different locations or navigate (using dead reckoning) through a pre-determined obstacle course or maze.  The information from encoders could be sent to a computer to observe different snakelike motions with different parameters.&lt;br /&gt;
&lt;br /&gt;
==== Obstacle Avoidance ====&lt;br /&gt;
With optical sensors on the head of the snake, the robot would be able to sense an obstacle and either overide the wireless command and avoid it, or stop completely, and wait for further commands.&lt;br /&gt;
&lt;br /&gt;
==== Power Supply ====&lt;br /&gt;
Currently, 5 AAA batteries are required for each servo, meaning that this robot requires many batteries. As a result, a different power supply could be investigated.&lt;br /&gt;
&lt;br /&gt;
====High Torque Servos====&lt;br /&gt;
The servos in the snake have a large load but do not need to move very quickly, so high torque servos could be used instead of standard servos.  This would also prolong the battery life because the servos would be operating in a more efficient range.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
Ma, Shugen. &amp;quot;Analysis of creeping locomotion of a snake-like robot.&amp;quot; &#039;&#039;Advanced Robotics&#039;&#039; Vol 15, No 2 (2001): 205-6.&lt;br /&gt;
&lt;br /&gt;
Saito, Fukaya, Iwasaki. &amp;quot;Serpentine Locomotion with Robotic Snakes&amp;quot;. &#039;&#039;IEEE Control Systems Magazine&#039;&#039; (Feb 2002): 66, 72-73.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9407</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9407"/>
		<updated>2008-12-13T21:28:57Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Northwestern University mechatronics design wiki provides reference material on the theory and applications of electronics, sensors, actuators, etc., for use in mechatronics-related research and projects.  Practical applications often refer to equipment and supplies available in the [http://mechatronics.mech.northwestern.edu/ Northwestern Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
Important:  Please be sure to read the [http://mechatronics.mech.northwestern.edu/mech-rules.pdf Rules for Using the Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Design Competition 2008&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wiki pages on sensors, actuators, programming, and microcontrollers: use pages below&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/QuickStart/ Parts in the DC2008 quick start pack]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/piccintro_2008-01-24.pdf PIC C intro slides, as presented 2008/01/24 (pdf)]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/picinterfacing_2008-01-28.pdf PIC interfacing slides, as presented 2008/01/28 (pdf)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Sensors and actuators for DC&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Using Solderless Breadboard|Solderless Breadboard &amp;amp; wiring that works]]&lt;br /&gt;
* [[Using LEDs &amp;amp; IREDs]]&lt;br /&gt;
* [[Using a laser]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity]]&lt;br /&gt;
** Using phototransistors&lt;br /&gt;
** Sensing optical tape&lt;br /&gt;
* [[Comparators | Comparators : the analog digital interface]]&lt;br /&gt;
* [[Driving a DC Motor using PWM]]&lt;br /&gt;
* [http://www.robotroom.com/FaulhaberGearmotor.html Faulhaber MiniMotor SA gearmotor with encoder], as well as [[Actuators_Available_in_the_Mechatronics_Lab#Faulhaber_1524E006S_motor_with_141:1_gearhead_and_HES164A_magnetic_quadrature_encoder|the local wiki page]]&lt;br /&gt;
* [[Adding a magnetic encoder to a GM3 Gearmotor]]&lt;br /&gt;
** Using magnetic switches (Hall Effect)&lt;br /&gt;
* [[Driving using a single MOSFET | Driving a DC motor using a single MOSFET]]&lt;br /&gt;
* [[High-current devices|Driving high-current devices: several options]]&lt;br /&gt;
* [[Driving a Stepper Motor]]&lt;br /&gt;
* [[Driving an RC Servo]]&lt;br /&gt;
* [[Accelerometers]]&lt;br /&gt;
* [[Strain gauges]]&lt;br /&gt;
* [[Using the Basic Stamp Microcontroller|Basic Stamp Microcontroller]] &amp;lt;b&amp;gt;Not recommended for DC2008&amp;lt;/b&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/Battery_NiMH/ NiMH rechargable batteries and chargers]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; [http://peshkin.mech.northwestern.edu/datasheets Prof. Peshkin&#039;s favorite datasheets]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC 18F4520 prototyping board &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[4520 Board intro|Prototyping board intro]]&lt;br /&gt;
*[[4520 Board construction|Assembling the 18F4520 prototyping board, circuit, parts]]&lt;br /&gt;
*[[4520 Board use|Using the 18F4520 prototyping board]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Programming with CCS C &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[C language|The C language]]&lt;br /&gt;
*[[CCS C|CCS C, specifically for the 18F4520]]&lt;br /&gt;
*[[Embedded Programming Tips for CCS C]]&lt;br /&gt;
*[[CCS IDE|Using the CCS development environment]]&lt;br /&gt;
*[[Debugging C on a PIC]]&lt;br /&gt;
*[[More debugging tips]]&lt;br /&gt;
*[http://www.ccsinfo.com/forum/ CCS user forum]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Interfacing and skeleton code for the PIC 18F4520&amp;lt;/h3&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have wiki pages &amp;lt;i&amp;gt;and&amp;lt;/i&amp;gt; sample code available&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Digital inputs &amp;amp; outputs]] (filename: DigitalIO)&lt;br /&gt;
* [[Analog Input]] (filename: AnalogInput)&lt;br /&gt;
** reading a trimpot&lt;br /&gt;
** reading a phototransistor&lt;br /&gt;
** amplified phototransistor, and IRED strobing&lt;br /&gt;
** using an instrumentation amp (example: for a strain gauge)&lt;br /&gt;
* [[Analog Output|Analog Output, and the I2C bus]] (filename: AnalogOutput)&lt;br /&gt;
* [[Waveform Generation with AD9833, and SPI]] (filename: AD9833)&lt;br /&gt;
*[[Pulse width modulation|Pulse width modulation (PWM) for driving motors or other high current devices]] (filename: MotorPWM)&lt;br /&gt;
** using H-bridges&lt;br /&gt;
* [[Interrupts]]&lt;br /&gt;
* [[Quadrature decoding in software]] (filename: QuadratureSoft)&lt;br /&gt;
* [[Quadrature decoding in hardware, or just counters]] (filename: QuadratureHard)&lt;br /&gt;
* [[Running RC servos]] (filename: RCservoSoft &amp;amp; RCservoHard)&lt;br /&gt;
* [[Watchdog timer]] (filename: Watchdog)&lt;br /&gt;
* [[PIC RS232|RS-232 serial communication between a PC and a PIC]] (filename: RS232)&lt;br /&gt;
* [[C Example: Serial LCD|Text output to a serial LCD display]]&lt;br /&gt;
* [[C Example: Parallel Interfacing with LCDs|Text output to a parallel LCD display]]&lt;br /&gt;
* [[Servo skeleton with fast &amp;amp; slow interrupts]]&lt;br /&gt;
* [[XBee radio communication between PICs]] (and between a PC and a PIC)&lt;br /&gt;
* [[I2C communication between PICs]]&lt;br /&gt;
* [[Serial communication with Matlab]]&lt;br /&gt;
* [[SPI communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested)&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Microphones]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Controlling a seven segment display]]&lt;br /&gt;
* [[Storing constant data in program memory]]&lt;br /&gt;
* [[PIC computation time benchmarks]]&lt;br /&gt;
* [[Stepper motor control with the PIC]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[IR communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested) &amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Interfacing to External EEPROM]]&lt;br /&gt;
* [[I2C Motor Controller]]&lt;br /&gt;
* [[Interfacing with a Photodiode Array]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have sample code available, but no wiki pages yet&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Counter0 - Counting pulses with Timer0]&lt;br /&gt;
* Counter1 - Counting pulses with Timer1]&lt;br /&gt;
* Interrupt0 - Periodic servo cycles using interrupt routines, 10mS &amp;amp; slower; Timer 0]&lt;br /&gt;
* Interrupt2 - Periodic servo cycles using interrupt routines; 10mS &amp;amp; faster; Timer 2]&lt;br /&gt;
* InterruptExternal - Interrupts generated by an external pulse]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics need more development&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* AnalogOutputParallel - Analog output using 8 digital lines]&lt;br /&gt;
* PIC-to-PIC communication &lt;br /&gt;
* Zigbee radio communication&lt;br /&gt;
* Modulated IR communication&lt;br /&gt;
* Strobing LEDs or IREDs for better range and immunity to background light&lt;br /&gt;
* I2C communication &lt;br /&gt;
* CAN bus&lt;br /&gt;
* Capturing data to Matlab&lt;br /&gt;
* Running stepper motors&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC Microcontrollers&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with CCS Compiler]], for DC, 333, etc, using the CCS ICD-U40 device &amp;lt;b&amp;gt;[this section has been replaced by the material above]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with C18 Compiler]], for e-puck, or using the Microchip ICD device or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;e-puck Mobile Robot&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[e-puck Mobile Robot]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Printing Circuit Boards]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[PCB Artist | PCB Artist: Software provided by Advanced Circuits]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Electronics &amp;lt;/h3&amp;gt;&lt;br /&gt;
* [http://hades.mech.northwestern.edu/wiki/index.php/Category:Electronics Electronics]&lt;br /&gt;
* [[Phase-Sensitive Detection]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Op-Amp Applications]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Analog and Digital chips&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Comparators | Comparators: the analog to digital interface]]&lt;br /&gt;
* [[Filtering with the LMF100 | Filtering with the LMF100]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Opamps : building blocks of analog computation]&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/InstAmp/instamp.htm Instrumentation amps, and NU circuit board for them]&lt;br /&gt;
* [[LED Drivers | Controlling larg numbers of LEDs with LED drivers]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Sensors|Sensors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Potentiometers|Angle, Linear Position: Potentiometers]]&lt;br /&gt;
* [[Optointerrupter|Beam Breaker: Optointerrupter]]&lt;br /&gt;
* [[Optoreflector|Proximity: Optoreflector]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity : Sensing optical tape]]&lt;br /&gt;
* [[Reed Switch|Proximity: Reed Switch]]&lt;br /&gt;
* [[Hall Effect Sensor|Proximity, Angle: Hall Effect Sensor]]&lt;br /&gt;
* [[Rotary Encoder|Angle: Rotary Encoder]]&lt;br /&gt;
* Angular Velocity: Tachometer&lt;br /&gt;
* [[Photodiodes and Phototransistors|Light: Photodiodes and Phototransistors]]&lt;br /&gt;
* [[Photocell|Ambient Light: Photocell]]&lt;br /&gt;
* [[Thermistor|Temperature: Thermistor]]&lt;br /&gt;
* Temperature: Thermotransistor IC&lt;br /&gt;
* Audio: [[Microphones]]&lt;br /&gt;
* [[Accelerometers|Tilt, Acceleration: Accelerometers]]&lt;br /&gt;
* [[Strain Gauge|Force: Strain Gauge]]&lt;br /&gt;
* Current: Current Sense Resistor&lt;br /&gt;
* [[Limit Switch|Contact: Microswitch (Limit Switch)]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[Optics]]&lt;br /&gt;
* [[Optical Locating]]&lt;br /&gt;
* [[Lateral-Effect Photodiode]]&lt;br /&gt;
* [[IR Target Illumination|IRED&#039;s]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Actuators|Actuators]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[image:All-actuators-captions-small.jpg|thumb|300px|[[Actuators Available in the Mechatronics Lab|Available Actuators]]|right]]&lt;br /&gt;
&lt;br /&gt;
* [[Brushed DC Motor Theory|Brushed DC Motors]]&lt;br /&gt;
** [[Choosing a Motor and Gearing Combination|Choosing a Motor and Gearing Combination]]&lt;br /&gt;
** [[Linear Amplifier Motor Driver|Driving Using a Linear Amplifier]]&lt;br /&gt;
** [[Driving using a single MOSFET|Driving using a single MOSFET]]&lt;br /&gt;
** [[Pulse Width Modulation|Driving Using Pulse Width Modulation]]&lt;br /&gt;
** [[PIC PWM Motor Driver]]&lt;br /&gt;
** [[Gear Motor]]&lt;br /&gt;
*** [http://www.mech.northwestern.edu/courses/433/Writeups/AddEncoderHobbyEngGearMotor Adding a rotation encoder to a gearmotor]&lt;br /&gt;
* [[Brushless DC Motors]]&lt;br /&gt;
** [[Driving Brushless DC Motors]]&lt;br /&gt;
* [[Stepper Motor Theory|Stepper Motors]]&lt;br /&gt;
** [[Stepper Motor Circuits|Driving Stepper Motors]]&lt;br /&gt;
** [[Unipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
** [[Bipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
* [[RC Servo Theory|RC Servos]]&lt;br /&gt;
** [[555 Servo Circuit|Driving Your Servo Using a 555 Timer]]&lt;br /&gt;
* [[Solenoid Theory|Solenoids]]&lt;br /&gt;
** Practice: Driving Your Solenoid&lt;br /&gt;
* AC Motors&lt;br /&gt;
** [[Using the Yaskawa Motors]]&lt;br /&gt;
* [[Actuators Available in the Mechatronics Lab]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Mechanical Design&amp;lt;/h3&amp;gt;&lt;br /&gt;
*Mechanics of Materials&lt;br /&gt;
**Beam Mechanics&lt;br /&gt;
**[[Mohr&#039;s Circle]]&lt;br /&gt;
*Failure Theories&lt;br /&gt;
**Static Loading&lt;br /&gt;
**Variable Loading and Fatigue&lt;br /&gt;
*Fastening&lt;br /&gt;
**Nuts and Bolts&lt;br /&gt;
**Keys and Keyways&lt;br /&gt;
**Press-fits&lt;br /&gt;
**Set Screws&lt;br /&gt;
*Support&lt;br /&gt;
**Housings&lt;br /&gt;
**Shafts&lt;br /&gt;
**[[Bearings]]&lt;br /&gt;
*Transmission&lt;br /&gt;
**Rigid: [[Gears]]&lt;br /&gt;
**Flexible: Belts, Chains&lt;br /&gt;
**Motion Connection/Separation: Clutches, Brakes, Couplings&lt;br /&gt;
*Linkages&lt;br /&gt;
**Serial Chains&lt;br /&gt;
**Parallel and Closed-Loop Chains&lt;br /&gt;
*Other: springs/dampers, cams, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;The PC/104 Stack&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[Image:Img0174.jpg|thumb|300px|[[PC104 Overview|The PC104 Stack]]|right]]&lt;br /&gt;
* [[PC104 Overview|Overview]]&lt;br /&gt;
* [[The PC/104 Lab Kit]]&lt;br /&gt;
* Hardware:&lt;br /&gt;
** [[Advantech CPU Card]]&lt;br /&gt;
** [[Sensoray 526 Data Aquisition Card]]&lt;br /&gt;
&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#power[Power Components]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#electrical[I/O Electronics: Analog I/O, Digital I/O, Encoder Connections]]&lt;br /&gt;
* Advanced: Creating a Working Stack from Parts&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm [Building the Breakout Board]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#ribboncables[Breakout Board Ribbon Cables]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#mechanical[Assembling the PC104 Stack]]&lt;br /&gt;
** &#039;&#039;&#039;[[Creating an xPC Flash Boot Disk]]&#039;&#039;&#039; &amp;lt;- when new version of MATLAB&lt;br /&gt;
* Custom Boards&lt;br /&gt;
** Dual PWM Motor Controller&lt;br /&gt;
** Dual Linear Amplifier Motor Controller&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;xPC Target Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[xPC Overview|Overview of Real-Time Programming with Simulink and xPC Target]]&lt;br /&gt;
* [[Configuring xPC Target PC|Configuring xPC Host/Target PC]]&lt;br /&gt;
* [[Creating a Simple xPC Program|&#039;&#039;&#039;Quickstart&#039;&#039;&#039;:Creating a simple xPC Program]]&lt;br /&gt;
* [[Common xPC Blocks|Commonly Used Blocks]]&lt;br /&gt;
* [[Using the Host Scope]]&lt;br /&gt;
*Advanced&lt;br /&gt;
** Model Properties&lt;br /&gt;
** [[XPC M-file Communication|M-file communication]]&lt;br /&gt;
** Using outside of the lab&lt;br /&gt;
** [[media:standalone.pdf|Standalone Mode]]&lt;br /&gt;
** Stateflow&lt;br /&gt;
* Code Examples&lt;br /&gt;
** [[Controlling a DC Motor with an Encoder]]&lt;br /&gt;
** Something With State Machine&lt;br /&gt;
** [[Using RS-232 and Printing to LCD]]&lt;br /&gt;
**[[UDP Communications between Target and Host PC]]&lt;br /&gt;
** M-functions and S-functions&lt;br /&gt;
** [[xPC Code From Student Projects]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;QNX Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[media:qnxtemplate.zip|QNX Control Program with Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Lab Supplies and Data Sheets&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://spreadsheets.google.com/pub?key=pa_bNAhFF-OvvxpSje1KDYg&amp;amp;output=html&amp;amp;gid=0&amp;amp;single=true Generally stocked lab inventory ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Vendors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Other Software&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[List of Useful Software for Download]]&lt;br /&gt;
*Circuit Schematics and PCB Layout&lt;br /&gt;
*LaTex Document Preparation&lt;br /&gt;
** [http://meta.wikimedia.org/wiki/Help:Formula Mathematical Formulae]&lt;br /&gt;
** Document Formatting&lt;br /&gt;
** [[LaTeX Software Setup|Software Setup]]&lt;br /&gt;
** IEEE Styles&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Other Lab Equipment]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Prototyping Tools&lt;br /&gt;
** [[Tektronix TDS220 Oscilloscope]]&lt;br /&gt;
** [[Tektronix CFG253 Function Generator]]&lt;br /&gt;
** [[media:Mastech_power_supply_manual.pdf|Mastech Power Supply]]&lt;br /&gt;
** Fluke III Multimeter&lt;br /&gt;
** Benchtop Multimeter&lt;br /&gt;
** Powered Breadboard&lt;br /&gt;
** Soldering Iron&lt;br /&gt;
* [http://ediacaran.mech.northwestern.edu/neuromech/index.php/Lab_Equipment High Performance Neuromechatronics Benches]&lt;br /&gt;
* The Sensoray 626 DAQ Card&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Course Material&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[ME 224 Experimental Engineering]]&lt;br /&gt;
* [http://lims.mech.northwestern.edu/~lynch/courses/ME333/2008/index.html ME 333 Introduction to Mechatronics]&lt;br /&gt;
** [[Lab 5]]&lt;br /&gt;
** [[Suggested final projects]]&lt;br /&gt;
** [[ME 333 final projects]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [http://www.mech.northwestern.edu/hartmann/ME333_CourseInformation.html ME 333 Mechatronics]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/ ME 433 Advanced Mechatronics] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Miscellaneous&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Swarm Robot Project]]&lt;br /&gt;
** [[Swarm Robot Project Links]]&lt;br /&gt;
&lt;br /&gt;
* [[Indoor Localization System]]&lt;br /&gt;
* [[Robot Helicopter Project]]&lt;br /&gt;
* [[E-Puck Color Sensing Project]]&lt;br /&gt;
* [[Guitar Tunning Project]]&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9406</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9406"/>
		<updated>2008-12-13T21:28:20Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Northwestern University mechatronics design wiki provides reference material on the theory and applications of electronics, sensors, actuators, etc., for use in mechatronics-related research and projects.  Practical applications often refer to equipment and supplies available in the [http://mechatronics.mech.northwestern.edu/ Northwestern Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
Important:  Please be sure to read the [http://mechatronics.mech.northwestern.edu/mech-rules.pdf Rules for Using the Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Design Competition 2008&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wiki pages on sensors, actuators, programming, and microcontrollers: use pages below&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/QuickStart/ Parts in the DC2008 quick start pack]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/piccintro_2008-01-24.pdf PIC C intro slides, as presented 2008/01/24 (pdf)]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/picinterfacing_2008-01-28.pdf PIC interfacing slides, as presented 2008/01/28 (pdf)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Sensors and actuators for DC&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Using Solderless Breadboard|Solderless Breadboard &amp;amp; wiring that works]]&lt;br /&gt;
* [[Using LEDs &amp;amp; IREDs]]&lt;br /&gt;
* [[Using a laser]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity]]&lt;br /&gt;
** Using phototransistors&lt;br /&gt;
** Sensing optical tape&lt;br /&gt;
* [[Comparators | Comparators : the analog digital interface]]&lt;br /&gt;
* [[Driving a DC Motor using PWM]]&lt;br /&gt;
* [http://www.robotroom.com/FaulhaberGearmotor.html Faulhaber MiniMotor SA gearmotor with encoder], as well as [[Actuators_Available_in_the_Mechatronics_Lab#Faulhaber_1524E006S_motor_with_141:1_gearhead_and_HES164A_magnetic_quadrature_encoder|the local wiki page]]&lt;br /&gt;
* [[Adding a magnetic encoder to a GM3 Gearmotor]]&lt;br /&gt;
** Using magnetic switches (Hall Effect)&lt;br /&gt;
* [[Driving using a single MOSFET | Driving a DC motor using a single MOSFET]]&lt;br /&gt;
* [[High-current devices|Driving high-current devices: several options]]&lt;br /&gt;
* [[Driving a Stepper Motor]]&lt;br /&gt;
* [[Driving an RC Servo]]&lt;br /&gt;
* [[Accelerometers]]&lt;br /&gt;
* [[Strain gauges]]&lt;br /&gt;
* [[Using the Basic Stamp Microcontroller|Basic Stamp Microcontroller]] &amp;lt;b&amp;gt;Not recommended for DC2008&amp;lt;/b&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/Battery_NiMH/ NiMH rechargable batteries and chargers]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; [http://peshkin.mech.northwestern.edu/datasheets Prof. Peshkin&#039;s favorite datasheets]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC 18F4520 prototyping board &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[4520 Board intro|Prototyping board intro]]&lt;br /&gt;
*[[4520 Board construction|Assembling the 18F4520 prototyping board, circuit, parts]]&lt;br /&gt;
*[[4520 Board use|Using the 18F4520 prototyping board]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Programming with CCS C &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[C language|The C language]]&lt;br /&gt;
*[[CCS C|CCS C, specifically for the 18F4520]]&lt;br /&gt;
*[[Embedded Programming Tips for CCS C]]&lt;br /&gt;
*[[CCS IDE|Using the CCS development environment]]&lt;br /&gt;
*[[Debugging C on a PIC]]&lt;br /&gt;
*[[More debugging tips]]&lt;br /&gt;
*[http://www.ccsinfo.com/forum/ CCS user forum]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Interfacing and skeleton code for the PIC 18F4520&amp;lt;/h3&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have wiki pages &amp;lt;i&amp;gt;and&amp;lt;/i&amp;gt; sample code available&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Digital inputs &amp;amp; outputs]] (filename: DigitalIO)&lt;br /&gt;
* [[Analog Input]] (filename: AnalogInput)&lt;br /&gt;
** reading a trimpot&lt;br /&gt;
** reading a phototransistor&lt;br /&gt;
** amplified phototransistor, and IRED strobing&lt;br /&gt;
** using an instrumentation amp (example: for a strain gauge)&lt;br /&gt;
* [[Analog Output|Analog Output, and the I2C bus]] (filename: AnalogOutput)&lt;br /&gt;
* [[Waveform Generation with AD9833, and SPI]] (filename: AD9833)&lt;br /&gt;
*[[Pulse width modulation|Pulse width modulation (PWM) for driving motors or other high current devices]] (filename: MotorPWM)&lt;br /&gt;
** using H-bridges&lt;br /&gt;
* [[Interrupts]]&lt;br /&gt;
* [[Quadrature decoding in software]] (filename: QuadratureSoft)&lt;br /&gt;
* [[Quadrature decoding in hardware, or just counters]] (filename: QuadratureHard)&lt;br /&gt;
* [[Running RC servos]] (filename: RCservoSoft &amp;amp; RCservoHard)&lt;br /&gt;
* [[Watchdog timer]] (filename: Watchdog)&lt;br /&gt;
* [[PIC RS232|RS-232 serial communication between a PC and a PIC]] (filename: RS232)&lt;br /&gt;
* [[C Example: Serial LCD|Text output to a serial LCD display]]&lt;br /&gt;
* [[C Example: Parallel Interfacing with LCDs|Text output to a parallel LCD display]]&lt;br /&gt;
* [[Servo skeleton with fast &amp;amp; slow interrupts]]&lt;br /&gt;
* [[XBee radio communication between PICs]] (and between a PC and a PIC)&lt;br /&gt;
* [[I2C communication between PICs]]&lt;br /&gt;
* [[Serial communication with Matlab]]&lt;br /&gt;
* [[SPI communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested)&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Microphones]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Controlling a seven segment display]]&lt;br /&gt;
* [[Storing constant data in program memory]]&lt;br /&gt;
* [[PIC computation time benchmarks]]&lt;br /&gt;
* [[Stepper motor control with the PIC]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[IR communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested) &amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Interfacing to External EEPROM]]&lt;br /&gt;
* [[I2C Motor Controller]]&lt;br /&gt;
* [[Interfacing with a Photodiode Array]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have sample code available, but no wiki pages yet&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Counter0 - Counting pulses with Timer0]&lt;br /&gt;
* Counter1 - Counting pulses with Timer1]&lt;br /&gt;
* Interrupt0 - Periodic servo cycles using interrupt routines, 10mS &amp;amp; slower; Timer 0]&lt;br /&gt;
* Interrupt2 - Periodic servo cycles using interrupt routines; 10mS &amp;amp; faster; Timer 2]&lt;br /&gt;
* InterruptExternal - Interrupts generated by an external pulse]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics need more development&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* AnalogOutputParallel - Analog output using 8 digital lines]&lt;br /&gt;
* PIC-to-PIC communication &lt;br /&gt;
* Zigbee radio communication&lt;br /&gt;
* Modulated IR communication&lt;br /&gt;
* Strobing LEDs or IREDs for better range and immunity to background light&lt;br /&gt;
* I2C communication &lt;br /&gt;
* CAN bus&lt;br /&gt;
* Capturing data to Matlab&lt;br /&gt;
* Running stepper motors&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC Microcontrollers&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with CCS Compiler]], for DC, 333, etc, using the CCS ICD-U40 device &amp;lt;b&amp;gt;[this section has been replaced by the material above]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with C18 Compiler]], for e-puck, or using the Microchip ICD device or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;e-puck Mobile Robot&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[e-puck Mobile Robot]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Printing Circuit Boards]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[PCB Artist | Software provided by Advanced Circuits]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Electronics &amp;lt;/h3&amp;gt;&lt;br /&gt;
* [http://hades.mech.northwestern.edu/wiki/index.php/Category:Electronics Electronics]&lt;br /&gt;
* [[Phase-Sensitive Detection]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Op-Amp Applications]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Analog and Digital chips&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Comparators | Comparators: the analog to digital interface]]&lt;br /&gt;
* [[Filtering with the LMF100 | Filtering with the LMF100]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Opamps : building blocks of analog computation]&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/InstAmp/instamp.htm Instrumentation amps, and NU circuit board for them]&lt;br /&gt;
* [[LED Drivers | Controlling larg numbers of LEDs with LED drivers]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Sensors|Sensors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Potentiometers|Angle, Linear Position: Potentiometers]]&lt;br /&gt;
* [[Optointerrupter|Beam Breaker: Optointerrupter]]&lt;br /&gt;
* [[Optoreflector|Proximity: Optoreflector]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity : Sensing optical tape]]&lt;br /&gt;
* [[Reed Switch|Proximity: Reed Switch]]&lt;br /&gt;
* [[Hall Effect Sensor|Proximity, Angle: Hall Effect Sensor]]&lt;br /&gt;
* [[Rotary Encoder|Angle: Rotary Encoder]]&lt;br /&gt;
* Angular Velocity: Tachometer&lt;br /&gt;
* [[Photodiodes and Phototransistors|Light: Photodiodes and Phototransistors]]&lt;br /&gt;
* [[Photocell|Ambient Light: Photocell]]&lt;br /&gt;
* [[Thermistor|Temperature: Thermistor]]&lt;br /&gt;
* Temperature: Thermotransistor IC&lt;br /&gt;
* Audio: [[Microphones]]&lt;br /&gt;
* [[Accelerometers|Tilt, Acceleration: Accelerometers]]&lt;br /&gt;
* [[Strain Gauge|Force: Strain Gauge]]&lt;br /&gt;
* Current: Current Sense Resistor&lt;br /&gt;
* [[Limit Switch|Contact: Microswitch (Limit Switch)]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[Optics]]&lt;br /&gt;
* [[Optical Locating]]&lt;br /&gt;
* [[Lateral-Effect Photodiode]]&lt;br /&gt;
* [[IR Target Illumination|IRED&#039;s]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Actuators|Actuators]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[image:All-actuators-captions-small.jpg|thumb|300px|[[Actuators Available in the Mechatronics Lab|Available Actuators]]|right]]&lt;br /&gt;
&lt;br /&gt;
* [[Brushed DC Motor Theory|Brushed DC Motors]]&lt;br /&gt;
** [[Choosing a Motor and Gearing Combination|Choosing a Motor and Gearing Combination]]&lt;br /&gt;
** [[Linear Amplifier Motor Driver|Driving Using a Linear Amplifier]]&lt;br /&gt;
** [[Driving using a single MOSFET|Driving using a single MOSFET]]&lt;br /&gt;
** [[Pulse Width Modulation|Driving Using Pulse Width Modulation]]&lt;br /&gt;
** [[PIC PWM Motor Driver]]&lt;br /&gt;
** [[Gear Motor]]&lt;br /&gt;
*** [http://www.mech.northwestern.edu/courses/433/Writeups/AddEncoderHobbyEngGearMotor Adding a rotation encoder to a gearmotor]&lt;br /&gt;
* [[Brushless DC Motors]]&lt;br /&gt;
** [[Driving Brushless DC Motors]]&lt;br /&gt;
* [[Stepper Motor Theory|Stepper Motors]]&lt;br /&gt;
** [[Stepper Motor Circuits|Driving Stepper Motors]]&lt;br /&gt;
** [[Unipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
** [[Bipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
* [[RC Servo Theory|RC Servos]]&lt;br /&gt;
** [[555 Servo Circuit|Driving Your Servo Using a 555 Timer]]&lt;br /&gt;
* [[Solenoid Theory|Solenoids]]&lt;br /&gt;
** Practice: Driving Your Solenoid&lt;br /&gt;
* AC Motors&lt;br /&gt;
** [[Using the Yaskawa Motors]]&lt;br /&gt;
* [[Actuators Available in the Mechatronics Lab]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Mechanical Design&amp;lt;/h3&amp;gt;&lt;br /&gt;
*Mechanics of Materials&lt;br /&gt;
**Beam Mechanics&lt;br /&gt;
**[[Mohr&#039;s Circle]]&lt;br /&gt;
*Failure Theories&lt;br /&gt;
**Static Loading&lt;br /&gt;
**Variable Loading and Fatigue&lt;br /&gt;
*Fastening&lt;br /&gt;
**Nuts and Bolts&lt;br /&gt;
**Keys and Keyways&lt;br /&gt;
**Press-fits&lt;br /&gt;
**Set Screws&lt;br /&gt;
*Support&lt;br /&gt;
**Housings&lt;br /&gt;
**Shafts&lt;br /&gt;
**[[Bearings]]&lt;br /&gt;
*Transmission&lt;br /&gt;
**Rigid: [[Gears]]&lt;br /&gt;
**Flexible: Belts, Chains&lt;br /&gt;
**Motion Connection/Separation: Clutches, Brakes, Couplings&lt;br /&gt;
*Linkages&lt;br /&gt;
**Serial Chains&lt;br /&gt;
**Parallel and Closed-Loop Chains&lt;br /&gt;
*Other: springs/dampers, cams, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;The PC/104 Stack&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[Image:Img0174.jpg|thumb|300px|[[PC104 Overview|The PC104 Stack]]|right]]&lt;br /&gt;
* [[PC104 Overview|Overview]]&lt;br /&gt;
* [[The PC/104 Lab Kit]]&lt;br /&gt;
* Hardware:&lt;br /&gt;
** [[Advantech CPU Card]]&lt;br /&gt;
** [[Sensoray 526 Data Aquisition Card]]&lt;br /&gt;
&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#power[Power Components]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#electrical[I/O Electronics: Analog I/O, Digital I/O, Encoder Connections]]&lt;br /&gt;
* Advanced: Creating a Working Stack from Parts&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm [Building the Breakout Board]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#ribboncables[Breakout Board Ribbon Cables]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#mechanical[Assembling the PC104 Stack]]&lt;br /&gt;
** &#039;&#039;&#039;[[Creating an xPC Flash Boot Disk]]&#039;&#039;&#039; &amp;lt;- when new version of MATLAB&lt;br /&gt;
* Custom Boards&lt;br /&gt;
** Dual PWM Motor Controller&lt;br /&gt;
** Dual Linear Amplifier Motor Controller&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;xPC Target Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[xPC Overview|Overview of Real-Time Programming with Simulink and xPC Target]]&lt;br /&gt;
* [[Configuring xPC Target PC|Configuring xPC Host/Target PC]]&lt;br /&gt;
* [[Creating a Simple xPC Program|&#039;&#039;&#039;Quickstart&#039;&#039;&#039;:Creating a simple xPC Program]]&lt;br /&gt;
* [[Common xPC Blocks|Commonly Used Blocks]]&lt;br /&gt;
* [[Using the Host Scope]]&lt;br /&gt;
*Advanced&lt;br /&gt;
** Model Properties&lt;br /&gt;
** [[XPC M-file Communication|M-file communication]]&lt;br /&gt;
** Using outside of the lab&lt;br /&gt;
** [[media:standalone.pdf|Standalone Mode]]&lt;br /&gt;
** Stateflow&lt;br /&gt;
* Code Examples&lt;br /&gt;
** [[Controlling a DC Motor with an Encoder]]&lt;br /&gt;
** Something With State Machine&lt;br /&gt;
** [[Using RS-232 and Printing to LCD]]&lt;br /&gt;
**[[UDP Communications between Target and Host PC]]&lt;br /&gt;
** M-functions and S-functions&lt;br /&gt;
** [[xPC Code From Student Projects]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;QNX Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[media:qnxtemplate.zip|QNX Control Program with Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Lab Supplies and Data Sheets&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://spreadsheets.google.com/pub?key=pa_bNAhFF-OvvxpSje1KDYg&amp;amp;output=html&amp;amp;gid=0&amp;amp;single=true Generally stocked lab inventory ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Vendors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Other Software&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[List of Useful Software for Download]]&lt;br /&gt;
*Circuit Schematics and PCB Layout&lt;br /&gt;
*LaTex Document Preparation&lt;br /&gt;
** [http://meta.wikimedia.org/wiki/Help:Formula Mathematical Formulae]&lt;br /&gt;
** Document Formatting&lt;br /&gt;
** [[LaTeX Software Setup|Software Setup]]&lt;br /&gt;
** IEEE Styles&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Other Lab Equipment]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Prototyping Tools&lt;br /&gt;
** [[Tektronix TDS220 Oscilloscope]]&lt;br /&gt;
** [[Tektronix CFG253 Function Generator]]&lt;br /&gt;
** [[media:Mastech_power_supply_manual.pdf|Mastech Power Supply]]&lt;br /&gt;
** Fluke III Multimeter&lt;br /&gt;
** Benchtop Multimeter&lt;br /&gt;
** Powered Breadboard&lt;br /&gt;
** Soldering Iron&lt;br /&gt;
* [http://ediacaran.mech.northwestern.edu/neuromech/index.php/Lab_Equipment High Performance Neuromechatronics Benches]&lt;br /&gt;
* The Sensoray 626 DAQ Card&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Course Material&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[ME 224 Experimental Engineering]]&lt;br /&gt;
* [http://lims.mech.northwestern.edu/~lynch/courses/ME333/2008/index.html ME 333 Introduction to Mechatronics]&lt;br /&gt;
** [[Lab 5]]&lt;br /&gt;
** [[Suggested final projects]]&lt;br /&gt;
** [[ME 333 final projects]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [http://www.mech.northwestern.edu/hartmann/ME333_CourseInformation.html ME 333 Mechatronics]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/ ME 433 Advanced Mechatronics] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Miscellaneous&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Swarm Robot Project]]&lt;br /&gt;
** [[Swarm Robot Project Links]]&lt;br /&gt;
&lt;br /&gt;
* [[Indoor Localization System]]&lt;br /&gt;
* [[Robot Helicopter Project]]&lt;br /&gt;
* [[E-Puck Color Sensing Project]]&lt;br /&gt;
* [[Guitar Tunning Project]]&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9405</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9405"/>
		<updated>2008-12-13T21:26:35Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300px|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers [http://www.allegromicro.com/en/Products/Part_Numbers/6278/6278.pdf (Made by Allegro, A6278 or A6279)] The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|300px|center|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9404</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9404"/>
		<updated>2008-12-13T21:24:21Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Northwestern University mechatronics design wiki provides reference material on the theory and applications of electronics, sensors, actuators, etc., for use in mechatronics-related research and projects.  Practical applications often refer to equipment and supplies available in the [http://mechatronics.mech.northwestern.edu/ Northwestern Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
Important:  Please be sure to read the [http://mechatronics.mech.northwestern.edu/mech-rules.pdf Rules for Using the Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Design Competition 2008&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wiki pages on sensors, actuators, programming, and microcontrollers: use pages below&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/QuickStart/ Parts in the DC2008 quick start pack]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/piccintro_2008-01-24.pdf PIC C intro slides, as presented 2008/01/24 (pdf)]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/picinterfacing_2008-01-28.pdf PIC interfacing slides, as presented 2008/01/28 (pdf)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Sensors and actuators for DC&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Using Solderless Breadboard|Solderless Breadboard &amp;amp; wiring that works]]&lt;br /&gt;
* [[Using LEDs &amp;amp; IREDs]]&lt;br /&gt;
* [[Using a laser]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity]]&lt;br /&gt;
** Using phototransistors&lt;br /&gt;
** Sensing optical tape&lt;br /&gt;
* [[Comparators | Comparators : the analog digital interface]]&lt;br /&gt;
* [[Driving a DC Motor using PWM]]&lt;br /&gt;
* [http://www.robotroom.com/FaulhaberGearmotor.html Faulhaber MiniMotor SA gearmotor with encoder], as well as [[Actuators_Available_in_the_Mechatronics_Lab#Faulhaber_1524E006S_motor_with_141:1_gearhead_and_HES164A_magnetic_quadrature_encoder|the local wiki page]]&lt;br /&gt;
* [[Adding a magnetic encoder to a GM3 Gearmotor]]&lt;br /&gt;
** Using magnetic switches (Hall Effect)&lt;br /&gt;
* [[Driving using a single MOSFET | Driving a DC motor using a single MOSFET]]&lt;br /&gt;
* [[High-current devices|Driving high-current devices: several options]]&lt;br /&gt;
* [[Driving a Stepper Motor]]&lt;br /&gt;
* [[Driving an RC Servo]]&lt;br /&gt;
* [[Accelerometers]]&lt;br /&gt;
* [[Strain gauges]]&lt;br /&gt;
* [[Using the Basic Stamp Microcontroller|Basic Stamp Microcontroller]] &amp;lt;b&amp;gt;Not recommended for DC2008&amp;lt;/b&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/Battery_NiMH/ NiMH rechargable batteries and chargers]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; [http://peshkin.mech.northwestern.edu/datasheets Prof. Peshkin&#039;s favorite datasheets]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC 18F4520 prototyping board &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[4520 Board intro|Prototyping board intro]]&lt;br /&gt;
*[[4520 Board construction|Assembling the 18F4520 prototyping board, circuit, parts]]&lt;br /&gt;
*[[4520 Board use|Using the 18F4520 prototyping board]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Programming with CCS C &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[C language|The C language]]&lt;br /&gt;
*[[CCS C|CCS C, specifically for the 18F4520]]&lt;br /&gt;
*[[Embedded Programming Tips for CCS C]]&lt;br /&gt;
*[[CCS IDE|Using the CCS development environment]]&lt;br /&gt;
*[[Debugging C on a PIC]]&lt;br /&gt;
*[[More debugging tips]]&lt;br /&gt;
*[http://www.ccsinfo.com/forum/ CCS user forum]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Interfacing and skeleton code for the PIC 18F4520&amp;lt;/h3&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have wiki pages &amp;lt;i&amp;gt;and&amp;lt;/i&amp;gt; sample code available&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Digital inputs &amp;amp; outputs]] (filename: DigitalIO)&lt;br /&gt;
* [[Analog Input]] (filename: AnalogInput)&lt;br /&gt;
** reading a trimpot&lt;br /&gt;
** reading a phototransistor&lt;br /&gt;
** amplified phototransistor, and IRED strobing&lt;br /&gt;
** using an instrumentation amp (example: for a strain gauge)&lt;br /&gt;
* [[Analog Output|Analog Output, and the I2C bus]] (filename: AnalogOutput)&lt;br /&gt;
* [[Waveform Generation with AD9833, and SPI]] (filename: AD9833)&lt;br /&gt;
*[[Pulse width modulation|Pulse width modulation (PWM) for driving motors or other high current devices]] (filename: MotorPWM)&lt;br /&gt;
** using H-bridges&lt;br /&gt;
* [[Interrupts]]&lt;br /&gt;
* [[Quadrature decoding in software]] (filename: QuadratureSoft)&lt;br /&gt;
* [[Quadrature decoding in hardware, or just counters]] (filename: QuadratureHard)&lt;br /&gt;
* [[Running RC servos]] (filename: RCservoSoft &amp;amp; RCservoHard)&lt;br /&gt;
* [[Watchdog timer]] (filename: Watchdog)&lt;br /&gt;
* [[PIC RS232|RS-232 serial communication between a PC and a PIC]] (filename: RS232)&lt;br /&gt;
* [[C Example: Serial LCD|Text output to a serial LCD display]]&lt;br /&gt;
* [[C Example: Parallel Interfacing with LCDs|Text output to a parallel LCD display]]&lt;br /&gt;
* [[Servo skeleton with fast &amp;amp; slow interrupts]]&lt;br /&gt;
* [[XBee radio communication between PICs]] (and between a PC and a PIC)&lt;br /&gt;
* [[I2C communication between PICs]]&lt;br /&gt;
* [[Serial communication with Matlab]]&lt;br /&gt;
* [[SPI communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested)&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Microphones]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Controlling a seven segment display]]&lt;br /&gt;
* [[Storing constant data in program memory]]&lt;br /&gt;
* [[PIC computation time benchmarks]]&lt;br /&gt;
* [[Stepper motor control with the PIC]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[IR communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested) &amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Interfacing to External EEPROM]]&lt;br /&gt;
* [[I2C Motor Controller]]&lt;br /&gt;
* [[Interfacing with a Photodiode Array]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have sample code available, but no wiki pages yet&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Counter0 - Counting pulses with Timer0]&lt;br /&gt;
* Counter1 - Counting pulses with Timer1]&lt;br /&gt;
* Interrupt0 - Periodic servo cycles using interrupt routines, 10mS &amp;amp; slower; Timer 0]&lt;br /&gt;
* Interrupt2 - Periodic servo cycles using interrupt routines; 10mS &amp;amp; faster; Timer 2]&lt;br /&gt;
* InterruptExternal - Interrupts generated by an external pulse]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics need more development&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* AnalogOutputParallel - Analog output using 8 digital lines]&lt;br /&gt;
* PIC-to-PIC communication &lt;br /&gt;
* Zigbee radio communication&lt;br /&gt;
* Modulated IR communication&lt;br /&gt;
* Strobing LEDs or IREDs for better range and immunity to background light&lt;br /&gt;
* I2C communication &lt;br /&gt;
* CAN bus&lt;br /&gt;
* Capturing data to Matlab&lt;br /&gt;
* Running stepper motors&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC Microcontrollers&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with CCS Compiler]], for DC, 333, etc, using the CCS ICD-U40 device &amp;lt;b&amp;gt;[this section has been replaced by the material above]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with C18 Compiler]], for e-puck, or using the Microchip ICD device or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;e-puck Mobile Robot&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[e-puck Mobile Robot]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Printing Circuit Boards]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[PCB Artist | Software provided by Advanced Circuits]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Electronics &amp;lt;/h3&amp;gt;&lt;br /&gt;
* [http://hades.mech.northwestern.edu/wiki/index.php/Category:Electronics Electronics]&lt;br /&gt;
* [[Phase-Sensitive Detection]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Op-Amp Applications]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Analog and Digital chips&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Comparators | Comparators: the analog to digital interface]]&lt;br /&gt;
* [[Filtering with the LMF100 | Filtering with the LMF100]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Opamps : building blocks of analog computation]&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/InstAmp/instamp.htm Instrumentation amps, and NU circuit board for them]&lt;br /&gt;
* [[LED Drivers | Controlling larger numbers of LEDs]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Sensors|Sensors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Potentiometers|Angle, Linear Position: Potentiometers]]&lt;br /&gt;
* [[Optointerrupter|Beam Breaker: Optointerrupter]]&lt;br /&gt;
* [[Optoreflector|Proximity: Optoreflector]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity : Sensing optical tape]]&lt;br /&gt;
* [[Reed Switch|Proximity: Reed Switch]]&lt;br /&gt;
* [[Hall Effect Sensor|Proximity, Angle: Hall Effect Sensor]]&lt;br /&gt;
* [[Rotary Encoder|Angle: Rotary Encoder]]&lt;br /&gt;
* Angular Velocity: Tachometer&lt;br /&gt;
* [[Photodiodes and Phototransistors|Light: Photodiodes and Phototransistors]]&lt;br /&gt;
* [[Photocell|Ambient Light: Photocell]]&lt;br /&gt;
* [[Thermistor|Temperature: Thermistor]]&lt;br /&gt;
* Temperature: Thermotransistor IC&lt;br /&gt;
* Audio: [[Microphones]]&lt;br /&gt;
* [[Accelerometers|Tilt, Acceleration: Accelerometers]]&lt;br /&gt;
* [[Strain Gauge|Force: Strain Gauge]]&lt;br /&gt;
* Current: Current Sense Resistor&lt;br /&gt;
* [[Limit Switch|Contact: Microswitch (Limit Switch)]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[Optics]]&lt;br /&gt;
* [[Optical Locating]]&lt;br /&gt;
* [[Lateral-Effect Photodiode]]&lt;br /&gt;
* [[IR Target Illumination|IRED&#039;s]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Actuators|Actuators]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[image:All-actuators-captions-small.jpg|thumb|300px|[[Actuators Available in the Mechatronics Lab|Available Actuators]]|right]]&lt;br /&gt;
&lt;br /&gt;
* [[Brushed DC Motor Theory|Brushed DC Motors]]&lt;br /&gt;
** [[Choosing a Motor and Gearing Combination|Choosing a Motor and Gearing Combination]]&lt;br /&gt;
** [[Linear Amplifier Motor Driver|Driving Using a Linear Amplifier]]&lt;br /&gt;
** [[Driving using a single MOSFET|Driving using a single MOSFET]]&lt;br /&gt;
** [[Pulse Width Modulation|Driving Using Pulse Width Modulation]]&lt;br /&gt;
** [[PIC PWM Motor Driver]]&lt;br /&gt;
** [[Gear Motor]]&lt;br /&gt;
*** [http://www.mech.northwestern.edu/courses/433/Writeups/AddEncoderHobbyEngGearMotor Adding a rotation encoder to a gearmotor]&lt;br /&gt;
* [[Brushless DC Motors]]&lt;br /&gt;
** [[Driving Brushless DC Motors]]&lt;br /&gt;
* [[Stepper Motor Theory|Stepper Motors]]&lt;br /&gt;
** [[Stepper Motor Circuits|Driving Stepper Motors]]&lt;br /&gt;
** [[Unipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
** [[Bipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
* [[RC Servo Theory|RC Servos]]&lt;br /&gt;
** [[555 Servo Circuit|Driving Your Servo Using a 555 Timer]]&lt;br /&gt;
* [[Solenoid Theory|Solenoids]]&lt;br /&gt;
** Practice: Driving Your Solenoid&lt;br /&gt;
* AC Motors&lt;br /&gt;
** [[Using the Yaskawa Motors]]&lt;br /&gt;
* [[Actuators Available in the Mechatronics Lab]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Mechanical Design&amp;lt;/h3&amp;gt;&lt;br /&gt;
*Mechanics of Materials&lt;br /&gt;
**Beam Mechanics&lt;br /&gt;
**[[Mohr&#039;s Circle]]&lt;br /&gt;
*Failure Theories&lt;br /&gt;
**Static Loading&lt;br /&gt;
**Variable Loading and Fatigue&lt;br /&gt;
*Fastening&lt;br /&gt;
**Nuts and Bolts&lt;br /&gt;
**Keys and Keyways&lt;br /&gt;
**Press-fits&lt;br /&gt;
**Set Screws&lt;br /&gt;
*Support&lt;br /&gt;
**Housings&lt;br /&gt;
**Shafts&lt;br /&gt;
**[[Bearings]]&lt;br /&gt;
*Transmission&lt;br /&gt;
**Rigid: [[Gears]]&lt;br /&gt;
**Flexible: Belts, Chains&lt;br /&gt;
**Motion Connection/Separation: Clutches, Brakes, Couplings&lt;br /&gt;
*Linkages&lt;br /&gt;
**Serial Chains&lt;br /&gt;
**Parallel and Closed-Loop Chains&lt;br /&gt;
*Other: springs/dampers, cams, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;The PC/104 Stack&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[Image:Img0174.jpg|thumb|300px|[[PC104 Overview|The PC104 Stack]]|right]]&lt;br /&gt;
* [[PC104 Overview|Overview]]&lt;br /&gt;
* [[The PC/104 Lab Kit]]&lt;br /&gt;
* Hardware:&lt;br /&gt;
** [[Advantech CPU Card]]&lt;br /&gt;
** [[Sensoray 526 Data Aquisition Card]]&lt;br /&gt;
&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#power[Power Components]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#electrical[I/O Electronics: Analog I/O, Digital I/O, Encoder Connections]]&lt;br /&gt;
* Advanced: Creating a Working Stack from Parts&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm [Building the Breakout Board]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#ribboncables[Breakout Board Ribbon Cables]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#mechanical[Assembling the PC104 Stack]]&lt;br /&gt;
** &#039;&#039;&#039;[[Creating an xPC Flash Boot Disk]]&#039;&#039;&#039; &amp;lt;- when new version of MATLAB&lt;br /&gt;
* Custom Boards&lt;br /&gt;
** Dual PWM Motor Controller&lt;br /&gt;
** Dual Linear Amplifier Motor Controller&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;xPC Target Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[xPC Overview|Overview of Real-Time Programming with Simulink and xPC Target]]&lt;br /&gt;
* [[Configuring xPC Target PC|Configuring xPC Host/Target PC]]&lt;br /&gt;
* [[Creating a Simple xPC Program|&#039;&#039;&#039;Quickstart&#039;&#039;&#039;:Creating a simple xPC Program]]&lt;br /&gt;
* [[Common xPC Blocks|Commonly Used Blocks]]&lt;br /&gt;
* [[Using the Host Scope]]&lt;br /&gt;
*Advanced&lt;br /&gt;
** Model Properties&lt;br /&gt;
** [[XPC M-file Communication|M-file communication]]&lt;br /&gt;
** Using outside of the lab&lt;br /&gt;
** [[media:standalone.pdf|Standalone Mode]]&lt;br /&gt;
** Stateflow&lt;br /&gt;
* Code Examples&lt;br /&gt;
** [[Controlling a DC Motor with an Encoder]]&lt;br /&gt;
** Something With State Machine&lt;br /&gt;
** [[Using RS-232 and Printing to LCD]]&lt;br /&gt;
**[[UDP Communications between Target and Host PC]]&lt;br /&gt;
** M-functions and S-functions&lt;br /&gt;
** [[xPC Code From Student Projects]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;QNX Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[media:qnxtemplate.zip|QNX Control Program with Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Lab Supplies and Data Sheets&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://spreadsheets.google.com/pub?key=pa_bNAhFF-OvvxpSje1KDYg&amp;amp;output=html&amp;amp;gid=0&amp;amp;single=true Generally stocked lab inventory ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Vendors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Other Software&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[List of Useful Software for Download]]&lt;br /&gt;
*Circuit Schematics and PCB Layout&lt;br /&gt;
*LaTex Document Preparation&lt;br /&gt;
** [http://meta.wikimedia.org/wiki/Help:Formula Mathematical Formulae]&lt;br /&gt;
** Document Formatting&lt;br /&gt;
** [[LaTeX Software Setup|Software Setup]]&lt;br /&gt;
** IEEE Styles&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Other Lab Equipment]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Prototyping Tools&lt;br /&gt;
** [[Tektronix TDS220 Oscilloscope]]&lt;br /&gt;
** [[Tektronix CFG253 Function Generator]]&lt;br /&gt;
** [[media:Mastech_power_supply_manual.pdf|Mastech Power Supply]]&lt;br /&gt;
** Fluke III Multimeter&lt;br /&gt;
** Benchtop Multimeter&lt;br /&gt;
** Powered Breadboard&lt;br /&gt;
** Soldering Iron&lt;br /&gt;
* [http://ediacaran.mech.northwestern.edu/neuromech/index.php/Lab_Equipment High Performance Neuromechatronics Benches]&lt;br /&gt;
* The Sensoray 626 DAQ Card&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Course Material&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[ME 224 Experimental Engineering]]&lt;br /&gt;
* [http://lims.mech.northwestern.edu/~lynch/courses/ME333/2008/index.html ME 333 Introduction to Mechatronics]&lt;br /&gt;
** [[Lab 5]]&lt;br /&gt;
** [[Suggested final projects]]&lt;br /&gt;
** [[ME 333 final projects]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [http://www.mech.northwestern.edu/hartmann/ME333_CourseInformation.html ME 333 Mechatronics]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/ ME 433 Advanced Mechatronics] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Miscellaneous&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Swarm Robot Project]]&lt;br /&gt;
** [[Swarm Robot Project Links]]&lt;br /&gt;
&lt;br /&gt;
* [[Indoor Localization System]]&lt;br /&gt;
* [[Robot Helicopter Project]]&lt;br /&gt;
* [[E-Puck Color Sensing Project]]&lt;br /&gt;
* [[Guitar Tunning Project]]&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9403</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Main_Page&amp;diff=9403"/>
		<updated>2008-12-13T21:23:30Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Northwestern University mechatronics design wiki provides reference material on the theory and applications of electronics, sensors, actuators, etc., for use in mechatronics-related research and projects.  Practical applications often refer to equipment and supplies available in the [http://mechatronics.mech.northwestern.edu/ Northwestern Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
Important:  Please be sure to read the [http://mechatronics.mech.northwestern.edu/mech-rules.pdf Rules for Using the Mechatronics Design Lab].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Design Competition 2008&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wiki pages on sensors, actuators, programming, and microcontrollers: use pages below&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/QuickStart/ Parts in the DC2008 quick start pack]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/piccintro_2008-01-24.pdf PIC C intro slides, as presented 2008/01/24 (pdf)]&lt;br /&gt;
* [http://peshkin.mech.northwestern.edu/pic/info/picinterfacing_2008-01-28.pdf PIC interfacing slides, as presented 2008/01/28 (pdf)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Sensors and actuators for DC&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Using Solderless Breadboard|Solderless Breadboard &amp;amp; wiring that works]]&lt;br /&gt;
* [[Using LEDs &amp;amp; IREDs]]&lt;br /&gt;
* [[Using a laser]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity]]&lt;br /&gt;
** Using phototransistors&lt;br /&gt;
** Sensing optical tape&lt;br /&gt;
* [[Comparators | Comparators : the analog digital interface]]&lt;br /&gt;
* [[Driving a DC Motor using PWM]]&lt;br /&gt;
* [http://www.robotroom.com/FaulhaberGearmotor.html Faulhaber MiniMotor SA gearmotor with encoder], as well as [[Actuators_Available_in_the_Mechatronics_Lab#Faulhaber_1524E006S_motor_with_141:1_gearhead_and_HES164A_magnetic_quadrature_encoder|the local wiki page]]&lt;br /&gt;
* [[Adding a magnetic encoder to a GM3 Gearmotor]]&lt;br /&gt;
** Using magnetic switches (Hall Effect)&lt;br /&gt;
* [[Driving using a single MOSFET | Driving a DC motor using a single MOSFET]]&lt;br /&gt;
* [[High-current devices|Driving high-current devices: several options]]&lt;br /&gt;
* [[Driving a Stepper Motor]]&lt;br /&gt;
* [[Driving an RC Servo]]&lt;br /&gt;
* [[Accelerometers]]&lt;br /&gt;
* [[Strain gauges]]&lt;br /&gt;
* [[Using the Basic Stamp Microcontroller|Basic Stamp Microcontroller]] &amp;lt;b&amp;gt;Not recommended for DC2008&amp;lt;/b&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/Battery_NiMH/ NiMH rechargable batteries and chargers]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; [http://peshkin.mech.northwestern.edu/datasheets Prof. Peshkin&#039;s favorite datasheets]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC 18F4520 prototyping board &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[4520 Board intro|Prototyping board intro]]&lt;br /&gt;
*[[4520 Board construction|Assembling the 18F4520 prototyping board, circuit, parts]]&lt;br /&gt;
*[[4520 Board use|Using the 18F4520 prototyping board]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Programming with CCS C &amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[C language|The C language]]&lt;br /&gt;
*[[CCS C|CCS C, specifically for the 18F4520]]&lt;br /&gt;
*[[Embedded Programming Tips for CCS C]]&lt;br /&gt;
*[[CCS IDE|Using the CCS development environment]]&lt;br /&gt;
*[[Debugging C on a PIC]]&lt;br /&gt;
*[[More debugging tips]]&lt;br /&gt;
*[http://www.ccsinfo.com/forum/ CCS user forum]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Interfacing and skeleton code for the PIC 18F4520&amp;lt;/h3&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have wiki pages &amp;lt;i&amp;gt;and&amp;lt;/i&amp;gt; sample code available&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Digital inputs &amp;amp; outputs]] (filename: DigitalIO)&lt;br /&gt;
* [[Analog Input]] (filename: AnalogInput)&lt;br /&gt;
** reading a trimpot&lt;br /&gt;
** reading a phototransistor&lt;br /&gt;
** amplified phototransistor, and IRED strobing&lt;br /&gt;
** using an instrumentation amp (example: for a strain gauge)&lt;br /&gt;
* [[Analog Output|Analog Output, and the I2C bus]] (filename: AnalogOutput)&lt;br /&gt;
* [[Waveform Generation with AD9833, and SPI]] (filename: AD9833)&lt;br /&gt;
*[[Pulse width modulation|Pulse width modulation (PWM) for driving motors or other high current devices]] (filename: MotorPWM)&lt;br /&gt;
** using H-bridges&lt;br /&gt;
* [[Interrupts]]&lt;br /&gt;
* [[Quadrature decoding in software]] (filename: QuadratureSoft)&lt;br /&gt;
* [[Quadrature decoding in hardware, or just counters]] (filename: QuadratureHard)&lt;br /&gt;
* [[Running RC servos]] (filename: RCservoSoft &amp;amp; RCservoHard)&lt;br /&gt;
* [[Watchdog timer]] (filename: Watchdog)&lt;br /&gt;
* [[PIC RS232|RS-232 serial communication between a PC and a PIC]] (filename: RS232)&lt;br /&gt;
* [[C Example: Serial LCD|Text output to a serial LCD display]]&lt;br /&gt;
* [[C Example: Parallel Interfacing with LCDs|Text output to a parallel LCD display]]&lt;br /&gt;
* [[Servo skeleton with fast &amp;amp; slow interrupts]]&lt;br /&gt;
* [[XBee radio communication between PICs]] (and between a PC and a PIC)&lt;br /&gt;
* [[I2C communication between PICs]]&lt;br /&gt;
* [[Serial communication with Matlab]]&lt;br /&gt;
* [[SPI communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested)&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Microphones]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Controlling a seven segment display]]&lt;br /&gt;
* [[Storing constant data in program memory]]&lt;br /&gt;
* [[PIC computation time benchmarks]]&lt;br /&gt;
* [[Stepper motor control with the PIC]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[IR communication between PICs]] &amp;lt;b&amp;gt; (Note:  this function has not been successfully tested) &amp;lt;/b&amp;gt;&lt;br /&gt;
* [[Interfacing to External EEPROM]]&lt;br /&gt;
* [[I2C Motor Controller]]&lt;br /&gt;
* [[Interfacing with a Photodiode Array]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics have sample code available, but no wiki pages yet&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Counter0 - Counting pulses with Timer0]&lt;br /&gt;
* Counter1 - Counting pulses with Timer1]&lt;br /&gt;
* Interrupt0 - Periodic servo cycles using interrupt routines, 10mS &amp;amp; slower; Timer 0]&lt;br /&gt;
* Interrupt2 - Periodic servo cycles using interrupt routines; 10mS &amp;amp; faster; Timer 2]&lt;br /&gt;
* InterruptExternal - Interrupts generated by an external pulse]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;These topics need more development&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[http://peshkin.mech.northwestern.edu/pic/code Link to all sample code here.]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* AnalogOutputParallel - Analog output using 8 digital lines]&lt;br /&gt;
* PIC-to-PIC communication &lt;br /&gt;
* Zigbee radio communication&lt;br /&gt;
* Modulated IR communication&lt;br /&gt;
* Strobing LEDs or IREDs for better range and immunity to background light&lt;br /&gt;
* I2C communication &lt;br /&gt;
* CAN bus&lt;br /&gt;
* Capturing data to Matlab&lt;br /&gt;
* Running stepper motors&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;PIC Microcontrollers&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with CCS Compiler]], for DC, 333, etc, using the CCS ICD-U40 device &amp;lt;b&amp;gt;[this section has been replaced by the material above]&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[PIC Microcontrollers with C18 Compiler]], for e-puck, or using the Microchip ICD device or&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;e-puck Mobile Robot&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[e-puck Mobile Robot]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Printing Circuit Boards]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Electronics &amp;lt;/h3&amp;gt;&lt;br /&gt;
* [http://hades.mech.northwestern.edu/wiki/index.php/Category:Electronics Electronics]&lt;br /&gt;
* [[Phase-Sensitive Detection]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Op-Amp Applications]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Analog and Digital chips&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Comparators | Comparators: the analog to digital interface]]&lt;br /&gt;
* [[Filtering with the LMF100 | Filtering with the LMF100]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Operational_amplifier_applications Opamps : building blocks of analog computation]&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/Writeups/InstAmp/instamp.htm Instrumentation amps, and NU circuit board for them]&lt;br /&gt;
* [[LED Drivers | Controlling larger numbers of LEDs]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Sensors|Sensors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Potentiometers|Angle, Linear Position: Potentiometers]]&lt;br /&gt;
* [[Optointerrupter|Beam Breaker: Optointerrupter]]&lt;br /&gt;
* [[Optoreflector|Proximity: Optoreflector]]&lt;br /&gt;
* [[Sensing optical tape|Infrared reflectivity : Sensing optical tape]]&lt;br /&gt;
* [[Reed Switch|Proximity: Reed Switch]]&lt;br /&gt;
* [[Hall Effect Sensor|Proximity, Angle: Hall Effect Sensor]]&lt;br /&gt;
* [[Rotary Encoder|Angle: Rotary Encoder]]&lt;br /&gt;
* Angular Velocity: Tachometer&lt;br /&gt;
* [[Photodiodes and Phototransistors|Light: Photodiodes and Phototransistors]]&lt;br /&gt;
* [[Photocell|Ambient Light: Photocell]]&lt;br /&gt;
* [[Thermistor|Temperature: Thermistor]]&lt;br /&gt;
* Temperature: Thermotransistor IC&lt;br /&gt;
* Audio: [[Microphones]]&lt;br /&gt;
* [[Accelerometers|Tilt, Acceleration: Accelerometers]]&lt;br /&gt;
* [[Strain Gauge|Force: Strain Gauge]]&lt;br /&gt;
* Current: Current Sense Resistor&lt;br /&gt;
* [[Limit Switch|Contact: Microswitch (Limit Switch)]]&lt;br /&gt;
* [[Ambient light color sensing]]&lt;br /&gt;
* [[Global Positioning System]]&lt;br /&gt;
* [[Optics]]&lt;br /&gt;
* [[Optical Locating]]&lt;br /&gt;
* [[Lateral-Effect Photodiode]]&lt;br /&gt;
* [[IR Target Illumination|IRED&#039;s]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[:Category:Actuators|Actuators]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[image:All-actuators-captions-small.jpg|thumb|300px|[[Actuators Available in the Mechatronics Lab|Available Actuators]]|right]]&lt;br /&gt;
&lt;br /&gt;
* [[Brushed DC Motor Theory|Brushed DC Motors]]&lt;br /&gt;
** [[Choosing a Motor and Gearing Combination|Choosing a Motor and Gearing Combination]]&lt;br /&gt;
** [[Linear Amplifier Motor Driver|Driving Using a Linear Amplifier]]&lt;br /&gt;
** [[Driving using a single MOSFET|Driving using a single MOSFET]]&lt;br /&gt;
** [[Pulse Width Modulation|Driving Using Pulse Width Modulation]]&lt;br /&gt;
** [[PIC PWM Motor Driver]]&lt;br /&gt;
** [[Gear Motor]]&lt;br /&gt;
*** [http://www.mech.northwestern.edu/courses/433/Writeups/AddEncoderHobbyEngGearMotor Adding a rotation encoder to a gearmotor]&lt;br /&gt;
* [[Brushless DC Motors]]&lt;br /&gt;
** [[Driving Brushless DC Motors]]&lt;br /&gt;
* [[Stepper Motor Theory|Stepper Motors]]&lt;br /&gt;
** [[Stepper Motor Circuits|Driving Stepper Motors]]&lt;br /&gt;
** [[Unipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
** [[Bipolar Stepper Motor Driver Circuit]]&lt;br /&gt;
* [[RC Servo Theory|RC Servos]]&lt;br /&gt;
** [[555 Servo Circuit|Driving Your Servo Using a 555 Timer]]&lt;br /&gt;
* [[Solenoid Theory|Solenoids]]&lt;br /&gt;
** Practice: Driving Your Solenoid&lt;br /&gt;
* AC Motors&lt;br /&gt;
** [[Using the Yaskawa Motors]]&lt;br /&gt;
* [[Actuators Available in the Mechatronics Lab]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Mechanical Design&amp;lt;/h3&amp;gt;&lt;br /&gt;
*Mechanics of Materials&lt;br /&gt;
**Beam Mechanics&lt;br /&gt;
**[[Mohr&#039;s Circle]]&lt;br /&gt;
*Failure Theories&lt;br /&gt;
**Static Loading&lt;br /&gt;
**Variable Loading and Fatigue&lt;br /&gt;
*Fastening&lt;br /&gt;
**Nuts and Bolts&lt;br /&gt;
**Keys and Keyways&lt;br /&gt;
**Press-fits&lt;br /&gt;
**Set Screws&lt;br /&gt;
*Support&lt;br /&gt;
**Housings&lt;br /&gt;
**Shafts&lt;br /&gt;
**[[Bearings]]&lt;br /&gt;
*Transmission&lt;br /&gt;
**Rigid: [[Gears]]&lt;br /&gt;
**Flexible: Belts, Chains&lt;br /&gt;
**Motion Connection/Separation: Clutches, Brakes, Couplings&lt;br /&gt;
*Linkages&lt;br /&gt;
**Serial Chains&lt;br /&gt;
**Parallel and Closed-Loop Chains&lt;br /&gt;
*Other: springs/dampers, cams, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;The PC/104 Stack&amp;lt;/h3&amp;gt;&lt;br /&gt;
[[Image:Img0174.jpg|thumb|300px|[[PC104 Overview|The PC104 Stack]]|right]]&lt;br /&gt;
* [[PC104 Overview|Overview]]&lt;br /&gt;
* [[The PC/104 Lab Kit]]&lt;br /&gt;
* Hardware:&lt;br /&gt;
** [[Advantech CPU Card]]&lt;br /&gt;
** [[Sensoray 526 Data Aquisition Card]]&lt;br /&gt;
&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#power[Power Components]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#electrical[I/O Electronics: Analog I/O, Digital I/O, Encoder Connections]]&lt;br /&gt;
* Advanced: Creating a Working Stack from Parts&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm [Building the Breakout Board]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#ribboncables[Breakout Board Ribbon Cables]]&lt;br /&gt;
** [http://www.mech.northwestern.edu/courses/433/Writeups/PC104BoB/stack.htm#mechanical[Assembling the PC104 Stack]]&lt;br /&gt;
** &#039;&#039;&#039;[[Creating an xPC Flash Boot Disk]]&#039;&#039;&#039; &amp;lt;- when new version of MATLAB&lt;br /&gt;
* Custom Boards&lt;br /&gt;
** Dual PWM Motor Controller&lt;br /&gt;
** Dual Linear Amplifier Motor Controller&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;xPC Target Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[xPC Overview|Overview of Real-Time Programming with Simulink and xPC Target]]&lt;br /&gt;
* [[Configuring xPC Target PC|Configuring xPC Host/Target PC]]&lt;br /&gt;
* [[Creating a Simple xPC Program|&#039;&#039;&#039;Quickstart&#039;&#039;&#039;:Creating a simple xPC Program]]&lt;br /&gt;
* [[Common xPC Blocks|Commonly Used Blocks]]&lt;br /&gt;
* [[Using the Host Scope]]&lt;br /&gt;
*Advanced&lt;br /&gt;
** Model Properties&lt;br /&gt;
** [[XPC M-file Communication|M-file communication]]&lt;br /&gt;
** Using outside of the lab&lt;br /&gt;
** [[media:standalone.pdf|Standalone Mode]]&lt;br /&gt;
** Stateflow&lt;br /&gt;
* Code Examples&lt;br /&gt;
** [[Controlling a DC Motor with an Encoder]]&lt;br /&gt;
** Something With State Machine&lt;br /&gt;
** [[Using RS-232 and Printing to LCD]]&lt;br /&gt;
**[[UDP Communications between Target and Host PC]]&lt;br /&gt;
** M-functions and S-functions&lt;br /&gt;
** [[xPC Code From Student Projects]]&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;QNX Real-Time Operating System&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[media:qnxtemplate.zip|QNX Control Program with Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Lab Supplies and Data Sheets&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://spreadsheets.google.com/pub?key=pa_bNAhFF-OvvxpSje1KDYg&amp;amp;output=html&amp;amp;gid=0&amp;amp;single=true Generally stocked lab inventory ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Vendors]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Other Software&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[List of Useful Software for Download]]&lt;br /&gt;
*Circuit Schematics and PCB Layout&lt;br /&gt;
*LaTex Document Preparation&lt;br /&gt;
** [http://meta.wikimedia.org/wiki/Help:Formula Mathematical Formulae]&lt;br /&gt;
** Document Formatting&lt;br /&gt;
** [[LaTeX Software Setup|Software Setup]]&lt;br /&gt;
** IEEE Styles&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;[[Other Lab Equipment]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Prototyping Tools&lt;br /&gt;
** [[Tektronix TDS220 Oscilloscope]]&lt;br /&gt;
** [[Tektronix CFG253 Function Generator]]&lt;br /&gt;
** [[media:Mastech_power_supply_manual.pdf|Mastech Power Supply]]&lt;br /&gt;
** Fluke III Multimeter&lt;br /&gt;
** Benchtop Multimeter&lt;br /&gt;
** Powered Breadboard&lt;br /&gt;
** Soldering Iron&lt;br /&gt;
* [http://ediacaran.mech.northwestern.edu/neuromech/index.php/Lab_Equipment High Performance Neuromechatronics Benches]&lt;br /&gt;
* The Sensoray 626 DAQ Card&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Course Material&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[ME 224 Experimental Engineering]]&lt;br /&gt;
* [http://lims.mech.northwestern.edu/~lynch/courses/ME333/2008/index.html ME 333 Introduction to Mechatronics]&lt;br /&gt;
** [[Lab 5]]&lt;br /&gt;
** [[Suggested final projects]]&lt;br /&gt;
** [[ME 333 final projects]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [http://www.mech.northwestern.edu/hartmann/ME333_CourseInformation.html ME 333 Mechatronics]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [http://www.mech.northwestern.edu/courses/433/ ME 433 Advanced Mechatronics] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Miscellaneous&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[Swarm Robot Project]]&lt;br /&gt;
** [[Swarm Robot Project Links]]&lt;br /&gt;
&lt;br /&gt;
* [[Indoor Localization System]]&lt;br /&gt;
* [[Robot Helicopter Project]]&lt;br /&gt;
* [[E-Puck Color Sensing Project]]&lt;br /&gt;
* [[Guitar Tunning Project]]&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9402</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9402"/>
		<updated>2008-12-13T21:22:50Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300px|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|300px|center|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9401</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9401"/>
		<updated>2008-12-13T21:21:38Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Addressing Scheme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|300px|center|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9400</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9400"/>
		<updated>2008-12-13T21:20:50Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Addressing Scheme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|center|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Circuitdiag.jpg&amp;diff=9399</id>
		<title>File:Circuitdiag.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Circuitdiag.jpg&amp;diff=9399"/>
		<updated>2008-12-13T21:19:59Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9398</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9398"/>
		<updated>2008-12-13T21:19:33Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9397</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9397"/>
		<updated>2008-12-13T21:18:53Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: /* Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg||100pix|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9396</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9396"/>
		<updated>2008-12-13T21:18:20Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|300pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|200pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9395</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9395"/>
		<updated>2008-12-13T21:17:16Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|300pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|200pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9394</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9394"/>
		<updated>2008-12-13T21:15:48Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|450pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|450pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
[[Image:circuitdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Blockdiag.jpg&amp;diff=9393</id>
		<title>File:Blockdiag.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Blockdiag.jpg&amp;diff=9393"/>
		<updated>2008-12-13T21:14:58Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9392</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9392"/>
		<updated>2008-12-13T21:14:29Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|450pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|450pix|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|200px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Code ==&lt;br /&gt;
Below is some sample code from the ME 433 Led Cube project.  This code updates the LED banks (one driver device = 16 LEDs) which have been flagged. In this example there are 9 banks on each of 6 “sides”, where a side corresponds to the all of LED banks (9 banks, 9 led drivers, 144 LEDs) under the control of a single 4-16 line demultiplexer. An 3-8 line demultiplexer selects the side, or the correct 4-16 demultiplexer. A 2-D array, FLAG, indicates which banks need to be updated. A 2-D array, DATA, contains the 16 bits of data for each bank, the data stream for each driver.&lt;br /&gt;
&lt;br /&gt;
void reset(void)	&lt;br /&gt;
{&lt;br /&gt;
 for(s=0;s&amp;lt;6;s++) //for each side 1 to 6&lt;br /&gt;
 {&lt;br /&gt;
   for(b=0;b&amp;lt;9;b++) //for each bank 1 to 9&lt;br /&gt;
   {&lt;br /&gt;
      if(FLAG[s][b]) //true is flagged for change&lt;br /&gt;
      {&lt;br /&gt;
         ADDY = (s*16) + b;		//4 least significant bits are bank address (sent to 16-Line //demux, 3 most significant bits are the side address (sent to &lt;br /&gt;
		//8-Line demux) &lt;br /&gt;
         output_d(ADDY);	//Set driver device address&lt;br /&gt;
         output_low(PIN_B3);  //enable 1 on 8bit demux, held low&lt;br /&gt;
         output_low(PIN_B4);  //enable 2 on 8bit demux, held low&lt;br /&gt;
         for(i=16;i&amp;gt;0;i--)&lt;br /&gt;
         {&lt;br /&gt;
            output_low(PIN_B0); // enable 1 on 16 bit demux (clock) is low&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_bit(PIN_B1,DATA[s*9 + b][i-1]); // sets data&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
            output_high(PIN_B0); // clock goes high and register records data point&lt;br /&gt;
            delay_us(10);&lt;br /&gt;
         }&lt;br /&gt;
         output_high(PIN_B2); //latch enable high to pass data&lt;br /&gt;
         delay_us(10);&lt;br /&gt;
         output_low(PIN_B2); //latch enable low to freeze data&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9391</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9391"/>
		<updated>2008-12-13T21:12:06Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|450pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|450px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
[[Image:blockdiag.jpg|200px|right|LED Drivers on a PCB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The Head Segment ===&lt;br /&gt;
[[image:BallCaster.jpg|thumb|left|The Ball Caster Under the Front Segment]]&lt;br /&gt;
&lt;br /&gt;
The head segment is similar to the body segments except that it contains a PCB board with a PIC instead of a servo motor. The head segment is the same width but slightly longer than the body segment.  A ball caster was added to the front of the segment to help support the extra length and help the wheels stay on the ground.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Protection and Visual Appeal  ====&lt;br /&gt;
[[image:Housing.jpg|thumb|right|One Segment of the Housing]]&lt;br /&gt;
&lt;br /&gt;
As a final step, housing for each segment was created from 3&amp;quot; PVC pipe.  The pipe was cut into segments the same length as the chassis. The bottom of the pipe was cut off, allowing it to sit flat on the chassis. The housing provides a protective covering for the servo, batteries and electronics.  The pipe was attached with velcro straps which mounted under the chassis.  This housing can be easily removed to debug and to change batteries.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mechanical Debugging ===&lt;br /&gt;
&lt;br /&gt;
Wheels come off the ground:  Add washers to the standoffs to force the chassis to be parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
Wheels slide, but do not roll:  Increase frictionby either adding weight to the segment or changing the &amp;quot;tires&amp;quot; (the o-ring).&lt;br /&gt;
&lt;br /&gt;
The segments slip when the servo rotates:  Tighten the screws for the connector standoffs, both above the beam and below the chassis.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Electronics ==&lt;br /&gt;
====Parts List (Digikey Part Number)====&lt;br /&gt;
&lt;br /&gt;
*PIC: PIC18F4520&lt;br /&gt;
*Oscillator: 40MHz Oscillator (X225-ND)&lt;br /&gt;
*RC Servo (see mechanical design) preferably high-torque &lt;br /&gt;
*10 wire IDC ribbon cable&lt;br /&gt;
*10 pos IDC cable socket (ASC10G): 1 per segment&lt;br /&gt;
*10 pos IDC cable header (A26267-ND): 1 per segment&lt;br /&gt;
*3 pos AAA battery holder (BH3AAA-W-ND): 1 per segment&lt;br /&gt;
*2 pos AAA battery holder (BH2AAA-W-ND): 1 per segment&lt;br /&gt;
*475 Ohm resistors (transmission line termination)&lt;br /&gt;
*Various switches to turn power electronics and the motors on/off&lt;br /&gt;
*Standard Protoboard, to mount connector from ribbon cable, and switches for each motor&lt;br /&gt;
*Xbee radio pair and PC &lt;br /&gt;
&lt;br /&gt;
====Electronics in Each Body Segment====&lt;br /&gt;
[[image:RibbonCable_schematic_HLS.jpg|thumb|right|Ribbon Cable Schematic]][[image:ServoBoard_schematic_HLS.jpg|thumb|right|ServoBoard Schematic]][[image:ServoBoard_Hooked_up_HLS.jpg|thumb|right|A Complete Circuit Board on the Snake]]&lt;br /&gt;
&lt;br /&gt;
The each segment of the snake contains a Futaba Standard RC Servo.  Each servo has 3 wires: power, ground, and signal.  The signal generated by the microcontroller is carried by the IDC ribbon cable, and each servo board taps into a single signal line and the reference ground line as shown in the ribbon cable schematic.  Each segment of the snake contains a small circuit board (ServoBoard Schematic) which has a connector for the ribbon cable, a switch to control the power, and a power indicator LED.  Because of the length of the ribbon cable, each signal line must be terminated with a 475 ohm resistor to prevent reflected &amp;quot;ghost&amp;quot; signals from interfering with the original signal.&lt;br /&gt;
&lt;br /&gt;
Each servo board also has its own power supply of 5 AAA cells, which gives each servo 7.5V.  Although the servos are only rated for 6V, 7.5V was used because more torque was needed.  The current drain (up to 500mA) caused the voltage across the cells to drop due to the high internal resistance of the alkaline cells.  NiMH rechargeable cells are more capable of handling high current draw applications, but are also much more expensive and can take several hours to charge.&lt;br /&gt;
&lt;br /&gt;
The robot snake can run for about 1 hour on the alkaline cells, after which the servos no longer have enough torque to generate the serpentine motion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Electronics in The Head Segment====&lt;br /&gt;
[[image:PICBoard_schematic_HLS.jpg|thumb|right|The Mainboard Schematic]]&lt;br /&gt;
[[image:PICBoard_HLS.jpg|thumb|right|The Electronics in the Head]]&lt;br /&gt;
&lt;br /&gt;
The PIC18F4520 Prototyping Board designed by Professor Peshkin was used.  Schematics of the board can be found here: [[Main_Page#PIC_18F4520_prototyping_board|18F4520_prototyping_board]].  The only change applied to the board was to replace the 20MHz clock with a 40MHz clock. This allowed the microcontroller to perform calculations faster, improving the resolution of the servo signal.  The ribbon cable was connected to the ground and port D pins on the PIC.&lt;br /&gt;
&lt;br /&gt;
An [[XBee_radio_communication_between_PICs|XBee radio]] was used to communicate between the microcontroller and the PC. The wiring diagram shows a schematic for the Xbee connection with the PIC. The [[XBee_radio_communication_between_PICs#XBee_Interface_Module|XBee Interface Board]] was used to provide a robust mechanical mount for the radio, as well as supply the 3.3V needed by the XBee.  On the PC side, another XBee interface board was plugged into the FTDI USB-Serial converter. Other than this, no special electronics were needed for the XBee radio.  The radio simply acted as a serial cable replacement  The snake was controlled by sending commands with a terminal program. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIC Code ==&lt;br /&gt;
There are two PIC files used in this robotic snake, SnakeServos.c and main.h, which are shown below. main.h sets up  the default parameters used in SnakeServos.c. The microcontroller controls the RC servos and receives data from a computer via serial communication.&lt;br /&gt;
&lt;br /&gt;
The main purpose of SnakeServos.c is to calculate the motion profile of the servos, and send a corresponding signal to each of the servos every 20 ms.  The code for this is found in the &amp;lt;tt&amp;gt;ISR_20MS&amp;lt;/tt&amp;gt; function in the code which is run every 20ms.&lt;br /&gt;
&lt;br /&gt;
A secondary function is to update the parameters that affect the motion of the snake.  The code for this can be found in the &amp;lt;tt&amp;gt;ISR_USART_RX&amp;lt;/tt&amp;gt; function, which is run every time a byte is received on the USART&#039;s receive buffer.&lt;br /&gt;
&lt;br /&gt;
====Servo Control Details====&lt;br /&gt;
The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). See [[RC Servo Theory]] for a discussion of the control signal for an RC servo. The RC servo expects a pulse every 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the constant &amp;lt;tt&amp;gt;TMR1_20MS&amp;lt;/tt&amp;gt; (defined as &amp;lt;tt&amp;gt;15536&amp;lt;/tt&amp;gt;), which will cause Timer1 to overflow 20 ms later and re-trigger the interrupt. &lt;br /&gt;
&lt;br /&gt;
As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and the corresponding timer value is stored in an array called &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt;. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; only needs to be polled for 2.25 ms. &amp;lt;tt&amp;gt;TMR1_2point25MS&amp;lt;/tt&amp;gt; is a constant corresponding to the value of &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; 2.25 ms after the interrupt begins and is defined as &amp;lt;tt&amp;gt;15536 + 6250&amp;lt;/tt&amp;gt;. While &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is less than this variable, the counter is compared sequentially to the values in the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array plus 15536 (15536 must be added because the Timer1 started counting at 15536 instead of 0).  Since the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array corresponds to the pulse widths of the servos, when the value of &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is greater than a value in &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; plus 15536, the corresponding pin is set low. After the sequence is complete, &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than &amp;lt;tt&amp;gt;TMR1_2point25MS&amp;lt;/tt&amp;gt;. After all the servo signals have been sent, the values in the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array are updated to prepare for the next 20ms interrupt. &lt;br /&gt;
&lt;br /&gt;
Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.&lt;br /&gt;
&lt;br /&gt;
====Serial Communication Details====&lt;br /&gt;
The PIC communicates serially with a XBee radio to a PC with a XBee radio. As shown in the code, the serial communication allows the user to change the speed, the amplitude and period of the sine wave, and the direction (forward, reverse, left and right) of the robotic snake. When a byte is received in the UART receive buffer, a high-priority interrupt is triggered.  The received byte is put into a switch-case statement, and the corresponding parameters are updated.&lt;br /&gt;
&lt;br /&gt;
====SnakeServos.c====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Andy Long, Clara Smart, and Michael Hwang&#039;s snake robot code.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;18f4520.h&amp;gt;&lt;br /&gt;
#device high_ints=TRUE        // this allows raised priority interrupts, which we need&lt;br /&gt;
#fuses HS,NOLVP,NOWDT,NOPROTECT&lt;br /&gt;
#use delay(clock=40000000)&lt;br /&gt;
#use rs232(baud=9600, UART1) &lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;main.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Put your desired high duration here; &lt;br /&gt;
3200 is center  &lt;br /&gt;
1000 is 90 deg right &lt;br /&gt;
5400 is 90 deg left&lt;br /&gt;
*/&lt;br /&gt;
int16 RCservo[7];  &lt;br /&gt;
&lt;br /&gt;
//use volatile keyword to avoid problems with optimizer&lt;br /&gt;
volatile float a = A_DEFAULT;&lt;br /&gt;
volatile float b = B_DEFAULT;&lt;br /&gt;
volatile float c = C_DEFAULT;&lt;br /&gt;
&lt;br /&gt;
volatile float alpha;&lt;br /&gt;
volatile float gamma;&lt;br /&gt;
volatile float beta;&lt;br /&gt;
volatile float speed = 0;&lt;br /&gt;
volatile float prev_speed = SPEED_DEFAULT;&lt;br /&gt;
float t = 0; &lt;br /&gt;
&lt;br /&gt;
#INT_TIMER1 // designates that this is the routine to call when timer1 overflows&lt;br /&gt;
//generates servo signals&lt;br /&gt;
void ISR_20MS(){&lt;br /&gt;
   volatile unsigned int16 time;&lt;br /&gt;
   set_timer1(TMR1_20MS);		//set timer to trigger an interrupt 20ms later&lt;br /&gt;
   SET_ALL_SERVOS(0b11111111);	//begin pulse for servo signal&lt;br /&gt;
   time=get_timer1();			//poll timer&lt;br /&gt;
   while(time &amp;lt; TMR1_2point25MS){	//end this loop after 2.25 ms&lt;br /&gt;
      if (time &amp;gt; (RCservo[0] + TMR1_20MS)){	&lt;br /&gt;
         output_low(SERVO_0);	//end the pulse when time is up&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[1] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_1);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[2] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_2);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[3] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_3);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[4] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_4);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[5] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_5);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[6] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_6);&lt;br /&gt;
      }&lt;br /&gt;
      time=get_timer1();	//poll timer&lt;br /&gt;
   }&lt;br /&gt;
   SET_ALL_SERVOS(0);	//set all servos low in case some pins are still high&lt;br /&gt;
&lt;br /&gt;
    //3200 is center  //1000 is 90 deg right // 5400 is 90 deg left&lt;br /&gt;
   /*&lt;br /&gt;
   add value of sine wave with phase offset ((alpha*sin(t + X*beta), &lt;br /&gt;
   3200 for servo center position,&lt;br /&gt;
   an adjustment value to compensate for offsets when mounting servo horn (SERVO_X_ADJ),&lt;br /&gt;
   and bias (gamma) for turning.&lt;br /&gt;
   */&lt;br /&gt;
   RCservo[0]=(int16)(alpha*sin(t) + 3200 + SERVO_3_ADJ + gamma); &lt;br /&gt;
   RCservo[1]=(int16)(alpha*sin(t + 1*beta) + 3200 + SERVO_4_ADJ + gamma);&lt;br /&gt;
   RCservo[2]=(int16)(alpha*sin(t + 2*beta) + 3200 + gamma + SERVO_5_ADJ);&lt;br /&gt;
   RCservo[3]=(int16)(alpha*sin(t + 3*beta) + 3200 + gamma + SERVO_6_ADJ);&lt;br /&gt;
   RCservo[4]=(int16)(alpha*sin(t + 4*beta) + 3200 + gamma + SERVO_7_ADJ);&lt;br /&gt;
   RCservo[5]=(int16)(alpha*sin(t + 5*beta) + 3200 + gamma + SERVO_8_ADJ);&lt;br /&gt;
   RCservo[6]=(int16)(alpha*sin(t + 6*beta) + 3200 + gamma + SERVO_9_ADJ);&lt;br /&gt;
&lt;br /&gt;
   t+= speed;	//increment time, wrap around if necessary to prevent overflow&lt;br /&gt;
   if (t &amp;gt; 2*pi){&lt;br /&gt;
      t = 0;&lt;br /&gt;
   }&lt;br /&gt;
   else if (t &amp;lt; 0){&lt;br /&gt;
      t = 2*pi;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#INT_RDA HIGH    //High-Priority Interrupt triggered by USART Rx&lt;br /&gt;
//parameter update&lt;br /&gt;
void ISR_USART_RX(){&lt;br /&gt;
   char input;&lt;br /&gt;
   if (kbhit()){&lt;br /&gt;
      input = getc();&lt;br /&gt;
      switch(input){&lt;br /&gt;
         case &#039;w&#039;: //accelerate&lt;br /&gt;
            speed += 0.002;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;s&#039;: //decelerate&lt;br /&gt;
            speed -= 0.002;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;x&#039;: //pause motion&lt;br /&gt;
            prev_speed = speed;&lt;br /&gt;
            speed = 0;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;z&#039;: //resume motion&lt;br /&gt;
            speed = prev_speed;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;c&#039;: //reverse speed&lt;br /&gt;
            speed = -speed;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;a&#039;: //increase left turn rate&lt;br /&gt;
            c -= 1000;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;d&#039;: //increase right turn rate&lt;br /&gt;
            c += 1000;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;f&#039;: //set turn rate to 0&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma = 0;&lt;br /&gt;
         case &#039;t&#039;: //increase amplitude&lt;br /&gt;
            a += 10; &lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;g&#039;: //decrease amplitude&lt;br /&gt;
            a -= 10;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;y&#039;: //increase phases in body&lt;br /&gt;
            b += 0.1;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;h&#039;: //decrease phases in body&lt;br /&gt;
            b -= 0.1;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;1&#039;: //preset 1&lt;br /&gt;
            a = A_DEFAULT;&lt;br /&gt;
            b = B_default;&lt;br /&gt;
            c = C_default;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;  &lt;br /&gt;
         case &#039;2&#039;:  //preset 2&lt;br /&gt;
            a = 1400;&lt;br /&gt;
            b = 2*pi;&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;3&#039;:  //preset 3&lt;br /&gt;
            a = 1000;&lt;br /&gt;
            b = 5*pi;&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;              &lt;br /&gt;
         default:&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main() {&lt;br /&gt;
	//load default values&lt;br /&gt;
   a = A_DEFAULT;&lt;br /&gt;
   b = B_default;&lt;br /&gt;
   c = C_default;&lt;br /&gt;
   gamma=-c/num_segments;&lt;br /&gt;
   beta=b/num_segments;&lt;br /&gt;
   alpha=a*abs(sin(beta));&lt;br /&gt;
   speed=0;&lt;br /&gt;
   &lt;br /&gt;
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4 );       &lt;br /&gt;
   set_timer1(0);&lt;br /&gt;
   &lt;br /&gt;
   enable_interrupts(INT_TIMER1);	//enable Timer1 interrupt&lt;br /&gt;
   enable_interrupts(INT_RDA);		//enable USART receive interrupt&lt;br /&gt;
   enable_interrupts(GLOBAL);&lt;br /&gt;
      &lt;br /&gt;
   while (TRUE) {     &lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===main.h===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef __MAIN_H__&lt;br /&gt;
#define __MAIN_H__&lt;br /&gt;
&lt;br /&gt;
#define SET_ALL_SERVOS(x) output_d(x)&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
This chart matches the pin on the PIC to the wire on the ribbon cable&lt;br /&gt;
PIN WIRE IN USE&lt;br /&gt;
--- ---- -------&lt;br /&gt;
RD0  2&lt;br /&gt;
RD1  3      *&lt;br /&gt;
RD2  4      *&lt;br /&gt;
RD3  5      *&lt;br /&gt;
RD4  6      *&lt;br /&gt;
RD5  7      *&lt;br /&gt;
RD6  8      *&lt;br /&gt;
RD7  9      *&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
#define SERVO_3_ADJ 0&lt;br /&gt;
#define SERVO_4_ADJ 300&lt;br /&gt;
#define SERVO_5_ADJ (-150)&lt;br /&gt;
#define SERVO_6_ADJ 75&lt;br /&gt;
#define SERVO_7_ADJ (-200)&lt;br /&gt;
#define SERVO_8_ADJ 100&lt;br /&gt;
#define SERVO_9_ADJ (-150)&lt;br /&gt;
&lt;br /&gt;
#define SERVO_0 PIN_D1&lt;br /&gt;
#define SERVO_1 PIN_D2&lt;br /&gt;
#define SERVO_2 PIN_D3&lt;br /&gt;
#define SERVO_3 PIN_D4&lt;br /&gt;
#define SERVO_4 PIN_D5&lt;br /&gt;
#define SERVO_5 PIN_D6&lt;br /&gt;
#define SERVO_6 PIN_D7&lt;br /&gt;
&lt;br /&gt;
#define A_DEFAULT 1300&lt;br /&gt;
#define B_DEFAULT 3*pi&lt;br /&gt;
#define C_DEFAULT 0&lt;br /&gt;
&lt;br /&gt;
#define SPEED_DEFAULT 0.05&lt;br /&gt;
#define OMEGA_DEFAULT 1&lt;br /&gt;
#define num_segments 8&lt;br /&gt;
&lt;br /&gt;
#define TMR1_20MS 15536&lt;br /&gt;
#define TMR1_2point25MS 15536 + 6250&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
Overall, the robotic snake was successful. &lt;br /&gt;
&lt;br /&gt;
Initially, the mechanical design included a single wheel mounted in the center of the pvc pipe. However, the motion of the snake was very difficult to control because the robotic snake became unstable very easily. As a result, the chassis was built to include two wheels, as discussed in the mechanical design section, in order to provide stability which made the robot easier to control. &lt;br /&gt;
&lt;br /&gt;
Wireless control from a laptop allowed easy demonstration of the snakes capabilities, and allowed others to easily control its movement.&lt;br /&gt;
&lt;br /&gt;
The final robotic snake can be seen in action here. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=Sb8WqaLX1Vo Video of the robot snake without housing]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
The robotic snake was developed within five weeks, and proved to be a very successful demo. There are many options that could be researched and developed to add to this robot and discussed below.&lt;br /&gt;
&lt;br /&gt;
==== Position Sensors ====&lt;br /&gt;
Sensors could be added to the robot to allow it to know its position. This could be accomplished with a combination of encoders on a segment. Most likely, the middle segment should be used since it would be the approximate center of gravity. Knowledge of the position of the center of gravity would potentially the robotic snake to be sent to different locations or navigate (using dead reckoning) through a pre-determined obstacle course or maze.  The information from encoders could be sent to a computer to observe different snakelike motions with different parameters.&lt;br /&gt;
&lt;br /&gt;
==== Obstacle Avoidance ====&lt;br /&gt;
With optical sensors on the head of the snake, the robot would be able to sense an obstacle and either overide the wireless command and avoid it, or stop completely, and wait for further commands.&lt;br /&gt;
&lt;br /&gt;
==== Power Supply ====&lt;br /&gt;
Currently, 5 AAA batteries are required for each servo, meaning that this robot requires many batteries. As a result, a different power supply could be investigated.&lt;br /&gt;
&lt;br /&gt;
====High Torque Servos====&lt;br /&gt;
The servos in the snake have a large load but do not need to move very quickly, so high torque servos could be used instead of standard servos.  This would also prolong the battery life because the servos would be operating in a more efficient range.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
Ma, Shugen. &amp;quot;Analysis of creeping locomotion of a snake-like robot.&amp;quot; &#039;&#039;Advanced Robotics&#039;&#039; Vol 15, No 2 (2001): 205-6.&lt;br /&gt;
&lt;br /&gt;
Saito, Fukaya, Iwasaki. &amp;quot;Serpentine Locomotion with Robotic Snakes&amp;quot;. &#039;&#039;IEEE Control Systems Magazine&#039;&#039; (Feb 2002): 66, 72-73.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Ledarray.jpg&amp;diff=9390</id>
		<title>File:Ledarray.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Ledarray.jpg&amp;diff=9390"/>
		<updated>2008-12-13T21:06:06Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9389</id>
		<title>LED Drivers</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=LED_Drivers&amp;diff=9389"/>
		<updated>2008-12-13T21:04:34Z</updated>

		<summary type="html">&lt;p&gt;ClaraS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:ledarray.jpg|thumb|400pix|right|A 12x12 LED Array]]&lt;br /&gt;
&lt;br /&gt;
[[Image:leddriver.jpg|thumb|600px|right|LED Drivers on a PCB]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Large numbers of LEDs in an array (of any size) can be controlled efficiently with the use of LED drivers and demultiplexers. &lt;br /&gt;
&lt;br /&gt;
==LED Drivers==&lt;br /&gt;
&lt;br /&gt;
[LED displays can be created using Serial-Input Constant-Current Latched LED Drivers (Made by Allegro, A6278 or A6279). The A6278 outputs to 8 LEDs using 8 NPN constant-current sink drivers, while 16 drivers in the A6279 can control 16 LEDs. Each device includes a CMOS shift register, accompanying data latches and sink drivers.&lt;br /&gt;
&lt;br /&gt;
In this setup, the LEDs are tied high, (+ side connected to Vcc while the negative end is connected to the chip) and the active signal output of the chip is low, creating a voltage difference across the LED.  The current through each LED is set by the selection of an external current-control resistor (REXT).  The value of this resistor can be determined by formulas in the data sheet, but may also require experimentation for larger displays.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
Data is sent from the PIC to the LED driver via the Serial Data line.  Within the LED driver data enters into a shift register, filled is then triggered sending the contents of the register to the 8 or 16 LEDs.  More specifically; the Serial Data input is passed to the next significant bit in the shift register on each rising edge of the Clock input. When the Latch Enable Input is set high, the contents of the shift register are passed to the latch. If the Output Enable input is low, the contents of the latch are sent to the LED drivers. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Addressing Scheme ==&lt;br /&gt;
&lt;br /&gt;
Up to 16 LED driver devices (equivalent to 256 LEDs with the A6279) can be controlled with the use of a PIC and a  4- to 16-Line Demultiplexer.  Signals from the PIC:  Output Enable, held low, allows the data to be passed from the latches to the drivers. The Serial Data line distributes the same data stream to each driver device. A 4-bit address for the desired driver device is sent to the demultiplexer to determine which driver is controlled. The output signal from the demultiplexer to each driver device acts as its Clock input. A clock pulse is sent from the PIC to enabling the demultiplexer, thus the output from the demultiplexer is a clock signal which is then sent to the driver device.  This clock signal allows the current Serial Data input bit to be passed to its shift register, data enters and shifts into the shift register on the rising edge of the clock. Once 16 data bits have been passed into the shift register, of the addressed driver device, the Latch Enable signal is sent from the PIC to all of the driver devices. This passes the data from the shift register to the latch and from the latch to the LED drivers, updating 16 LEDs at a time.  Output Enable from the driver must be low for the data to be passed to the latch and the LEDs. The outputs of the driver devices which were not being addressed (through the demultiplexer) will remain unchanged, as the data in their shift registers was not updated. Hence, 16 LEDs (one driver device) are updated at a time.&lt;br /&gt;
&lt;br /&gt;
One way to further increase the number of LEDs controlled by the PIC is to employ a 3- to 8-Line Demultiplexer between the PIC and the 4-16 Demultiplexers.  Thus, it is possible to control up to 8, 4-16 demultiplexers, which each control up to 16 LED drivers.  An additional 3 address bits must be sent by the PIC to this primary demultiplexer to enable one of  the (up to) 8  4-16-Line demultiplexers.  This scheme allows for the control of up to 2048 LEDs. A sample circuit diagram is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot Snake Motion ==&lt;br /&gt;
[[image:Serpentine_curves.jpg|thumb|300pix|right|Serpentine Curves]]&lt;br /&gt;
&lt;br /&gt;
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations (Saito etal, 72-73):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(s)= \int_{0}^{s} \cos (\zeta_\sigma) d\sigma&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(s)= \int_{0}^{s} \sin (\zeta_\sigma) d\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\zeta_\sigma= a \cos (b\sigma) +c\sigma &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the parameters &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, &#039;&#039;a&#039;&#039; changes the appearance of the curve, &#039;&#039;b&#039;&#039; changes the number of phases, and &#039;&#039;c&#039;&#039; changes the direction.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_i = \alpha sin(\omega t +(i-1)\beta ) + \gamma, \left ( i=1, ..., n-1 \right )&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;alpha; , &amp;amp;beta; , and &amp;amp;gamma; are parameters used to characterize the serpentine curve and are dependent on &#039;&#039;a&#039;&#039;, &#039;&#039;b&#039;&#039;, and &#039;&#039;c&#039;&#039; as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = a \left | \sin \left ( \frac{\beta}{2} \right ) \right | &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{b}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\gamma = -\frac{c}{n} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The equations above for &amp;amp;phi;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;,&amp;amp;alpha;,&amp;amp;beta;, and &amp;amp;gamma; were used in this snake like robot as shown in the [[Robot Snake#PIC Code|code section]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanical Design ==&lt;br /&gt;
[[image:FullSnake.jpg|thumb|right|The Snake]]&lt;br /&gt;
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor.  As the snake is designed to be modular, there is no limit to the number of body segments.  More segments will allow it to move more smoothly, while fewer segments will be easier to control.   For this design, seven body segments were used due to material limitations.&lt;br /&gt;
&lt;br /&gt;
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake.  As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient. &lt;br /&gt;
&lt;br /&gt;
===Parts List===&lt;br /&gt;
&lt;br /&gt;
*Motors: Futaba S3004 standard ball bearing RC servo motor, Tower Hobbies LXZV41 $12.99&lt;br /&gt;
*Wheels: McMasterCarr Acetal Pulley for Fibrous Rope for 1/4&amp;quot; Rope Diameter, 3/4&amp;quot; OD McMasterCarr 8901T11 $1.66&lt;br /&gt;
*O-Rings (Tires): McMasterCarr Silicone O-Ring AS568A Dash Number 207, Packs of 50 McMasterCarr 9396K209 $7.60/50&lt;br /&gt;
*PVC Pipe: McMasterCarr Sewer &amp;amp; Drain Thin-Wall PVC Pipe Non-Perforated, 3&amp;quot; X 4-1/2&#039; L, Light Green McMasterCarr 2426K24 $7.06&lt;br /&gt;
*1/8th inch plastic for chassis: (Shop Stock) or McMasterCarr Polycarbonate Sheet 1/8&amp;quot; Thick, 12&amp;quot; X 12&amp;quot;, Clear, McMasterCarr, 8574K26 $6.32&lt;br /&gt;
*Dowel Pins: 1&amp;quot; long, 1/4&amp;quot; diameter &lt;br /&gt;
*Sheet Metal:  For the connecting segments&lt;br /&gt;
*Fasteners: Screws for the servos and chassis, washers for the standoffs&lt;br /&gt;
*Standoffs: Used 1&amp;quot; and 1/2&amp;quot; to achieve a level snake&lt;br /&gt;
*Velcro: To attach battery packs and housing to the chasis&lt;br /&gt;
*Ball caster: For the head&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Body Segments ===&lt;br /&gt;
[[image:Chasis.jpg|thumb|right|A Single Chasis Without a Servo]]&lt;br /&gt;
&lt;br /&gt;
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=wBcJkNHEaAs Video of 3 body segments moving]&lt;br /&gt;
&lt;br /&gt;
==== Chassis ====&lt;br /&gt;
&lt;br /&gt;
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor.  Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff.  The holes are drilled to allow the servo to be located in the center of the chassis. &lt;br /&gt;
&lt;br /&gt;
==== Connector ====&lt;br /&gt;
&lt;br /&gt;
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment&#039;s standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments.  A shorter beam allows for greater torque.  This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.   &lt;br /&gt;
&lt;br /&gt;
[[image:ChasisUnderside.jpg|thumb|right|The Underside of a Chassis]]&lt;br /&gt;
&lt;br /&gt;
====Standoffs ====&lt;br /&gt;
&lt;br /&gt;
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
==== Passive Wheels ====&lt;br /&gt;
[[image:Wheel.jpg|thumb|left|A Passive Wheel on the Dowel Pin]]&lt;br /&gt;
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground.  The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels.  The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fully Assembled Body Segment ====&lt;br /&gt;
[[image:BuiltChasis.jpg|thumb|right|A Chassis Built Showing a Standoff and Batteries]]&lt;br /&gt;
[[image:BuiltChasis2_MLS.jpg|thumb|right|Chassis with Batteries Removed]]&lt;br /&gt;
A fully assembled chassis has a mounted servo and is connected to a segment on either side.  AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch.  (See Electronic Design for more information on the circuit board and batteries)&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The Head Segment ===&lt;br /&gt;
[[image:BallCaster.jpg|thumb|left|The Ball Caster Under the Front Segment]]&lt;br /&gt;
&lt;br /&gt;
The head segment is similar to the body segments except that it contains a PCB board with a PIC instead of a servo motor. The head segment is the same width but slightly longer than the body segment.  A ball caster was added to the front of the segment to help support the extra length and help the wheels stay on the ground.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Protection and Visual Appeal  ====&lt;br /&gt;
[[image:Housing.jpg|thumb|right|One Segment of the Housing]]&lt;br /&gt;
&lt;br /&gt;
As a final step, housing for each segment was created from 3&amp;quot; PVC pipe.  The pipe was cut into segments the same length as the chassis. The bottom of the pipe was cut off, allowing it to sit flat on the chassis. The housing provides a protective covering for the servo, batteries and electronics.  The pipe was attached with velcro straps which mounted under the chassis.  This housing can be easily removed to debug and to change batteries.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mechanical Debugging ===&lt;br /&gt;
&lt;br /&gt;
Wheels come off the ground:  Add washers to the standoffs to force the chassis to be parallel to the ground.&lt;br /&gt;
&lt;br /&gt;
Wheels slide, but do not roll:  Increase frictionby either adding weight to the segment or changing the &amp;quot;tires&amp;quot; (the o-ring).&lt;br /&gt;
&lt;br /&gt;
The segments slip when the servo rotates:  Tighten the screws for the connector standoffs, both above the beam and below the chassis.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Electronics ==&lt;br /&gt;
====Parts List (Digikey Part Number)====&lt;br /&gt;
&lt;br /&gt;
*PIC: PIC18F4520&lt;br /&gt;
*Oscillator: 40MHz Oscillator (X225-ND)&lt;br /&gt;
*RC Servo (see mechanical design) preferably high-torque &lt;br /&gt;
*10 wire IDC ribbon cable&lt;br /&gt;
*10 pos IDC cable socket (ASC10G): 1 per segment&lt;br /&gt;
*10 pos IDC cable header (A26267-ND): 1 per segment&lt;br /&gt;
*3 pos AAA battery holder (BH3AAA-W-ND): 1 per segment&lt;br /&gt;
*2 pos AAA battery holder (BH2AAA-W-ND): 1 per segment&lt;br /&gt;
*475 Ohm resistors (transmission line termination)&lt;br /&gt;
*Various switches to turn power electronics and the motors on/off&lt;br /&gt;
*Standard Protoboard, to mount connector from ribbon cable, and switches for each motor&lt;br /&gt;
*Xbee radio pair and PC &lt;br /&gt;
&lt;br /&gt;
====Electronics in Each Body Segment====&lt;br /&gt;
[[image:RibbonCable_schematic_HLS.jpg|thumb|right|Ribbon Cable Schematic]][[image:ServoBoard_schematic_HLS.jpg|thumb|right|ServoBoard Schematic]][[image:ServoBoard_Hooked_up_HLS.jpg|thumb|right|A Complete Circuit Board on the Snake]]&lt;br /&gt;
&lt;br /&gt;
The each segment of the snake contains a Futaba Standard RC Servo.  Each servo has 3 wires: power, ground, and signal.  The signal generated by the microcontroller is carried by the IDC ribbon cable, and each servo board taps into a single signal line and the reference ground line as shown in the ribbon cable schematic.  Each segment of the snake contains a small circuit board (ServoBoard Schematic) which has a connector for the ribbon cable, a switch to control the power, and a power indicator LED.  Because of the length of the ribbon cable, each signal line must be terminated with a 475 ohm resistor to prevent reflected &amp;quot;ghost&amp;quot; signals from interfering with the original signal.&lt;br /&gt;
&lt;br /&gt;
Each servo board also has its own power supply of 5 AAA cells, which gives each servo 7.5V.  Although the servos are only rated for 6V, 7.5V was used because more torque was needed.  The current drain (up to 500mA) caused the voltage across the cells to drop due to the high internal resistance of the alkaline cells.  NiMH rechargeable cells are more capable of handling high current draw applications, but are also much more expensive and can take several hours to charge.&lt;br /&gt;
&lt;br /&gt;
The robot snake can run for about 1 hour on the alkaline cells, after which the servos no longer have enough torque to generate the serpentine motion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Electronics in The Head Segment====&lt;br /&gt;
[[image:PICBoard_schematic_HLS.jpg|thumb|right|The Mainboard Schematic]]&lt;br /&gt;
[[image:PICBoard_HLS.jpg|thumb|right|The Electronics in the Head]]&lt;br /&gt;
&lt;br /&gt;
The PIC18F4520 Prototyping Board designed by Professor Peshkin was used.  Schematics of the board can be found here: [[Main_Page#PIC_18F4520_prototyping_board|18F4520_prototyping_board]].  The only change applied to the board was to replace the 20MHz clock with a 40MHz clock. This allowed the microcontroller to perform calculations faster, improving the resolution of the servo signal.  The ribbon cable was connected to the ground and port D pins on the PIC.&lt;br /&gt;
&lt;br /&gt;
An [[XBee_radio_communication_between_PICs|XBee radio]] was used to communicate between the microcontroller and the PC. The wiring diagram shows a schematic for the Xbee connection with the PIC. The [[XBee_radio_communication_between_PICs#XBee_Interface_Module|XBee Interface Board]] was used to provide a robust mechanical mount for the radio, as well as supply the 3.3V needed by the XBee.  On the PC side, another XBee interface board was plugged into the FTDI USB-Serial converter. Other than this, no special electronics were needed for the XBee radio.  The radio simply acted as a serial cable replacement  The snake was controlled by sending commands with a terminal program. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIC Code ==&lt;br /&gt;
There are two PIC files used in this robotic snake, SnakeServos.c and main.h, which are shown below. main.h sets up  the default parameters used in SnakeServos.c. The microcontroller controls the RC servos and receives data from a computer via serial communication.&lt;br /&gt;
&lt;br /&gt;
The main purpose of SnakeServos.c is to calculate the motion profile of the servos, and send a corresponding signal to each of the servos every 20 ms.  The code for this is found in the &amp;lt;tt&amp;gt;ISR_20MS&amp;lt;/tt&amp;gt; function in the code which is run every 20ms.&lt;br /&gt;
&lt;br /&gt;
A secondary function is to update the parameters that affect the motion of the snake.  The code for this can be found in the &amp;lt;tt&amp;gt;ISR_USART_RX&amp;lt;/tt&amp;gt; function, which is run every time a byte is received on the USART&#039;s receive buffer.&lt;br /&gt;
&lt;br /&gt;
====Servo Control Details====&lt;br /&gt;
The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). See [[RC Servo Theory]] for a discussion of the control signal for an RC servo. The RC servo expects a pulse every 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the constant &amp;lt;tt&amp;gt;TMR1_20MS&amp;lt;/tt&amp;gt; (defined as &amp;lt;tt&amp;gt;15536&amp;lt;/tt&amp;gt;), which will cause Timer1 to overflow 20 ms later and re-trigger the interrupt. &lt;br /&gt;
&lt;br /&gt;
As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and the corresponding timer value is stored in an array called &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt;. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; only needs to be polled for 2.25 ms. &amp;lt;tt&amp;gt;TMR1_2point25MS&amp;lt;/tt&amp;gt; is a constant corresponding to the value of &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; 2.25 ms after the interrupt begins and is defined as &amp;lt;tt&amp;gt;15536 + 6250&amp;lt;/tt&amp;gt;. While &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is less than this variable, the counter is compared sequentially to the values in the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array plus 15536 (15536 must be added because the Timer1 started counting at 15536 instead of 0).  Since the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array corresponds to the pulse widths of the servos, when the value of &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is greater than a value in &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; plus 15536, the corresponding pin is set low. After the sequence is complete, &amp;lt;tt&amp;gt;Timer1&amp;lt;/tt&amp;gt; is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than &amp;lt;tt&amp;gt;TMR1_2point25MS&amp;lt;/tt&amp;gt;. After all the servo signals have been sent, the values in the &amp;lt;tt&amp;gt;RCservo&amp;lt;/tt&amp;gt; array are updated to prepare for the next 20ms interrupt. &lt;br /&gt;
&lt;br /&gt;
Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.&lt;br /&gt;
&lt;br /&gt;
====Serial Communication Details====&lt;br /&gt;
The PIC communicates serially with a XBee radio to a PC with a XBee radio. As shown in the code, the serial communication allows the user to change the speed, the amplitude and period of the sine wave, and the direction (forward, reverse, left and right) of the robotic snake. When a byte is received in the UART receive buffer, a high-priority interrupt is triggered.  The received byte is put into a switch-case statement, and the corresponding parameters are updated.&lt;br /&gt;
&lt;br /&gt;
====SnakeServos.c====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Andy Long, Clara Smart, and Michael Hwang&#039;s snake robot code.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;18f4520.h&amp;gt;&lt;br /&gt;
#device high_ints=TRUE        // this allows raised priority interrupts, which we need&lt;br /&gt;
#fuses HS,NOLVP,NOWDT,NOPROTECT&lt;br /&gt;
#use delay(clock=40000000)&lt;br /&gt;
#use rs232(baud=9600, UART1) &lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;main.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Put your desired high duration here; &lt;br /&gt;
3200 is center  &lt;br /&gt;
1000 is 90 deg right &lt;br /&gt;
5400 is 90 deg left&lt;br /&gt;
*/&lt;br /&gt;
int16 RCservo[7];  &lt;br /&gt;
&lt;br /&gt;
//use volatile keyword to avoid problems with optimizer&lt;br /&gt;
volatile float a = A_DEFAULT;&lt;br /&gt;
volatile float b = B_DEFAULT;&lt;br /&gt;
volatile float c = C_DEFAULT;&lt;br /&gt;
&lt;br /&gt;
volatile float alpha;&lt;br /&gt;
volatile float gamma;&lt;br /&gt;
volatile float beta;&lt;br /&gt;
volatile float speed = 0;&lt;br /&gt;
volatile float prev_speed = SPEED_DEFAULT;&lt;br /&gt;
float t = 0; &lt;br /&gt;
&lt;br /&gt;
#INT_TIMER1 // designates that this is the routine to call when timer1 overflows&lt;br /&gt;
//generates servo signals&lt;br /&gt;
void ISR_20MS(){&lt;br /&gt;
   volatile unsigned int16 time;&lt;br /&gt;
   set_timer1(TMR1_20MS);		//set timer to trigger an interrupt 20ms later&lt;br /&gt;
   SET_ALL_SERVOS(0b11111111);	//begin pulse for servo signal&lt;br /&gt;
   time=get_timer1();			//poll timer&lt;br /&gt;
   while(time &amp;lt; TMR1_2point25MS){	//end this loop after 2.25 ms&lt;br /&gt;
      if (time &amp;gt; (RCservo[0] + TMR1_20MS)){	&lt;br /&gt;
         output_low(SERVO_0);	//end the pulse when time is up&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[1] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_1);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[2] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_2);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[3] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_3);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[4] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_4);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[5] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_5);&lt;br /&gt;
      }&lt;br /&gt;
      if (time &amp;gt; (RCservo[6] + TMR1_20MS)){&lt;br /&gt;
         output_low(SERVO_6);&lt;br /&gt;
      }&lt;br /&gt;
      time=get_timer1();	//poll timer&lt;br /&gt;
   }&lt;br /&gt;
   SET_ALL_SERVOS(0);	//set all servos low in case some pins are still high&lt;br /&gt;
&lt;br /&gt;
    //3200 is center  //1000 is 90 deg right // 5400 is 90 deg left&lt;br /&gt;
   /*&lt;br /&gt;
   add value of sine wave with phase offset ((alpha*sin(t + X*beta), &lt;br /&gt;
   3200 for servo center position,&lt;br /&gt;
   an adjustment value to compensate for offsets when mounting servo horn (SERVO_X_ADJ),&lt;br /&gt;
   and bias (gamma) for turning.&lt;br /&gt;
   */&lt;br /&gt;
   RCservo[0]=(int16)(alpha*sin(t) + 3200 + SERVO_3_ADJ + gamma); &lt;br /&gt;
   RCservo[1]=(int16)(alpha*sin(t + 1*beta) + 3200 + SERVO_4_ADJ + gamma);&lt;br /&gt;
   RCservo[2]=(int16)(alpha*sin(t + 2*beta) + 3200 + gamma + SERVO_5_ADJ);&lt;br /&gt;
   RCservo[3]=(int16)(alpha*sin(t + 3*beta) + 3200 + gamma + SERVO_6_ADJ);&lt;br /&gt;
   RCservo[4]=(int16)(alpha*sin(t + 4*beta) + 3200 + gamma + SERVO_7_ADJ);&lt;br /&gt;
   RCservo[5]=(int16)(alpha*sin(t + 5*beta) + 3200 + gamma + SERVO_8_ADJ);&lt;br /&gt;
   RCservo[6]=(int16)(alpha*sin(t + 6*beta) + 3200 + gamma + SERVO_9_ADJ);&lt;br /&gt;
&lt;br /&gt;
   t+= speed;	//increment time, wrap around if necessary to prevent overflow&lt;br /&gt;
   if (t &amp;gt; 2*pi){&lt;br /&gt;
      t = 0;&lt;br /&gt;
   }&lt;br /&gt;
   else if (t &amp;lt; 0){&lt;br /&gt;
      t = 2*pi;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#INT_RDA HIGH    //High-Priority Interrupt triggered by USART Rx&lt;br /&gt;
//parameter update&lt;br /&gt;
void ISR_USART_RX(){&lt;br /&gt;
   char input;&lt;br /&gt;
   if (kbhit()){&lt;br /&gt;
      input = getc();&lt;br /&gt;
      switch(input){&lt;br /&gt;
         case &#039;w&#039;: //accelerate&lt;br /&gt;
            speed += 0.002;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;s&#039;: //decelerate&lt;br /&gt;
            speed -= 0.002;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;x&#039;: //pause motion&lt;br /&gt;
            prev_speed = speed;&lt;br /&gt;
            speed = 0;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;z&#039;: //resume motion&lt;br /&gt;
            speed = prev_speed;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;c&#039;: //reverse speed&lt;br /&gt;
            speed = -speed;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;a&#039;: //increase left turn rate&lt;br /&gt;
            c -= 1000;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;d&#039;: //increase right turn rate&lt;br /&gt;
            c += 1000;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;f&#039;: //set turn rate to 0&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma = 0;&lt;br /&gt;
         case &#039;t&#039;: //increase amplitude&lt;br /&gt;
            a += 10; &lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;g&#039;: //decrease amplitude&lt;br /&gt;
            a -= 10;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;y&#039;: //increase phases in body&lt;br /&gt;
            b += 0.1;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;h&#039;: //decrease phases in body&lt;br /&gt;
            b -= 0.1;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;1&#039;: //preset 1&lt;br /&gt;
            a = A_DEFAULT;&lt;br /&gt;
            b = B_default;&lt;br /&gt;
            c = C_default;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;  &lt;br /&gt;
         case &#039;2&#039;:  //preset 2&lt;br /&gt;
            a = 1400;&lt;br /&gt;
            b = 2*pi;&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;&lt;br /&gt;
         case &#039;3&#039;:  //preset 3&lt;br /&gt;
            a = 1000;&lt;br /&gt;
            b = 5*pi;&lt;br /&gt;
            c = C_DEFAULT;&lt;br /&gt;
            gamma=-c/num_segments;&lt;br /&gt;
            beta=b/num_segments;&lt;br /&gt;
            alpha=a*abs(sin(beta));&lt;br /&gt;
            speed=SPEED_DEFAULT;&lt;br /&gt;
            break;              &lt;br /&gt;
         default:&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main() {&lt;br /&gt;
	//load default values&lt;br /&gt;
   a = A_DEFAULT;&lt;br /&gt;
   b = B_default;&lt;br /&gt;
   c = C_default;&lt;br /&gt;
   gamma=-c/num_segments;&lt;br /&gt;
   beta=b/num_segments;&lt;br /&gt;
   alpha=a*abs(sin(beta));&lt;br /&gt;
   speed=0;&lt;br /&gt;
   &lt;br /&gt;
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4 );       &lt;br /&gt;
   set_timer1(0);&lt;br /&gt;
   &lt;br /&gt;
   enable_interrupts(INT_TIMER1);	//enable Timer1 interrupt&lt;br /&gt;
   enable_interrupts(INT_RDA);		//enable USART receive interrupt&lt;br /&gt;
   enable_interrupts(GLOBAL);&lt;br /&gt;
      &lt;br /&gt;
   while (TRUE) {     &lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===main.h===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef __MAIN_H__&lt;br /&gt;
#define __MAIN_H__&lt;br /&gt;
&lt;br /&gt;
#define SET_ALL_SERVOS(x) output_d(x)&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
This chart matches the pin on the PIC to the wire on the ribbon cable&lt;br /&gt;
PIN WIRE IN USE&lt;br /&gt;
--- ---- -------&lt;br /&gt;
RD0  2&lt;br /&gt;
RD1  3      *&lt;br /&gt;
RD2  4      *&lt;br /&gt;
RD3  5      *&lt;br /&gt;
RD4  6      *&lt;br /&gt;
RD5  7      *&lt;br /&gt;
RD6  8      *&lt;br /&gt;
RD7  9      *&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
#define SERVO_3_ADJ 0&lt;br /&gt;
#define SERVO_4_ADJ 300&lt;br /&gt;
#define SERVO_5_ADJ (-150)&lt;br /&gt;
#define SERVO_6_ADJ 75&lt;br /&gt;
#define SERVO_7_ADJ (-200)&lt;br /&gt;
#define SERVO_8_ADJ 100&lt;br /&gt;
#define SERVO_9_ADJ (-150)&lt;br /&gt;
&lt;br /&gt;
#define SERVO_0 PIN_D1&lt;br /&gt;
#define SERVO_1 PIN_D2&lt;br /&gt;
#define SERVO_2 PIN_D3&lt;br /&gt;
#define SERVO_3 PIN_D4&lt;br /&gt;
#define SERVO_4 PIN_D5&lt;br /&gt;
#define SERVO_5 PIN_D6&lt;br /&gt;
#define SERVO_6 PIN_D7&lt;br /&gt;
&lt;br /&gt;
#define A_DEFAULT 1300&lt;br /&gt;
#define B_DEFAULT 3*pi&lt;br /&gt;
#define C_DEFAULT 0&lt;br /&gt;
&lt;br /&gt;
#define SPEED_DEFAULT 0.05&lt;br /&gt;
#define OMEGA_DEFAULT 1&lt;br /&gt;
#define num_segments 8&lt;br /&gt;
&lt;br /&gt;
#define TMR1_20MS 15536&lt;br /&gt;
#define TMR1_2point25MS 15536 + 6250&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
Overall, the robotic snake was successful. &lt;br /&gt;
&lt;br /&gt;
Initially, the mechanical design included a single wheel mounted in the center of the pvc pipe. However, the motion of the snake was very difficult to control because the robotic snake became unstable very easily. As a result, the chassis was built to include two wheels, as discussed in the mechanical design section, in order to provide stability which made the robot easier to control. &lt;br /&gt;
&lt;br /&gt;
Wireless control from a laptop allowed easy demonstration of the snakes capabilities, and allowed others to easily control its movement.&lt;br /&gt;
&lt;br /&gt;
The final robotic snake can be seen in action here. &lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=Sb8WqaLX1Vo Video of the robot snake without housing]&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
The robotic snake was developed within five weeks, and proved to be a very successful demo. There are many options that could be researched and developed to add to this robot and discussed below.&lt;br /&gt;
&lt;br /&gt;
==== Position Sensors ====&lt;br /&gt;
Sensors could be added to the robot to allow it to know its position. This could be accomplished with a combination of encoders on a segment. Most likely, the middle segment should be used since it would be the approximate center of gravity. Knowledge of the position of the center of gravity would potentially the robotic snake to be sent to different locations or navigate (using dead reckoning) through a pre-determined obstacle course or maze.  The information from encoders could be sent to a computer to observe different snakelike motions with different parameters.&lt;br /&gt;
&lt;br /&gt;
==== Obstacle Avoidance ====&lt;br /&gt;
With optical sensors on the head of the snake, the robot would be able to sense an obstacle and either overide the wireless command and avoid it, or stop completely, and wait for further commands.&lt;br /&gt;
&lt;br /&gt;
==== Power Supply ====&lt;br /&gt;
Currently, 5 AAA batteries are required for each servo, meaning that this robot requires many batteries. As a result, a different power supply could be investigated.&lt;br /&gt;
&lt;br /&gt;
====High Torque Servos====&lt;br /&gt;
The servos in the snake have a large load but do not need to move very quickly, so high torque servos could be used instead of standard servos.  This would also prolong the battery life because the servos would be operating in a more efficient range.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
Ma, Shugen. &amp;quot;Analysis of creeping locomotion of a snake-like robot.&amp;quot; &#039;&#039;Advanced Robotics&#039;&#039; Vol 15, No 2 (2001): 205-6.&lt;br /&gt;
&lt;br /&gt;
Saito, Fukaya, Iwasaki. &amp;quot;Serpentine Locomotion with Robotic Snakes&amp;quot;. &#039;&#039;IEEE Control Systems Magazine&#039;&#039; (Feb 2002): 66, 72-73.&lt;/div&gt;</summary>
		<author><name>ClaraS</name></author>
	</entry>
</feed>