DIY LoRa Board V1
Nach mehreren fertigen LoRa Modulen habe ich ein eigenes LoRa Board entwickelt. Entstanden ist eine Platinen für bedrahtete Bauteile ganz ohne SMD.
Ausgangslage
Mein Pflichtenheft sah vor:
- Pin-Kompatibel zum LoRa Radio Board V1.
- Alle Pins sollen erreichbar sein
- ein Highside Switch um einen DC-Step Up Wandler einschalten zu können
- eine 4 - 20mA Stromschnittstelle
- Platinen Überproduktionen sollen ohne RFM Modul als "normale" Arduino Nachbauten nutzbar sein
- bedrahtete Bauteile in THT, kein SMD
- Eine Platinengröße kleiner 100x100mm, maximal zwei Layer, Befestigungsbohrungen und bastlertaugliche Beschriftungen
Umsetzung
Es ist meine erste Platine die ich vollständig mit KiCad entwickelt habe. Bisher habe ich meine Platinen mit Fritzing gemacht, darüber kann man schimpfen, aber für eine schnelles produzierbares Layout war das für mich bisher ausreichend. Dieses mal habe ich mir vorgenommen ein "echtes" PCB Programm zu verwenden. KiCad ist schon ein anderes Kaliber und die Lernkurve um Potenzen steiler. Ein einstündiges Video hat mir den Zusammenhang näher gebracht. Normalerweise gebe ich nichts auf Youtube Erklärvideos, aber da mache ich jetzt eine Ausnahme. Ich verlinke das Video bei den Links. Das "Geheimnis" am KiCad Workflow ist eigentlich nur:
- Schaltplan zeichnen,
- Bauteile benennen (Notation)
- Pfade festlegen,
- Netliste generieren,
- danach erst das Layout erstellen
- und Gerber Dateien "plotten".
Stellt man beim layouten einen Fehler im Schaltplan fest, muss man die vorhergehenden Schritte noch einmal durchgehen und im Layout die Netlist neu importieren. KiCad stellt damit die Änderungen auch im Layout zur Verfügung.
Das Pin-Layout ist ähnlich dem LoRa Radio Node V1. Im wesentlichen habe ich dessen Schaltplan als Vorlage herangezogen und soweit nachgezeichnet wie es mir gefallen hat. Danach meine gewünschten Erweiterungen vorgenommen und z.B. die fehlenden analogtauglichen Pins A2 und A3 ergänzt. Fast alle Pins stehen an 3poligen Pfostensteckern zur Verfügung. Bei D0 und D1 macht das wegen der seriellen Schnittstelle wenig Sinn, daher habe ich sie weggelassen. Zu testzwecken gibt es aber direkt beim Controller zwei Buchsenreihe mit allen verwendbaren GPIOs des Atmel AVR. Das LoRa Modul benötigt die SPI Pins und die optionale Pins können über Jumper verbunden werden. Mindestens D5 ist für LMIC notwendig. Steckbrücke nicht vergessen!
Optionales und Varianten
Die Stromversorgung ist für 3.3V ausgelegt. Daher verwende ich auch einen 8MHz Quartz. In der Arduino IDE kann man das Board ganz normal als Arduino Pro Mini 3.3V/8Mhz flashen. Lässt man das RF Modul weg, kann man auch 16MHz mit 5 Volt bestücken. Als Spannungsregler kann man TO-92 oder TO-220 Modelle verwenden, aber sie müssen die richtigen Beinchen-Reihenfolge haben. Bei Batteriebetrieb soll man zu LDO Varianten greifen, beispielsweise LP2950-33, LF33ABV oder LF33CV.
Die Batteriespannung wird über zwei 100K Widerstände gemessen (so wie auf den TTGO Boards).
Für die Antenne kann entweder eine SMA Buchse oder eine IPX/ufl Pigtail bestückt werdem. Die IPX Buchse ist eigentlich ein SMD Bauteil. Dieser IPX Stecker - man kennt ihn z.B. von GPS Modulen - ist schon sehr klein zum Löten. Aber wenn man keine SMA Buchse setzen will oder kein Kabel direkt auf der Platine verlöten will.
Der High-Side-Switch mit einem NPN und einem PNP dient dazu die volle Batteriespannung schalten zu können. Damit wird der 3.3V Spannungsregler umgangen und kann so z.B. einen einsteckbaren 12V Step-Up Wandler versorgen. Diese 12V gehen dann an einen Anschluss für einen 4-20mA Stromschnittstellensensor.
Zwei Lötjumper
- Lösen der Spannungsversorgung
- Lösen der Spannungsmessung an A?
Natürlich kann man diverse Bauteile "weglassen" sollte man diese nicht benötigen oder den ultimativen Stromsparer benötigen:
- Die LED an D13 und deren Vorwiderstand
- Die Power LED und deren Vorwiderstand
- die I2C Pullup Widerstände
- die Power Anschlüsse (Phoenix Contact, Hohlbuchse, Batteriepfosten für einen 3.7 Lion Akku Diode,...)
Bauteile und Kosten
Der Atmel AVR und kritische Bauteile in der Stromversorgung kommen von einem Versender, die LoRa Module und sonstiges Hühnerfutter vom freundlichen Chinesen. Mit Bauteilen und Platinenherstellung kommt man in etwa auf den Preis herkömmlicher LoRa Nodes mit Atmel AVR, hinzu kommt der Aufwand zum Löten. "Gespart" wird nichts gegenüber der Anschaffung eines Fertigmoduls, aber man erhält genau das was man haben will. Und ein wenig "das ist selbstgemacht" kommt halt auch dazu.
Anschlüsse und Pins
Eine 6polige Steckerleiste ermöglicht die Programmierung mit der Arduino IDE und einem FTDI Adapter. Mit dem Anschluss DTR löst die Arduino IDE den notwendigen Reset aus. Der passende Arduino Bootloader muss initial mittels ISP aufgebracht werden.
Das LoRa Modul ist nicht voll verbunden, es können aber Lötbrücken bzw. Stiftleisten aufgelötet werden um die notwendigen Verbindungen zu aktivieren:
LoRa DIO0 --> D2
LoRa DIO1 --> D5 Jumper (setzen!)
LoRa DIO2 --> D6 Jumper
LoRa DIO3 --> D7 Jumper
LoRa DIO5 --> D8 Jumper
LoRa RESET --> D9
Lora NSS --> D10
Lora SPI --> D11, D12, D13
Für den Einsatz von LoRaWAN muss zumindest die Brücke DIO1 - D5 gesetzt werden.
Ein 6poliger ISP Adapter mit der SPI Standardbelegung (D11-D13) .
Zwei 4 polige Stecker ermöglichen den Anschluss von I2C Komponenten (oder den diskreten analog Anschluss von A4/SDA und A5/SCL).
Die meisten GPIOs stehen auf separaten 3 poligen Pfostensteckern gemeinsam mit 3v3 und GND zur Verfügung. Die freien GPIO des Atmel AVR sind erreichbar.
D13 kann ganz Arduino UNO like mit einer 3mm LED verbunden werden. Diese LED flackert bei SPI Verwendung. Dies ist beim Batteriebetrieb zu beachten.
Und hier gibts noch ein Pinout Diagramm:
Software
Für TTN ist eine LMIC Library notwendig. Ich habe mich so wie bei den anderen Boards für die MCCI LoRaWan LMIC Library entschieden.
Wichtig: Im Library Unterverzeichnis project_config gibt es eine Datei lmic_project_config.h - in dieser Datei ist die zum Modul passende Frequenz zu aktivieren:
// project-specific definitions #define CFG_eu868 1 //#define CFG_us915 1 //#define CFG_au921 1 //#define CFG_as923 1 // #define LMIC_COUNTRY_CODE LMIC_COUNTRY_CODE_JP /* for as923-JP */ //#define CFG_in866 1 #define CFG_sx1276_radio 1 //#define LMIC_USE_INTERRUPTS
Das Pin Mapping im Usersketch gleicht dem LoRa Radio Node V1:
// Pin mapping for lmic const lmic_pinmap lmic_pins = { .nss = 10, .rxtx = LMIC_UNUSED_PIN, .rst = 9, .dio = {2, 5, LMIC_UNUSED_PIN}, // DIO1 is on JP1-2 and must be connected to GPIOO5 };
Bei Verwendung der seriellen Schnittstelle beachtet, dass die Schnittstellengeschwindigkeit vom Prozessortakt abhängig ist. Wegen dem Takt von 8Mhz passt die Geschwindigkeit von 115200 nicht wirklich. Lt. Internet-Rechere geht es dann eher Richtung 111000 BAUD. Eine sichere serielle Kommunikation mit dem Serial Monitor der Arduino IDE habe ich damit nicht geschafft. Bei 9600 oder 250000 funktioniert es aber einwandfrei.
Der Speicher des ATmega328p reicht gut für einen, evtl. zwei Sensoren. Es bietet sich an, eher auf SPI Sensoren (z.b. BME280) zu setzen. Aber auch einfachere I2C Sensoren (BMP180, SI7021) oder die bekannten DHT11/DHT22 können verwendet werden. Die Akkuspannung wird mit einem 100K/100K Spannungsteiler ermittelt.
Zusammenfassung
Mein DIY LoRa Board V1 verwende ich aktuell für batteriebetriebene LoRaWAN Nodes. Das Modul baut etwas größer ist aber auch für Brillenträger gut lötbar. Die Steckerpfosten machen den Anschluss von 6 Sensoren sehr einfach. Die Antenne kann mittels Pigtail oder mittels SMA Stecker aus dem Gehäuse geführt werden. Das DIY Board löste alle meine Wünsche die ich an das LoRa Radio Node V1 hatte.