Lorapromini - Un nœud Lorawan à faible puissance
Un nœud de capteur Lorawan, basé sur ATMEGA328P MCU (Arduino Pro Mini) et RFM95W / SX1276 LORA Transmetteur.

Le module peut être utilisé:
- Collectez diverses valeurs climatiques avec des capteurs environnementaux. Voir capteur environnemental (météo / clima)
- Dites si le facteur a mis de nouvelles lettres dans votre boîte aux lettres. Voir le moniteur de boîte aux lettres
- Informer si quelqu'un sonnait la porte
- Agir un bouton sans fil
- Et bien d'autres ...
Caractéristiques
- MCU du sommeil profond et capteurs entre les transmissions de données
- Deux entrées d'interruption pourraient utiliser pour réveiller le MCU et les capteurs du sommeil profond
- Confirmerd und non confirmé les messages de données
- Consommation d'énergie ultra faible. Sous 10 μA avec toutes les caractéristiques et capteurs
- Entrée d'alimentation 3.5-6V:
- La batterie (Li-ion ou Li-Socl2 fonctionne bien)
- Batterie avec chargeur solaire
- Support du capteur
- Bosch BME280 (humidité, pression barométrique et température ambiante)
- Maxim DS18B20 (+) / DS18S20 (+) / DS1822 Capteur de température à 1 fil
Avertissement
Lorapromini ne s'occupe pas du respect de la limitation du cycle de service. Veuillez sélectionner uniquement les intervalles de transmission qui sont dans les limites légales (1% / 0,1%). Veuillez également noter que les entrées d'interruption peuvent entraîner des transmissions supplémentaires si cette fonction est activée.
Commande de PCB
☝️ Il me reste encore quelques PCB. Si vous êtes intéressé, veuillez me contacter. Les coordonnées peuvent être trouvées ici: https://github.com/foorschtbar ou visitez mon magasin Tindie:
Exemples d'applications
Capteur environnemental (météo / clima)
- Télécharger Radiation Shield STL
- Acheter la lumière solaire à LED imperméable

Moniteur de boîte aux lettres
- Télécharger le cas STL
- Achetez des commutateurs à anche normalement ouverts



Plus de photos


La configuration de pile de choses
- Version Lorawan
MAC V1.0.3
Comment utiliser
- Fabriquer le PCB. Ici, vous trouvez les fichiers Gerber
- Assemblez le PCB. Ici, vous trouvez le Bill of Materials (Bom)
- ATTENTION: La version actuelle (v3.1) du PCB n'a pas d'en-tête ISP! Un ATMEGA328P pré-brûlé doit être installé. J'en ai obtenu un d'une carte Arduino Pro Mini (3,3 V 8 MHz), car un Arduino complètement assemblé est moins cher qu'une seule puce
- Firmware Flash Config (voir comment flash)
- Démarrer l'étalonnage de la tension à partir du menu
- Démarrer le constructeur de configuration de la configuration
- Mesurez la tension avec un multimètre
- Insérez la tension multimètre et la valeur analogique dans la calculatrice Volts-Per-Bit (VPB) pour obtenir le facteur VPB.
- Si vous avez une alimentation réglable, essayez différentes tensions pour trouver le meilleur facteur. AVERTISSEMENT: la tension maximale est de 6 volts
- Remplissez les autres champs comme la méthode d'activation, les clés de session et l'EUI
- Écrire la configuration à EEPROM à l'aide du menu de configuration
- Vérifiez la configuration écrite via le menu de configuration
- Flash Debug ou Release Firmware (voir comment flash)
- Finition
Comment flash
avrdude-F -v -c arduino -p atmega328p -P <COM PORT> -b 57600 -D -U flash:w:<FIRMWARE FILE>:i
Exemple:
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
- Correction d'un problème de réinitialisation du déclencheur d'interruption trop tôt.
Version 2.6
- Deuxième tentative de résolution du retard inutile en raison de la limitation du cycle de service. Le débordement de Timer0 gèle le MCU après environ 20 transmissions.
Version 2.5
- Correction du problème avec la limitation du cycle de service
- Indépendance de l'inexactitude du MCU en profondeur
Version 2.4
- Une interruption externe lors d'une transmission met fin à la transmission et démarre une nouvelle transmission.
- Mode de vérification des liens activés
Version 2.3
- Correction d'une faute de frappe
Version 2.2
- Un délai d'envoi supplémentaire entre 0 et 20 ans a été ajouté pour éviter les chevauchements entre différents nœuds avec exactement le même intervalle d'envoi
- Quelques optimisations de mémoire flash
Version 2.1
- Amélioration de la connexion (débogage) à la sortie en série
- BME envoie -127 ° C (lien ds18x) si aucun capteur n'a été trouvé
Version 2.0
- Ajout d'épingles d'interruption de réveil
- Option ajoutée pour désactiver les broches d'interruption
- Option ajoutée pour la liaison montante confirmée
- Message de données Lorawan modifiées
- État ajouté des broches d'interruption
- Byte de version majeure et mineure combinée en un seul octet (4 bits pour major et 4 bits pour mineur)
Version 1.1
- Seulement pour tester le pipeline CI
Version 1.0
PCB Changelog
Version 3.2
- Correction de C7 (remplacé 10uf par 100NF)
Version 3.1
- Ajout de champ blanc pour spécifier l'ID de nœud
Version 3.0
- Supprimé arduino pro mini dauther pcb
- Ajout de l'ATMEGA328P directement au PCB
- Ajout des broches pour les GPIO inutilisés
- Ajout de D2 et D3 avec des tractions et du connecteur comme interruptions externes (Besoin de FW v2.0 ou plus)
Version 2.2
- Ajout de la première broche au connecteur pour la programmation
Version 2.1
- Connecteur ajouté pour la programmation
Version 2.0
- PCB plus petit
- Bords arrondis
- Correction du problème avec la cartographie des broches à bord DS18X
Version 1.0
TTS Pay-charge Formatter (anciennement TTN Payload 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 : [ ] ,
} ;
} Faire