Skip to content

Commit

Permalink
Merge pull request #90 from Alarm-Siren/4.1.0
Browse files Browse the repository at this point in the history
Merge 4.1.0 into Master
  • Loading branch information
Alarm-Siren authored Jul 15, 2023
2 parents 792ea0a + f65085e commit 2a9b2f4
Show file tree
Hide file tree
Showing 32 changed files with 1,998 additions and 231 deletions.
54 changes: 33 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
![KiCad Library for Arduino banner logo](/resources/banner.png)

# KiCad Symbol & Footprint Library for Arduino Modules
*Version 4.0.1*
*Version 4.1.0*

![Required KiCad Version](https://img.shields.io/badge/kicad-%3E%3D6.0-critical) ![License](https://img.shields.io/github/license/alarm-siren/arduino-kicad-library) ![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/alarm-siren/arduino-kicad-library) ![Symbols](https://img.shields.io/badge/symbols-56-informational) ![Downloads](https://img.shields.io/github/downloads/alarm-siren/arduino-kicad-library/total)
[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) ![Required KiCad Version](https://img.shields.io/badge/kicad-%3E%3D6.0-critical) ![License](https://img.shields.io/github/license/alarm-siren/arduino-kicad-library) ![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/alarm-siren/arduino-kicad-library) ![Symbols](https://img.shields.io/badge/symbols-59-informational) ![Downloads](https://img.shields.io/github/downloads/alarm-siren/arduino-kicad-library/total)

This is a library of KiCad schematic symbols and PCB footprints for most Arduino modules. You can use them to make your own PCB design which will effortlessly connect with your chosen Arduino module.

Expand All @@ -14,7 +14,7 @@ Currently included modules:
- Arduino **Leonardo** Shield
- Arduino **M0** Shield
- Arduino **M0 Pro** Shield
- Arduino **Mega 2560** Shield
- Arduino **Mega 2560 R3** Shield
- Arduino **Micro** Socket
- Arduino **Mini** Socket
- Arduino **MKR 1000 WiFi** Socket
Expand All @@ -41,14 +41,17 @@ Currently included modules:
- Arduino **Uno R2** Shield
- Arduino **Uno R3** Shield
- Arduino **Uno R3 SMD** Shield
- Arduino **Uno R4 Minima** Shield
- Arduino **Uno R4 WiFi** Shield
- Arduino **Uno WiFi R2** Shield
- Arduino **Zero** Shield
- Clone **Mega 2560 Pro** Socket
- Clone **Pro Mini** Socket

*"Shield" means the module is designed to plug in from beneath your PCB. "Socket" means the module is designed to plug in from above your PCB. "Tile" means the module is designed to be soldered directly on to your PCB using surface-mount pads.*

## KiCad Version Compatibility
This library requires at least KiCad 6 to function, and is tested on KiCad versions 6.0.8 and 7.0.0. Note that the installation procedure is different for KiCad 6 and 7; please see the [Library Installation](#library-installation) section below.
This library requires at least KiCad 6 to function, and is tested on KiCad versions 6.0.8 and 7.0.2. Note that the installation procedure is different for KiCad 6 and 7; please see the [Library Installation](#library-installation) section below.

## Comments, Requests, Bugs & Contributions
All are welcome!
Expand Down Expand Up @@ -132,27 +135,36 @@ Original Images: Copyright 2013, [Arduino](https://www.arduino.cc/). Derived Ima

The word "Arduino" is a registered trademark of [Arduino](https://www.arduino.cc/). This trademark is used in this library to refer to Arduino products and to identify Arduino-related non-commercial content, as permitted by Arduino's [trademark guidelines](https://www.arduino.cc/en/trademark). This project is not affiliated with nor endorsed by Arduino.

## A note about Power and Reset pins
## FAQ

### Power
On Arduino modules it is not possible to categorically state the appropriate electrical type for some power pins, as that depends on exactly which module you're using and how it's connected in your design. Sometimes a pin must necessarily be a power input or output, or is internally disconnected by default, but some pins may be either depending on how you are using the module.
Answers to some common questions about this library.

Regardless, I needed to make a decision about what electrical type to apply to these pins. I could use something like "passive" or "unspecified", but then KiCad's electrical rules checker (ERC) tool would not be effective in catching errors on these pins at all, whilst using "power output" can mean it objects to you joining pins together even when that's okay in some situations.
### Is this library in active development?

Therefore, I have adopted the following methodology for deciding the electrical type of a given power pin:
1. Where I have been able to determine that a given power pin is internally disconnected by default, I have set the electrical type to "Unconnected".
2. Where I have been able to determine that a given power pin must necessarily be a Power Output, I have set the electrical type to "Power Output".
3. In any other circumstance, or where I am lacking information, I have set the electrical type to "Power Input" as this presents the least issues. This means if you're actually using any of these power pins as 'Power Outputs' in your design, by default the ERC will complain that the relevant nets are undriven. To fix this you will need to add the special "PWR_FLAG" component to the affected net.

Two concrete examples:
- For the Arduino Nano 33 BLE, the 5V pin is disconnected by default so it is assigned "Unconnected". The GND and 3.3V pins can be either inputs or outputs depending on how the module is being powered, so they are assigned "Power Input". VIN can only ever be used as an input, so it too is assigned "Power Input".
- For the Arduino 101, both the 5V and 3.3V rails are used by internal circuitry of the module, and the module will create its own 3.3V rail from the 5V rail, thus the 3.3V pins must necessarily be a "Power Output" and is assigned as such. The GND, 5V and VIN pins can be either inputs or outputs depending on how the module is being powered, so they are assigned "Power Input".
Yes. For the foreseeable future, I will be providing support, bug-fixes and updating the library with any new Arduino modules as they are released.

### Reset
Reset pins on Arduino modules have interesting electrical characteristics which mean that no KiCad electrical type exactly matches their functionality. I settled on "open collector" as the nearest candidate, but unlike a true open collector pin on an integrated circuit, the reset pins on Arduino modules have an internal weak pull-up and a reset button that can strongly pull low, so your design needs to be able to cope with all these situations. In other words, if you use the reset pin as an input to your PCB then you do not need to add a pull-up (doing so will actually make it less responsive). Conversely, if you want to drive the reset line in order to reset the module from your PCB, you need to ensure that you only ever pull it low: if you pull it high at the same time as an unwitting user hits the physical reset button, you've created a short between power and ground through the microcontroller, and that would be very bad.
### What does the license exception in the License & Legal section mean?

### TL;DR:
This library uses the same license as KiCad's own built-in parts library does, including the exception. The KiCad Libraries team have a [page which explains the meaning of the exception](https://www.kicad.org/libraries/license/). My version of the exception uses slightly better wording, but the effect is the same.

*The KiCad ERC cannot catch all the possible electrical errors on your design as it doesn't natively support the reset and power pins' electrical types. Even if the ERC says it's OK, double check it manually.*
### Why do the footprints not have an `Edge.Cuts` outline?

*If the ERC says that your power pins are undriven, first manually check they are being driven. If they are driven, then add a "PWR_FLAG" component to the net to make the error go away.*
If I put in an `Edge.Cuts` outline, then those users who want to have a PCB larger than the module footprint would have to modify the footprint to do so. In my experience, it is far more common for users to want a PCB larger than the module anyway, so I prefer to cater to those users. If you want your PCB to be the same size and shape as the Arduino module, you can trace the `F.Silkscreen` or `B.Silkscreen` layer (as appropriate) out in the `Edge.Cuts` layer yourself, or you can modify the footprint to change the outline from `F.Silkscreen` or `B.Silkscreen` layer to `Edge.Cuts`.

### Why do the Nicla Vision and Nicla Voice tile footprints have cut-outs?

The cut-outs are necessary to accommodate components on the back of those modules; without them the components would physically prevent you from getting the module's pads down to the footprint's SMD pads.

### Why does the whole footprint have an `F.Courtyard` or `B.Courtyard` outline? I can't place my components where I need to!

Firstly, this does not stop you from placing your components wherever you want. It does mean that the KiCad DRC will, by default, report errors or warnings in some circumstances because the module footprint and your circuit's footprints' courtyards are overlapping, but you can ignore or disable these errors/warnings without issue.

Secondly, the intention is that it acts as a warning to the user that they've put components in the 'danger zone' between their PCB and the Module. I do not model all of the tall components on the module, so it is possible that a user might unknowingly place their own tall component in a position that would conflict with one on the module. My hope is that the DRC errors/warnings will flag this potential problem to the user to manually check that their placement does not conflict with the module.

In principle I'm open to marking the taller components specifically, which would remove this issue, but this is a lot of work and requires data I don't have access to for all the modules.

### Why is this Power Pin set to Power Input/Power Output/Unconnected? I get DRC errors because of it!

The short answer is that some power pins on some modules can be used as either inputs or outputs, depending on your circuit design / where you're powering the assembly from.

For those pins where I've been able to categorically confirm that the given power pin is Unconnected by default, or must necessarily be a Power Input or a Power Output, I have set it as such. For those pins that can be used as either an input or output, I have set it to Power Input as this is the more flexible option whilst still preserving some element of DRC capability. If you're using one of these Power Input pins as a Power Output from the module, you'll need to add the special "PWR_FLAG" component to the affected net to make the DRC error go away.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605BA)
(descr "https://docs.arduino.cc/retired/boards/arduino-101-619")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp f7be9472-ed91-4ee9-bd76-3cdf0ea62d4c)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605C9)
(descr "https://docs.arduino.cc/hardware/due")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 1b3f3ef1-96ee-485d-9246-f884959e470f)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605C9)
(descr "https://docs.arduino.cc/hardware/giga-r1-wifi")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 1b3f3ef1-96ee-485d-9246-f884959e470f)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605E1)
(descr "https://docs.arduino.cc/hardware/leonardo")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp a1f630da-7afa-4b22-8d0b-3ca76860ee4b)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605F5)
(descr "https://docs.arduino.cc/retired/boards/arduino-m0-pro")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 2ad0c6da-ec08-432a-b345-3dcc07bfe571)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/mkr-1000-wifi")
(attr through_hole)
(fp_text reference "XA**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp ae6ac9ec-621f-4d28-bcc4-60fba63868e3)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/mkr-fox-1200")
(attr through_hole)
(fp_text reference "XA**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp ae6ac9ec-621f-4d28-bcc4-60fba63868e3)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/mkr-vidor-4000")
(attr through_hole)
(fp_text reference "XA**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp ae6ac9ec-621f-4d28-bcc4-60fba63868e3)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/mkr-wifi-1010")
(attr through_hole)
(fp_text reference "XA**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp ae6ac9ec-621f-4d28-bcc4-60fba63868e3)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/mkr-zero")
(attr through_hole)
(fp_text reference "XA**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 4 -3.35 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp ae6ac9ec-621f-4d28-bcc4-60fba63868e3)
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
(footprint "Arduino_Mega2560_Shield" (version 20211014) (generator pcbnew)
(footprint "Arduino_Mega2560_R3_Shield" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 5A8605D3)
(descr "https://docs.arduino.cc/hardware/mega-2560")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 901f647f-3550-4ee2-b85a-c0e6eb7f056b)
)
(fp_text value "Arduino_Mega2560_Shield" (at 27.305 -54.356) (layer "B.Fab")
(fp_text value "Arduino_Mega2560_R3_Shield" (at 27.305 -54.356) (layer "B.Fab")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 934f6513-ff6d-48e4-9678-db00acb1239e)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A860566)
(descr "https://docs.arduino.cc/hardware/micro")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -19.05) (layer "F.SilkS")
(fp_text reference "A**" (at 2.54 -19.05) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 16f32679-7d70-46ba-a272-2ece67ea1d01)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A87789E)
(descr "https://docs.arduino.cc/retired/boards/arduino-mini-05")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -31.496) (layer "F.SilkS")
(fp_text reference "A**" (at 2.54 -31.496) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 2d6a30bb-ae01-4535-880b-616de8fedfc8)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A87789E)
(descr "https://docs.arduino.cc/retired/boards/arduino-mini-05")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -31.496) (layer "F.SilkS")
(fp_text reference "A**" (at 2.54 -31.496) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 2d6a30bb-ae01-4535-880b-616de8fedfc8)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A860395)
(descr "https://docs.arduino.cc/hardware/nano-33-iot")
(attr through_hole)
(fp_text reference "XA**" (at 0 -45.28) (layer "F.SilkS")
(fp_text reference "A**" (at 0 -45.28) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 8d501a07-f456-428f-938a-c2ff457ac775)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A860395)
(descr "https://docs.arduino.cc/hardware/nano-every")
(attr through_hole)
(fp_text reference "XA**" (at 0 -44.45) (layer "F.SilkS")
(fp_text reference "A**" (at 0 -44.45) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 8d501a07-f456-428f-938a-c2ff457ac775)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A860395)
(descr "https://docs.arduino.cc/hardware/nano")
(attr through_hole)
(fp_text reference "XA**" (at 0 -44.45) (layer "F.SilkS")
(fp_text reference "A**" (at 0 -44.45) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 8d501a07-f456-428f-938a-c2ff457ac775)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/nicla-vision")
(attr through_hole)
(fp_text reference "XA**" (at 11.43 -1.016 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 11.43 -1.016 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 6108a887-8dee-400f-9d5b-8ec25c100fb6)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 0)
(descr "https://docs.arduino.cc/hardware/nicla-voice")
(attr through_hole)
(fp_text reference "XA**" (at 11.43 -1.016 unlocked) (layer "F.SilkS")
(fp_text reference "A**" (at 11.43 -1.016 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 6108a887-8dee-400f-9d5b-8ec25c100fb6)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5CC94EC1)
(descr "https://docs.arduino.cc/retired/boards/arduino-pro-mini")
(attr through_hole)
(fp_text reference "XA**" (at -6.858 -17.526) (layer "F.SilkS")
(fp_text reference "A**" (at -6.858 -17.526) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 9709e64b-caf8-43d7-a039-434f6e06ab28)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5CC94EC1)
(descr "https://docs.arduino.cc/retired/boards/arduino-pro-mini")
(attr through_hole)
(fp_text reference "XA**" (at -6.858 -17.526) (layer "F.SilkS")
(fp_text reference "A**" (at -6.858 -17.526) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 9709e64b-caf8-43d7-a039-434f6e06ab28)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605EC)
(descr "https://startingelectronics.org/articles/arduino/uno-r3-r2-differences/")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 50fc5782-4e94-4f47-b097-dfbe20aaae13)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
(tedit 5A8605EC)
(descr "https://docs.arduino.cc/hardware/uno-rev3")
(attr through_hole)
(fp_text reference "XA**" (at 2.54 -54.356) (layer "B.SilkS")
(fp_text reference "A**" (at 2.54 -54.356) (layer "B.SilkS")
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
(tstamp 50fc5782-4e94-4f47-b097-dfbe20aaae13)
)
Expand Down
Loading

0 comments on commit 2a9b2f4

Please sign in to comment.