Compare commits

..

11 Commits

18 changed files with 9341 additions and 5925 deletions

17
.gitmodules vendored
View File

@@ -1,24 +1,21 @@
[submodule "fw/Libs/sht4x"] [submodule "fw/Libs/sht4x"]
path = fw/Libs/sht4x path = fw/Libs/sht4x
url = gitea@veleslabs.org:veles_labs/sht4x.git url = https://gitea.veleslabs.org/veles_labs/sht4x.git
[submodule "fw/Libs/crc8"] [submodule "fw/Libs/crc8"]
path = fw/Libs/crc8 path = fw/Libs/crc8
url = gitea@veleslabs.org:veles_labs/crc8.git url = https://gitea.veleslabs.org/veles_labs/crc8.git
[submodule "fw/Libs/sgp40"] [submodule "fw/Libs/sgp40"]
path = fw/Libs/sgp40 path = fw/Libs/sgp40
url = gitea@veleslabs.org:veles_labs/sgp40.git url = https://gitea.veleslabs.org/veles_labs/sgp40.git
[submodule "fw/Libs/scd4x"] [submodule "fw/Libs/scd4x"]
path = fw/Libs/scd4x path = fw/Libs/scd4x
url = gitea@veleslabs.org:veles_labs/scd4x.git url = https://gitea.veleslabs.org/veles_labs/scd4x.git
[submodule "fw/Libs/modbus"] [submodule "fw/Libs/modbus"]
path = fw/Libs/modbus path = fw/Libs/modbus
url = gitea@veleslabs.org:veles_labs/modbus.git url = https://gitea.veleslabs.org/veles_labs/modbus.git
[submodule "fw/Libs/rgbled"] [submodule "fw/Libs/rgbled"]
path = fw/Libs/rgbled path = fw/Libs/rgbled
url = gitea@veleslabs.org:veles_labs/rgbled.git url = https://gitea.veleslabs.org/veles_labs/rgbled.git
[submodule "fw/Libs/sps30"] [submodule "fw/Libs/sps30"]
path = fw/Libs/sps30 path = fw/Libs/sps30
url = gitea@veleslabs.org:veles_labs/sps30.git url = https://gitea.veleslabs.org/veles_labs/sps30.git
[submodule "Documentation/Datasheet/fig/logo"]
path = Documentation/Datasheet/fig/logo
url = gitea@veleslabs.org:veles_labs/logos.git

View File

@@ -1,16 +0,0 @@
\BOOKMARK [1][-]{section.1}{\376\377\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s}{}% 1
\BOOKMARK [2][-]{subsection.1.1}{\376\377\000E\000l\000e\000c\000t\000r\000i\000c\000a\000l\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s}{section.1}% 2
\BOOKMARK [2][-]{subsection.1.2}{\376\377\000S\000e\000n\000s\000i\000n\000g\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s}{section.1}% 3
\BOOKMARK [2][-]{subsection.1.3}{\376\377\000I\000n\000t\000e\000r\000f\000a\000c\000e\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s}{section.1}% 4
\BOOKMARK [2][-]{subsection.1.4}{\376\377\000C\000o\000n\000n\000e\000c\000t\000o\000r\000s\000\040\000P\000i\000n\000o\000u\000t}{section.1}% 5
\BOOKMARK [3][-]{subsubsection.1.4.1}{\376\377\000M\000a\000i\000n\000\040\000C\000o\000n\000n\000e\000c\000t\000o\000r\000\040\000P\000i\000n\000o\000u\000t}{subsection.1.4}% 6
\BOOKMARK [3][-]{subsubsection.1.4.2}{\376\377\000P\000r\000o\000g\000r\000a\000m\000m\000i\000n\000g\000\040\000C\000o\000n\000n\000e\000c\000t\000o\000r\000\040\000P\000i\000n\000o\000u\000t}{subsection.1.4}% 7
\BOOKMARK [1][-]{section.2}{\376\377\000C\000o\000m\000m\000u\000n\000i\000c\000a\000t\000i\000o\000n\000\040\000S\000p\000e\000c\000i\000f\000i\000c\000a\000t\000i\000o\000n}{}% 8
\BOOKMARK [2][-]{subsection.2.1}{\376\377\000P\000h\000y\000s\000i\000c\000a\000l\000\040\000L\000a\000y\000e\000r\000\040\000-\000\040\000R\000S\0004\0008\0005}{section.2}% 9
\BOOKMARK [2][-]{subsection.2.2}{\376\377\000D\000a\000t\000a\000\040\000L\000i\000n\000k\000\040\000L\000a\000y\000e\000r\000\040\000-\000\040\000M\000o\000d\000b\000u\000s\000\040\000R\000T\000U}{section.2}% 10
\BOOKMARK [3][-]{subsubsection.2.2.1}{\376\377\000M\000o\000d\000b\000u\000s\000\040\000r\000e\000g\000i\000s\000t\000e\000r\000\040\000s\000p\000a\000c\000e}{subsection.2.2}% 11
\BOOKMARK [2][-]{subsection.2.3}{\376\377\000I\000A\000Q\0000\0001\000\040\000M\000o\000d\000b\000u\000s\000\040\000r\000e\000g\000i\000s\000t\000e\000r\000s}{section.2}% 12
\BOOKMARK [3][-]{subsubsection.2.3.1}{\376\377\000I\000n\000p\000u\000t\000\040\000r\000e\000g\000i\000s\000t\000e\000r\000s}{subsection.2.3}% 13
\BOOKMARK [3][-]{subsubsection.2.3.2}{\376\377\000H\000o\000l\000d\000i\000n\000g\000\040\000r\000e\000g\000i\000s\000t\000e\000r\000s}{subsection.2.3}% 14
\BOOKMARK [1][-]{section.3}{\376\377\000M\000e\000c\000h\000a\000n\000i\000c\000a\000l\000\040\000D\000i\000m\000e\000s\000i\000o\000n\000s}{}% 15
\BOOKMARK [1][-]{section.4}{\376\377\000S\000c\000h\000e\000m\000a\000t\000i\000c}{}% 16

View File

@@ -31,7 +31,7 @@
%\fancyfoot[LE,LO]{\leftmark} %\fancyfoot[LE,LO]{\leftmark}
%\fancyfoot[RE,RO]{\thepage} %\fancyfoot[RE,RO]{\thepage}
\fancyhead[LO]{\includegraphics[height=1.0cm]{./fig/logo/PNGs/Long_Logo_One_Line_Text/veles_labs_logo_small_letters_transparent_600x185.png}} \fancyhead[LO]{\includegraphics[height=1.0cm]{./fig/veleslabs_logo.png}}
\fancyhead[RO]{\sensor{}\\DATASHEET v. 1.0} \fancyhead[RO]{\sensor{}\\DATASHEET v. 1.0}
\fancyfoot[LO]{\leftmark} \fancyfoot[LO]{\leftmark}
\fancyfoot[RO]{\thepage} \fancyfoot[RO]{\thepage}
@@ -344,4 +344,4 @@ Writing the magic constant 0xABCD to this device will instruct the device to sof
\pagebreak \pagebreak
\section{Schematic} \section{Schematic}
\includegraphics[angle=90,origin=c,width=0.95\textwidth]{./../../PCB/Project_Outputs/Schematic/iaq_wired_sensor.pdf} \includegraphics[angle=90,origin=c,width=0.95\textwidth]{./../../PCB/Project_Outputs/Schematic/iaq_wired_sensor.pdf}
\end{document} \end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

After

Width:  |  Height:  |  Size: 672 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
{ {
"board": { "board": {
"3dviewports": [],
"design_settings": { "design_settings": {
"defaults": { "defaults": {
"board_outline_line_width": 0.049999999999999996, "board_outline_line_width": 0.049999999999999996,
@@ -135,7 +136,8 @@
"zones_allow_external_fillets": false, "zones_allow_external_fillets": false,
"zones_use_no_outline": true "zones_use_no_outline": true
}, },
"layer_presets": [] "layer_presets": [],
"viewports": []
}, },
"boards": [], "boards": [],
"cvpcb": { "cvpcb": {
@@ -319,18 +321,23 @@
"rule_severities": { "rule_severities": {
"bus_definition_conflict": "error", "bus_definition_conflict": "error",
"bus_entry_needed": "error", "bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error", "bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error", "bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error", "different_unit_footprint": "error",
"different_unit_net": "error", "different_unit_net": "error",
"duplicate_reference": "error", "duplicate_reference": "error",
"duplicate_sheet_names": "error", "duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error", "extra_units": "error",
"global_label_dangling": "warning", "global_label_dangling": "warning",
"hier_label_mismatch": "error", "hier_label_mismatch": "error",
"label_dangling": "error", "label_dangling": "error",
"lib_symbol_issues": "warning", "lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning", "multiple_net_names": "warning",
"net_not_bus_member": "warning", "net_not_bus_member": "warning",
"no_connect_connected": "warning", "no_connect_connected": "warning",
@@ -340,6 +347,7 @@
"pin_to_pin": "warning", "pin_to_pin": "warning",
"power_pin_not_driven": "error", "power_pin_not_driven": "error",
"similar_labels": "warning", "similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error", "unannotated": "error",
"unit_value_mismatch": "error", "unit_value_mismatch": "error",
"unresolved_variable": "error", "unresolved_variable": "error",
@@ -357,7 +365,7 @@
"net_settings": { "net_settings": {
"classes": [ "classes": [
{ {
"bus_width": 12.0, "bus_width": 12,
"clearance": 0.2, "clearance": 0.2,
"diff_pair_gap": 0.25, "diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25, "diff_pair_via_gap": 0.25,
@@ -371,10 +379,10 @@
"track_width": 0.25, "track_width": 0.25,
"via_diameter": 0.8, "via_diameter": 0.8,
"via_drill": 0.4, "via_drill": 0.4,
"wire_width": 6.0 "wire_width": 6
}, },
{ {
"bus_width": 12.0, "bus_width": 12,
"clearance": 0.35, "clearance": 0.35,
"diff_pair_gap": 0.25, "diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25, "diff_pair_via_gap": 0.25,
@@ -383,23 +391,33 @@
"microvia_diameter": 0.3, "microvia_diameter": 0.3,
"microvia_drill": 0.1, "microvia_drill": 0.1,
"name": "24V", "name": "24V",
"nets": [
"Net-(D2-Pad2)",
"VCC",
"VIN"
],
"pcb_color": "rgba(0, 0, 0, 0.000)", "pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)", "schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25, "track_width": 0.25,
"via_diameter": 0.8, "via_diameter": 0.8,
"via_drill": 0.4, "via_drill": 0.4,
"wire_width": 6.0 "wire_width": 6
} }
], ],
"meta": { "meta": {
"version": 2 "version": 3
}, },
"net_colors": null "net_colors": null,
"netclass_assignments": null,
"netclass_patterns": [
{
"netclass": "24V",
"pattern": "Net-(D2-Pad2)"
},
{
"netclass": "24V",
"pattern": "VCC"
},
{
"netclass": "24V",
"pattern": "VIN"
}
]
}, },
"pcbnew": { "pcbnew": {
"last_paths": { "last_paths": {
@@ -415,6 +433,8 @@
"schematic": { "schematic": {
"annotate_start_num": 0, "annotate_start_num": 0,
"drawing": { "drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0, "default_line_thickness": 6.0,
"default_text_size": 50.0, "default_text_size": 50.0,
"field_names": [], "field_names": [],
@@ -446,7 +466,11 @@
"page_layout_descr_file": "${VL_LIBS}/Sheet_Templates/VelesLabs_Kicad_Schematic_Sheet_Template.kicad_wks", "page_layout_descr_file": "${VL_LIBS}/Sheet_Templates/VelesLabs_Kicad_Schematic_Sheet_Template.kicad_wks",
"plot_directory": "Project_Outputs/Schematic/", "plot_directory": "Project_Outputs/Schematic/",
"spice_adjust_passive_values": false, "spice_adjust_passive_values": false,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"", "spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65, "subpart_first_id": 65,
"subpart_id_separator": 0 "subpart_id_separator": 0
}, },

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,6 @@
# Indoor Air Quality sensor (wired version) # Indoor Air Quality sensor IAQ01
This repository contains all CAD files needed for making a Veles IAQ01 wired sensor: This repository contains all CAD files needed for making a Veles IAQ01 wired sensor, part of a family of [Veles Smart Household](#veles-smart-household) sensors.
* Hardware: KiCAD project (schematic, PCB and exported Gerbers)
* Firmware: STM32 IDE project
* Enclosure: FreeCAD project
This sensor which is part of wider family of Veles Smart Household sensors.
## Basic properties ## Basic properties
@@ -16,6 +10,7 @@ This sensor which is part of wider family of Veles Smart Household sensors.
* Temperature * Temperature
* Relative humidity * Relative humidity
* Volatile Organic Compounds (VOC) * Volatile Organic Compounds (VOC)
* PM (particulate matter) [optional extension]
### Connectivity ### Connectivity
@@ -23,14 +18,43 @@ This sensor which is part of wider family of Veles Smart Household sensors.
### Power requirements ### Power requirements
* Input voltage: 5 - 30 V DC * Input voltage: 5 - 30 V DC
![IAQ wired sensor render](PCB/Project_Outputs/3D_MODEL/Images/iaq_wired_sensor.png) ### Status indication
Sensor has a RGB LED, which shows current air quality status on a continuos scale from red to green. Limits for this full green / full red are user adjustable. Indication can be also configured to non-continuos "semaphore" mode, using only 3 colors (green / yellow / red). Intensity of the LED can be set (or the LED can be disabled entirely).
## Where to get these sensors?
We hope to be able to be to offer you these sensors in one way or another (fully assembled or some kits with PCBs and components). In the meantime, you can build one yourselves! You will need a bit of experience with PCB ordering, soldering, and flashing the firmware on STM32. Don't worry though, none of these require deep expertise. Also a 3D printer will come in handy, if you want some of those pretty enclosures. We suggest using white PETG - this makes the LED shine nicely through the front of the enclosure.
## Project files
* [Hardware](PCB)
* Schematic and PCB ([KiCAD](https://www.kicad.org/) project) in [`PCB/iaq_wired_sensor.kicad_pro`](PCB/iaq_wired_sensor.kicad_pro)
* PCB step model in [`PCB/Project_Outputs/3D_MODEL/iaq_wired_sensor.step`](PCB/Project_Outputs/3D_MODEL/iaq_wired_sensor.step)
* Gerbers for PCB manufacturing in [`PCB/Project_Outputs/GERBERS`](PCB/Project_Outputs/GERBERS)
* Schematic exported as PDF in [`PCB/Project_Outputs/Schematic/iaq_wired_sensor.pdf`](PCB/Project_Outputs/Schematic/iaq_wired_sensor.pdf)
* Interactive HTML BOM file in [`PCB/Project_Outputs/iBOM/iaq_wired_sensor_rev1_ibom.html`](PCB/Project_Outputs/iBOM/iaq_wired_sensor_rev1_ibom.html)
* [Firmware](fw)
* This is a [STM32Cube IDE](https://www.st.com/en/development-tools/stm32cubeide.html) project
* Uses a number of git submodules - clone this repo with `--recursive` or use `git submodule update --init` to get them
* [Enclosure](Enclosure)
* [FreeCAD](https://www.freecad.org/) project in [`Enclosure/IAQ_Sensor_Enclosure.FCStd`](Enclosure/IAQ_Sensor_Enclosure.FCStd)
* STL files in [`Enclosure/STLs`](Enclosure/STLs)
* Printing tested on Prusa Mk2S and Ender 3
* [Documentation](Documentation)
* Datasheet in [`Documentation/Datasheet/IAQ_Wired_Sensor_Datasheet.pdf`](Documentation/Datasheet/IAQ_Wired_Sensor_Datasheet.pdf)
* Product flyer in [`Documentation/Product_Flyer/wired_iaq_sensor_flyer_rev1.pdf`](Documentation/Product_Flyer/wired_iaw_sensor_flyer_rev1.pdf)
## Images
<img src="Documentation/Datasheet/fig/iaq_wired_sensor.png" alt="Front view of the sensor" width="25%" height="auto"><img src="Documentation/Datasheet/fig/iaq01_isometric.png" alt="Front view of the sensor" width="25%" height="auto">
<img src="PCB/Project_Outputs/3D_MODEL/Images/iaq_wired_sensor.png" alt="IAQ wired sensor render" width="25%" height="auto"><img src="Documentation/Datasheet/fig/iaq01_exploded.png" alt="Front view of the sensor" width="25%" height="auto">
## Veles Smart Household ## Veles Smart Household
Goal of this project is to create FOSS hardware and software platform for measuring various quantities, not only related to indoor air quality: This sensor is part of Veles Smart Household. Goal of this project is to create open hardware and software platform for measuring various quantities, not only related to indoor air quality:
* temperature * temperature
* humidity * humidity
@@ -50,9 +74,17 @@ Sensors are connected either via RS-485 Modbus or wirelessly to central unit. Wi
### Other Smart Household repositories ### Other Smart Household repositories
WIP * [RHT wired sensor](https://gitea.veleslabs.org/veles_labs/rht_sensor_wired)
* [Python package](https://gitea.veleslabs.org/veles_labs/pyveles) for sensor readout and visualization (work in progress)
* Can be installed using `pip install veles`
## MODBUS Registers ## Further reading
If you need more data, check out the [datasheet](Documentation/Datasheet/IAQ_Wired_Sensor_Datasheet.pdf).
## Modbus register cheatsheet
If you're here just to see the addresses for the readout, here they are:
### Input Registers ### Input Registers

View File

@@ -1,6 +1,8 @@
# Test scripts # Test scripts
Python scripts used for sensor reading, configuring and automated testing. All scripts assume that 485 converter device file is `/dev/rs485`. ### **These are obsolete - please refer to [Python package](https://gitea.veleslabs.org/veles_labs/pyveles)**
~~Python scripts used for sensor reading, configuring and automated testing. All scripts assume that 485 converter device file is `/dev/rs485`.~~
## User scripts ## User scripts