This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:iot-open:remotelab:sut:generalpurpose3 [2020/04/28 16:41] – pczekalski | en:iot-open:remotelab:sut:generalpurpose3 [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== VREL #8 through #11: General Purpose IoT Laboratory with air chamber for pressure monitoring ====== | ||
| + | The laboratory is located at Silesian University of Technology, Gliwice, Poland, Akademicka 16, room 316 | ||
| + | There are four nodes of this kind: Node 8,9,10 and 11. Nodes may look different, in particular, nodes 8 and 10 are a mirror to the 9 and 11. | ||
| + | |||
| + | ===== Introduction | ||
| + | The lab consists of a set of devices presenting various sensors and actuators. Each laboratory is independent of the physical point of view, however, using a combination of different devices connected via the network is advised. Note, you may also use other nodes, 1 through 7, and external services. Each node contains a yellow air chamber with a pressure sensor inside it and a DC fan, able to increase air pressure in the chamber, when on. An airflow limiter located by the other side, opposite to the fan, limits airflow running out of the chamber. | ||
| + | |||
| + | ===== Prerequisites ===== | ||
| + | The user needs to know: | ||
| + | * physical effect of the airflow and air pressure phenomena, | ||
| + | * PWM control principals. | ||
| + | |||
| + | ===== Sensors ===== | ||
| + | Each node contains the following set of sensors: | ||
| + | * DHT sensor measuring temperature and humidity DHT11, connected to the D4/GPIO2. | ||
| + | * Bosch BMP280 air pressure sensor, reporting absolute air pressure measurements in Pa, located inside of the yellow air chamber (operating of the fan changes pressure reported by the sensor when the fan is off, it measures absolute air pressure - please note, the laboratory is located at the 3rd floor + base floor, so it is not a ground-level pressure). This sensor uses the I2C protocol and is connected to the D1 and D2 GPIOs (D2 is SDA, D1 is SCL). The sensor I2C address is 0x76. | ||
| + | |||
| + | ==== Technical overview of the node and air pressure chamber overview ==== | ||
| + | |||
| + | <figure fan> | ||
| + | {{: | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <figure VREL8_9_10_11> | ||
| + | {{: | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | ===== Actuators ===== | ||
| + | There are two mechanical actuators in this laboratory: | ||
| + | * Classical servo (180 degrees) controlled via pin D5 with arrow presenting its position. | ||
| + | * DC fan, located in the inlet of the air chamber, controlled with pin D8. | ||
| + | |||
| + | LCD Display is 4x20 characters. LCD is controlled via I2C extender: LCM1602. The I2C extender address is 0x3F for nodes 8 and 9 and 0x27 for nodes 10 and 11. The I2C bus is connected to the pins D1/GPIO5 and D2/GPIO4 (D1 is SCL and D2 is SDA).\\ As you do not have any access to the serial console, use LCD to visually trace the progress of your program, connection status, etc. By the LCD display, there are two LEDs that can be used to trace status. One LED is connected to the pin GPIO 16 while the other one to the GPIO pin 2. The former one (GPIO 2) is connected to the Serial Port TX as well so expect it flashing when communicating over serial protocol (i.e. flashing new firmware that is beyond the control of your code). | ||
| + | <note important> | ||
| + | <note tip> | ||
| + | <note important> | ||
| + | |||
| + | ===== Software, libraries and externals ===== | ||
| + | LCD display requires a dedicated library. Of course, you can control it on the low-level programming, | ||
| + | |||
| + | ==== LCD Display ==== | ||
| + | The LCD I2C control library can be imported to the source code via: | ||
| + | <code c> | ||
| + | #include < | ||
| + | </ | ||
| + | Then configure your LCD controller for nodes 8 and 9: | ||
| + | <code c> | ||
| + | LiquidCrystal_I2C lcd(0x3F, | ||
| + | // for a 20 chars and 4 line display | ||
| + | // Nodes 8 and 9 | ||
| + | </ | ||
| + | or for nodes 10 and 11 | ||
| + | <code c> | ||
| + | LiquidCrystal_I2C lcd(0x27F, | ||
| + | // for a 20 chars and 4 line display | ||
| + | // Nodes 10 and 11 | ||
| + | </ | ||
| + | |||
| + | ==== Servo ==== | ||
| + | The easiest way to control a servo it is using a dedicated library. Still, low-level PWM programming is possible. | ||
| + | <code c> | ||
| + | #include < | ||
| + | |||
| + | ... | ||
| + | |||
| + | #define servoPin D5 | ||
| + | </ | ||
| + | |||
| + | <code d> | ||
| + | Servo servo; | ||
| + | servo.attach(servoPin); | ||
| + | </ | ||
| + | |||
| + | ==== Fan ==== | ||
| + | Fan operation is controlled via classical PWM. We control fan using '' | ||
| + | <code c> | ||
| + | #define PWMFanPin D8 | ||
| + | | ||
| + | ... | ||
| + | | ||
| + | pinMode(PWMFanPin, | ||
| + | analogWriteFreq(250); | ||
| + | analogWrite(PWMFanPin, | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | ===== Communication ===== | ||
| + | You can connect your ESP8266 microcontroller via its integrated WiFi interface to the separated IoT network. Then you can communicate with other nodes and players, already connected devices and even provide some information to the cloud. In details, there is a dedicated MQTT broker waiting for you. You can also set up your soft Access Point and connect another node directly to yours. | ||
| + | |||
| + | The communication among the devices can be done using MQTT messages, exchanging data among other nodes (M2M) and you can even push them to the Internet via MQTT broker. | ||
| + | |||
| + | Using your Node, you can access it and publish/ | ||
| + | * SSID: internal.IOT | ||
| + | * Passkey: IoTlab32768 | ||
| + | * Setup your microcontroller for DHCP, to automatically obtain an IP address, your ESP will obtain the address from the 192.168.90.X pool. | ||
| + | * MQTT server is available under the fixed address: 192.168.90.5, | ||
| + | * User: vrel | ||
| + | * Password: vrel2018 | ||
| + | |||
| + | The same MQTT server/ | ||
| + | |||
| + | ===== Limits ===== | ||
| + | At the same time, only one user can be programming the controller, although analysing the signal by others (unlimited number) the user has sense. ode does not require physical human interaction and is supposed to work continuously, | ||
| + | |||
| + | ===== Support ===== | ||
| + | In case the LCD display hangs and you are sure that your code should work but it does not, it may be the case the I2C bus is stuck and hang the I2C to LCD controller converter.\\ | ||
| + | In this case, please use the following code to reset the I2C bus (you can embed it to your source code or run separately, then run your original code, again). Mind to use appropriate I2C address, regarding the node booked (nodes 8 and 9 are using 0x3F, nodes 10 and 11 use 0x27): | ||
| + | <code c> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | LiquidCrystal_I2C lcd(0x3F, | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | pinMode(4, | ||
| + | pinMode(5, OUTPUT); | ||
| + | digitalWrite(4, | ||
| + | digitalWrite(5, | ||
| + | delay(2000); | ||
| + | pinMode(5, INPUT); | ||
| + | pinMode(4, INPUT); | ||
| + | delay(2050); | ||
| + | lcd.init(D2, | ||
| + | lcd.backlight(); | ||
| + | lcd.home(); | ||
| + | lcd.print(" | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | Finally, you should see Hello World message on the LCD and I2C bus should be recovered now. | ||