Lorapromini - ein Lorawan -Knoten mit geringer Leistung
Ein Lorawan -Sensorknoten, basierend auf ATMEGA328P MCU (Arduino Pro Mini) und RFM95W/SX1276 LORA -Transceiver.

Das Modul kann verwendet werden:
- Sammeln Sie verschiedene Klimawerte mit Umgebungssensoren. Siehe Umweltsensor (Wetter/Klima)
- Sagen Sie, ob der Briefträger neue Briefe in Ihre Mailbox gesteckt hat. Siehe Mailbox Monitor
- Benachrichtigen Sie, ob jemand die Türklingel anrief
- Handeln Sie einen drahlosen Knopf
- Und noch viel mehr ...
Merkmale
- Deep Sleep MCU und Sensoren zwischen Datenübertragungen
- Zwei Interrupt -Eingänge könnten verwenden, um die MCU und Sensoren aus dem tiefen Schlaf aufzuwecken
- Bestätigen Sie und unbestätigte Daten nach oben
- Ultra niedriger Stromverbrauch. Unter 10 μA mit allen Merkmalen und Sensoren
- Leistungseingang 3.5-6V:
- Batterie (Li-Ion oder Li-Socl2 funktioniert einwandfrei)
- Batterie mit Solarladegerät
- Sensorunterstützung
- Bosch BME280 (Luftfeuchtigkeit, Barometriedruck und Umgebungstemperatur)
- Maxim DS18B20 (+)/DS18S20 (+)/DS1822 1-Draht-Temperatursensor
Warnung
Lorapromini kümmert sich nicht um die Einhaltung der Einschränkung der Arbeitszyklus. Bitte wählen Sie nur Übertragungsintervalle, die innerhalb der gesetzlichen Grenzen liegen (1%/0,1%). Bitte beachten Sie auch, dass die Interrupt -Eingänge zusätzliche Übertragungen verursachen können, wenn diese Funktion aktiviert ist.
PCB -Bestellung
☝️ Ich habe noch ein paar PCBs übrig. Wenn Sie interessiert sind, kontaktieren Sie mich bitte. Kontaktdaten finden Sie hier: https://github.com/foorschtbar oder besuchen Sie meinen Tindie Store:
Beispielanwendungen
Umweltsensor (Wetter/Klima)
- Download Strahlungsschild STL
- Kaufen Sie wasserdichtes LED -Sonnenlicht

Mailbox -Monitor
- Download Case STL
- Kaufen Sie normalerweise geöffnete Schilfschalter



Weitere Bilder


Die Dinge stapeln Konfiguration
- Lorawan Version
MAC V1.0.3
Wie man benutzt
- Herstellen Sie die PCB. Hier finden Sie die Gerber -Dateien
- Montieren Sie die PCB. Hier finden Sie die Materialrechnung (BOM)
- Achtung: Die aktuelle Version (v3.1) des PCB hat keinen ISP -Header! Eine vorgebrannte ATMEGA328P muss installiert werden. Ich habe einen von einem Arduino Pro Mini Board (3,3 V 8 MHz) bekommen, weil ein vollständig zusammengebauter Arduino billiger ist als ein einzelner Chip
- Flash -Konfigurationsfirmware (siehe Flash)
- Starten Sie die Spannungskalibrierung vom Menü vom Menü
- Konfigurations Builder Configuration Builder starten
- Messen Sie die Spannung mit einem Multimeter
- Multimeterspannung und den analogen Wert im VPB-Rechner (VPB) einfügen, um den VPB-Faktor zu erhalten.
- Wenn Sie über eine einstellbare Stromversorgung verfügen, versuchen Sie verschiedene Spannungen, um den besten Faktor zu finden. Warnung: Die maximale Spannung beträgt 6 Volt
- Füllen Sie die anderen Felder wie Aktivierungsmethode, Sitzungsschlüssel und EUIS aus
- Schreiben Sie die Konfiguration mit dem Konfigurationsmenü in EEPROM
- Überprüfen Sie die schriftliche Konfiguration über das Konfigurationsmenü
- Flash -Debugg oder Firmware (siehe Flash)
- Beenden
Wie man blinkt
avrdude-F -v -c arduino -p atmega328p -P <COM PORT> -b 57600 -D -U flash:w:<FIRMWARE FILE>:i
Beispiel:
avrdude -F -v -c arduino -p atmega328p -P COM4 -b 57600 -D -U flash:w:firmware_1.0_config.hex:i
Firmware Changelog
Version 2.7
- Es wurde ein Problem beim Zurücksetzen des Interrupt -Triggers zu früh behoben.
Version 2.6
- Zweiter Versuch, die unnötige Verzögerung aufgrund der Einschränkung des Arbeitszyklus zu lösen. Der Überlauf von Timer0 friert die MCU nach rund 20 Getriebe ein.
Version 2.5
- Problem mit der Einschränkung des Arbeitszyklus festgelegt
- MCU Deepsleep Ungenauigkeit festgelegt
Version 2.4
- Ein externer Interrupt während einer Übertragung beendet das Getriebe und startet eine neue Übertragung.
- Aktivierter Link -Check -Modus
Version 2.3
Version 2.2
- Es wurde eine zusätzliche Sendungsverzögerung zwischen 0 und 20 Jahren hinzugefügt, um Überlappungen zwischen verschiedenen Knoten mit genau demselben Sendungsintervall zu vermeiden
- Einige Flash -Speicheroptimierungen
Version 2.1
- Verbesserte (DEBUG) -Protokollierung zur seriellen Ausgabe
- BME sendet -127 ° C (Link DS18x), wenn kein Sensor gefunden wurde
Version 2.0
- Wake Up TROUGH Interrupt Pins hinzugefügt
- Option zum Deaktivieren von Interrupt -Pins hinzugefügt
- Option für bestätigte Uplink hinzugefügt
- Lorawan -Daten nach oben geändert
- Hinzugefügte den Zustand der Interrupt -Stifte
- Kombinierte Major- und Minor -Versions -Byte in ein einzelnes Byte (4 Bit für Major und 4 Bit für Moll)
Version 1.1
- Nur zum Testen der CI -Pipeline
Version 1.0
PCB Changelog
Version 3.2
- C7 behoben (10UF durch 100 NF ersetzt)
Version 3.1
- Das weiße Feld hinzugefügt, um die Knoten -ID anzugeben
Version 3.0
- Arduino Pro Mini Dauther PCB entfernt
- ATMEGA328P Direkt zum Platine hinzugefügt
- Pins für nicht verwendete GPIOs hinzugefügt
- D2 und D3 mit Pulldowns und Stecker als externe Interrupts hinzugefügt (erfordern FW v2.0 oder höher)
Version 2.2
- Für die Programmierung zum Stecker zum Stecker hinzugefügt
Version 2.1
- Förderung des Steckers zur Programmierung hinzugefügt
Version 2.0
- Kleinere PCB
- Abgerundete Kanten
- Problem mit DS18X Onboard Pin Mapping behoben
Version 1.0
TTS -Nutzlastformatierer (ehemals TTN -Nutzlast -Decoder)
function decodeUplink ( input ) {
var bytes = input . bytes ;
var itrTrigger = ( bytes [ 0 ] & 0x1 ) !== 0 ; // Message was triggered from interrupt (bit 0)
var itr0 = ( bytes [ 0 ] & 0x2 ) !== 0 ; // Interrupt 0 (bit 1)
var itr1 = ( bytes [ 0 ] & 0x4 ) !== 0 ; // Interrupt 1 (bit 2)
var bat = ( bytes [ 1 ] << 8 ) | bytes [ 2 ] ; // Battery
var fwversion = ( bytes [ 3 ] >> 4 ) + "." + ( bytes [ 3 ] & 0xf ) ; // Firmware version
var temp1 = ( bytes [ 4 ] & 0x80 ? 0xffff << 16 : 0 ) | ( bytes [ 4 ] << 8 ) | bytes [ 5 ] ; // BME Temperature
var humi1 = ( bytes [ 6 ] << 8 ) | bytes [ 7 ] ; // BME Humidity
var press1 = ( bytes [ 8 ] << 8 ) | bytes [ 9 ] ; // BME Pressure
var temp2 =
( bytes [ 10 ] & 0x80 ? 0xffff << 16 : 0 ) | ( bytes [ 10 ] << 8 ) | bytes [ 11 ] ; // DS18x Temperature
var mbStatus = "UNKNOWN" ;
if ( itr0 ) {
mbStatus = "FULL" ;
} else if ( itr1 ) {
mbStatus = "EMPTY" ;
}
return {
data : {
interrupts : {
itr0 : itr0 ,
itr1 : itr1 ,
itrTrigger : itrTrigger ,
} ,
extra : {
mbStatus : mbStatus ,
mbChanged : itrTrigger ,
} ,
fwversion : fwversion ,
bme : {
temperature : temp1 / 100 ,
humidity : humi1 / 100 ,
pressure : press1 ,
} ,
ds18x : {
temperature : temp2 / 100 ,
} ,
battery : bat / 100 ,
} ,
warnings : [ ] ,
errors : [ ] ,
} ;
} Todo