Estación meteorológica en Arduino de la A a la Z. Parte 2

Continuará La parte anterior .


Tabla de contenido:



Suave Selección de componentes



La elección de hardware y software está estrechamente interconectada como "huevo y gallina". ¿Dónde comenzar, con hardware, con software? Si tiene un buen hardware, pero no tiene controladores, bibliotecas y software (IDE, utilidades para firmware, etc.), entonces es inútil, y viceversa.


Por lo tanto, le vuelvo a contar sobre la elección entre nRF24L01 + y ESP8266 para conectar sensores remotos a la unidad central.


El hecho es que el ESP8266 no es solo un estúpido adaptador WiFi, tiene a bordo un microcontrolador en potencia y capacidad de memoria superior a Arduino. Por defecto, el ESP8266 tiene firmware en forma de un conjunto de comandos AT, en cuyo caso el ESP se usa como un módem simple. Pero hay firmware más avanzado, aquí el ESP8266 puede incluso actuar como un servidor web y, por supuesto, controlar sensores como Arduino.


Sin embargo, todos estos firmwares avanzados tienen inconvenientes que no permitieron (en total con preguntas de hierro sobre las cuales ya escribí) usar ESP8266 en este proyecto:


  • todo el firmware sigue siendo muy crudo (a partir de 2016)
  • algunos listos no gratis
  • El umbral de entrada para depurar y hacer cambios es mucho más alto que el de Arduino.

Como resultado, no encontré un firmware avanzado adecuado ya hecho, y hasta ahora no estoy listo para crear el mío. El chip ESP8266 es un tema extenso e interesante.


A su vez, el firmware AT estándar también tiene desventajas:


  • todavía están húmedos (a partir de 2016)
  • No pude encontrar una biblioteca normal para que Arduino controlara el módulo ESP8266 usando comandos AT, tuve que "cultivar colectivamente".

Por otro lado, el módulo de radio nRF24L01 + es simple y directo; hay una biblioteca súper RadioHead para trabajar con él y no hay problemas de programación. La biblioteca está bien documentada, lo cual es importante.


RadioHead le permite transferir estructuras de datos (y no solo números individuales), que se implementa en este proyecto. Mirando hacia el futuro, diré que RadioHead puede transmitir datos de manera confiable , con repeticiones si no se obtiene la primera vez. La biblioteca se encarga de todas estas cosas.


Para ahorrar energía, uso la Biblioteca de baja potencia , es simple y contiene solo lo que necesita.


Aquí hay un fragmento de código:


//    2.402 GHz ( 2), 2Mbps, 0dBm rfdata.init(); //     ( ,  ) rfdata.sendtoWait((uint8_t*)&dhtData, sizeof(dhtData), SERVER_ADDRESS); //  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);` 

Eso es todo!


En el caso de usar el ESP8266 en un sensor montado en la ventana, me vería obligado a crear un punto de acceso WiFi y transferir datos de alguna manera (¿dónde está el firmware, dónde está el software?). O permita que el sensor envíe datos directamente al servidor web, y la unidad central (que en este caso deja de desempeñar el papel de "central") aprende a leer los datos desde allí para mostrarlos en el marcador.


En otras palabras, tomé el camino de una mayor autonomía de Internet WiFi y servidor PHP + MySQL. Puede comenzar a remachar la estación meteorológica ahora sin tener acceso a Internet y / o alojamiento para el servidor, en este caso no necesita ESP8266, simplemente agréguelo más tarde.


Para leer datos de sensores como DHT hay una biblioteca de sensores Adafruit DHT . Trabajar con él es simple y directo.


La biblioteca unificada Adafruit BMP085 , que requiere la biblioteca de nivel abstracto del sensor Adafruit , es adecuada para un sensor de presión.


Todas las bibliotecas tienen ejemplos de bocetos.


Eso es todo quizás con la parte teórica. “Nuestros objetivos son claros, las tareas están definidas. ¡Por trabajo, camaradas!


Unidad central Hierro


Bueno, finalmente, después de toda la conmoción, ¡procedemos a la asamblea!


Nota Si nunca antes ha recogido una estación meteorológica (¡bueno!), Entonces puede comenzar sin tener todos los detalles a la mano. Por ejemplo, puede comenzar sin tener un módulo de radio y / o ESP8266. También puede faltar el sensor de presión barométrica BMP180. Añadir más tarde. Es cierto que en este caso, tendrá que comentar independientemente en el boceto aquellas secciones del código que son responsables de interactuar con los bloques que faltan, pero esto no es tan difícil. Te mostraré cómo.


Lo principal es que al menos algo se ha reunido y ganado, entonces es más divertido continuar.


Como ya se mencionó, la unidad central se basa en el Arduino MEGA. También necesitaremos:


  • sensor de temperatura y humedad DHT11
  • sensor de presión barométrica tipo BMP180
  • Módulo WiFi ESP8266
  • Módulo de radio nRF24 de 2.4 GHz
  • Pantalla tipo LCD1604 (4 líneas de 16 caracteres cada una), puede comprar por $ 5
  • fuente de alimentación con una salida de CC de 5-12 V (solía cargar desde un móvil con una salida USB, lo cual es conveniente)
  • una placa para soldar, un soldador, colofonia, soldadura o una placa de arduino sin soldadura normal. Personalmente, soldaba por confiabilidad, porque el proyecto era claramente de larga duración y no quería sufrir debido a un cableado accidentalmente extraído de la placa de pruebas.

Puede comprar una placa de desarrollo para desoldar desde $ 1. Tome un tamaño más grande, suficiente para todas las conexiones. Y de nuevo: antes de comprar, lea la descripción, no la imagen.


Se puede comprar una tarifa sin soldadura desde $ 2. Tome un tamaño más grande, suficiente para todas las conexiones.


Los cables de conexión son de los tipos que necesitamos:


  • Dupont cable "padre-madre" (también hay "padre-padre", "madre-madre"). Este es un cable hecho de varios cables con diferentes colores de aislamiento y conectores para contactos pin para Arduino. Con estos cables, es conveniente conectar las placas y los sensores directamente al Arduino sin usar una placa de prueba.
  • Cables de conexión convencionales para una placa de prueba sin soldadura para Arduino.
  • Un montón de cables para soldar.

El primer paso fue soldar el LCD-1604. Primero solde los pines a la placa, luego los conectores a la placa de pruebas.



Vista desde abajo.



Solde en una corazonada sin cableado preliminar, por lo que no se dará ningún circuito aquí. Haz lo que sea más conveniente, no será peor. Adhiérase al principio de que el cable negro es siempre la tierra, el rojo es el "plus" de la fuente de alimentación, el resto de los colores funcionarán. Resultó así.




Para no olvidar dónde están los conectores, "pintó" secciones del tablero de al lado con un corrector blanco e hizo las inscripciones correspondientes. ¿Feo? ¡Pero práctico y rápido, es un prototipo!



Pinout y conexión


Pantalla 16 × 4 LCD1604


Para obtener más información sobre la pantalla y trabajar con ella, busque en Google "Trabajar con pantallas LCD de caracteres basadas en HD44780". Tenga en cuenta que debe considerar cuidadosamente la polaridad de la fuente de alimentación al indicador LCD y que el voltaje de la fuente de alimentación está en el rango + 4.5 ... 5.5 V. ¡La actitud desatendida a esto puede conducir a la falla del indicador!


Pin LCD 1604Arduino MEGAArduino unoDescripción
VssGNDGNDGND
Vdd5 V5 V4.7 - 5.3V
RS224 4Un nivel alto significa que la señal en las salidas DB0-DB7 son datos, un nivel bajo significa un comando
RwGNDGNDDetermina la dirección de los datos (lectura / escritura). Dado que la operación de lectura de datos de un indicador generalmente no se reclama, es posible establecer un nivel bajo constantemente en esta entrada
E235 5Un pulso con una duración de al menos 500 ms en este pin determina la señal para leer / escribir datos de los pines DB0-DB7, RS y WR
DB4248Datos entrantes / salientes
DB5259 9
DB62610
DB72711
LED A +Resistencia + 5V o 220 Ohm → + 5VLED-A
LED B-GND
V0GND o recortadora de 10kΩ

La inicialización del software se verá así:


 // Arduino MEGA LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Arduino UNO LiquidCrystal lcd(4, 5, 8, 9, 10, 11); 

Temperatura, humedad DHT11


Conexión de un sensor de temperatura y humedad DHT11 (SainSmart). Coloque el sensor boca arriba, los cables se describirán de izquierda a derecha.


DHT11Mega Arduino
DATOSPin digital 2 (PWM) (ver DHTPIN a continuación)
Vcc3.3-5 V (se recomiendan 5 V; mejor potencia externa)
GNDGND

Inicialización de software


 #define DHTPIN 2 //   Digital pin 2 (PWM) #define DHTTYPE DHT11 // . DHT.h //  DHT dht(DHTPIN, DHTTYPE); 

Barómetro BMP180


Conexión del sensor de presión atmosférica BMP180 (barómetro) + temperatura a través de la interfaz I2C / TWI.


BMP180Mega Arduino
Vccno conectado
GNDGND
SCL21 (SCL)
SDA20 (SDA)
3,33,3 V

Para UNO: A4 (SDA), A5 (SCL).


 //  Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID 

nRF24L01 +


Breves características:


  • Rango de frecuencia 2.401 - 2.4835 GHz
  • 126 canales. El canal cero comienza a 2400 MHz y luego con un paso de 1 MHz, por ejemplo, el canal 70 se encuentra a 2470 MHz, respectivamente. Al configurar la velocidad de transmisión de 2Mbps, el ancho del canal es de 2 MHz
  • Fuente de alimentación 1.9 - 3.6 V (se recomiendan 3.3 V)

Aquí está el pinout del módulo.


Pinout nRF2401L +


Algunos aconsejan soldar inmediatamente un condensador cerámico de 100 nF (1 µF, 10 µF posible) a los cables de alimentación de RF para evitar el ruido eléctrico.


Pinout nRF24L01 + (mira en la parte superior de la placa donde está el chip, los pines deben estar en la parte inferior):


pin 2 3.3Vpin 4 CSNpin 6 MOSIpin 8 IRQ
pin 1 GNDpin 3 CEpin 5 SCKpin 7 MISO

Conexión para estación meteorológica:


Mega ArduinonRF24L01 +
3,3 VVCC pin 2 (mejor alimentación externa)
pin D8Pin CE 3 (habilitación de chip)
Pin SS D53CSN pin 4 (selección de chip en)
SCK pin D52SCK pin 5 (reloj SPI)
MOSI pin D51Pin 6 SDI (entrada de datos SPI)
Pin MISO D50Pin SDO 7 (salida de datos SPI)
IRQ pin 8 (salida de interrupción) no conectado
GNDGND pin 1 (tierra adentro)

La programación del módulo de radio se describirá en detalle en la parte del software.


ESP8266


Pinout ESP8266 (mira en la parte superior del tablero donde están las fichas, los pines deben estar en la parte inferior):


GNDGPIO2GPIO0Rx
TXCH_PDRESETVcc

Conexión del ESP8266 para una estación meteorológica:


ESP8266Mega Arduino
TX10 pines (SoftwareSerial RX)
Rx11 pines (SoftwareSerial TX)
Vcc3,3 V
GNDGND
CH_PDVía resistencia de 10K a 3.3V Arduino
GPI0Opcional Vía resistencia de 10K a 3.3V Arduino
GPI2Opcional Vía resistencia de 10K a 3.3V Arduino

KDPV


Conjunto de unidad central. Corté la "placa base" de una caja de cartón debajo de mis zapatos y atornillé el resto con 3 tornillos.


Conjunto de unidad central


Como puede ver en este lugar, toda la comida proviene de los pines Arduino, es decir, nada va directamente a la fuente de alimentación, y hasta ahora hay suficiente energía.


Como todo No he olvidado nada.


Soldar, conectar. En la siguiente parte, se dará un boceto de trabajo para la unidad central y nuestra estación meteorológica ya mostrará algo.


Source: https://habr.com/ru/post/es425927/


All Articles