From 947dea78513ed516bc3864bfb64360704c57d6fb Mon Sep 17 00:00:00 2001 From: Amaro Lopes Date: Mon, 26 Jan 2026 18:24:20 -0300 Subject: [PATCH] Atividade 2 versao 1.0 --- .gitignore | 4 + .vscode/extensions.json | 11 + .vscode/settings.json | 4 + LICENSE | 21 ++ README.md | 29 +++ Relatorio/nodered.png | Bin 0 -> 58969 bytes Relatorio/relatorio.qmd | 539 +++++++++++++++++++++++++++++++++++++++ Relatorio/ubidots.png | Bin 0 -> 70437 bytes diagram.json | 551 ++++++++++++++++++++++++++++++++++++++++ platformio.ini | 15 ++ src/esp32-ntp-clock.ino | 429 +++++++++++++++++++++++++++++++ wokwi.toml | 4 + 12 files changed, 1607 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 Relatorio/nodered.png create mode 100644 Relatorio/relatorio.qmd create mode 100644 Relatorio/ubidots.png create mode 100644 diagram.json create mode 100644 platformio.ini create mode 100644 src/esp32-ntp-clock.ino create mode 100644 wokwi.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..69a755e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.pio +.vscode/launch.json +.vscode/c_cpp_properties.json +Relatorio/relatorio_files/* diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..4c3a146 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,11 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide", + "wokwi.wokwi-vscode" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..456c525 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "C_Cpp.clang_format_fallbackStyle": "WebKit", + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..620c954 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 Uri Shaked + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..324ac2a --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Atividade 1 - Amaro + +Um projeto de um ESP32 conectado a três sensores: + +- Temperatura +- Umidade +- Gás + +Para uma cozinha industrial, ativando três atuadores: + +- Um sinal sonoro para caso de vazamento de gás +- Uma coifa para vazamento de gás e diminuição da umidade ambiente +- Ar condicionado para correção da temperatura ambiente + +Use [Wokwi](https://marketplace.visualstudio.com/items?itemName=wokwi.wokwi-vscode) para simular. + +O broker utilizado está hosteado em um servidor meu, assim como o dashboard. + +## Compilando + +Utilizei o [PlatformIO](https://platformio.org). Para compilar, [instale o PlatformIO](https://docs.platformio.org/en/latest/core/installation/index.html), e execute: + +``` +pio run +``` + +## Simulação + +Para simular o projeto, instale [Wokwi for VS Code](https://marketplace.visualstudio.com/items?itemName=wokwi.wokwi-vscode). diff --git a/Relatorio/nodered.png b/Relatorio/nodered.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbb0bf93949741b2ef6a0421a7ce1720b441e88 GIT binary patch literal 58969 zcmbSzWmFtZw=R-E@DSXSV8IFQ5Q1xPcMI;WfdqGV3liMj-61e&7~I_%bhyncXMJa_ zb7kHB0YguB*RHCq&$FA5FLL5&$b`r+FfeG65+aH)FfWQ=VBiT}ApmDa7|le1UoRYm zC6!+Rhu16PVBl{8CsB1LC0kP`R|5wV7&9ANYZC@XBL@=`8^^DDL7&li1m zFfnj4x3zhzY;J7=<7i^`mWAW3g@Mgm7G~hXM-CoVHXatP>5B477?`&(k|Lj!-O>-2 zT%D9>miy06YQHPTz7|GmqjrjZKNb7sg(wX&u25BHiJF4)YaAwIf1D~hHx+D=Vuk4C zFu3=aBB__UanZ}B+pWI(!f)UxUMCA>PH1XSu07kKvLQu9}}3=7MM{3va_d3 z)tg>m{&U0}j2-U7iTrzDD~1IBbBxgBz4`a5Bqa&T_x~J>W^I2E4qbSws;Vd`D6qx& zpU;bCMnz#jp-}ZQHIDeH8%f}Kp>Yq98RfKj)r&{OJWjz<3A73&s%0hSQowhcf%bQo zd!--0d&nvI< zq$DJM!$?05ls}a(tvBhw|M&M?!xQt8M1^7h*Lf61Ka29$p)L0=;os{U(}ijOowq&r z59NR7z3zZq^zZe(TmLT$^}icH8xy%mah}(gSbljXR?|d!U85W8$zkT}bdDf-yT$}f zP{{!nAOTG(G4FC-N*Y1jknm}zCAHolmv?$xFjGkv#xGGQd3=W?e@62> zOMI&~`Kl-!Ulr9>I*vDp#bC=^it}I?K8jDK;<}F6I%{ZNd~xcsJZe6DeP37(f%$9>FEorB zZ*w4K9+4V6#5HUTm~W4%%dM-_?#ake;dE|Gf4M!6zn&ET4(zGJ5ze>hVM#A-KDom@ zio&?LYXqte=1lh!>wc)7C7gq@)y_?-{Ehsam@@KdH>d;do%KD7#kI>D2e$a}+<_5& z2Ht4*mK|pLTx1{8<9R-~U*K$Vc)>*>naB-RuI58;1Q#0#QC|$O)Qut|MR?GP&hTWo zb|1l+RmL4lo7N1)-~fD7>=u&sN*3q#;ZPl!2+svVe7CAQbIBVB^G3?GG97^sWT^0| zZTmqNWtFezE@Z-PjzI&HUEs`_c)W>HYbD zNJ_ME`sAVN?^Z$iqUU~5yw(EqQRLnXpNlo^EcsG9NLIlYq-9{K-{#%+xxU^}oFJ?1ZK(akOEdx@S-Dr|RByQSzT&mI(DMKJ}O#$nD&`{tdmi+n)zFS%a6g z$;rnq04#(FY=&nhdG;1 z?_a_^HnaCzPSEQfcoSvlJ|*0M$z$RL-G1&odNp?-^JkKdheg%*K~5c@kV_IimfQJ` z0P29`TlvZI0~D{Cq3kXlczm{OqMU2No8vwkCxRvct=I8`&2v0c%_~|DwQ~VfOLyl& zg@3r7Qipv#YuAsX>SOK|nGMz1Hql9+J|^_HAx@U$;1$5>NV6P37ej)d?&D{WX7<3g zZ=yLLm|j3z3|=JQFTIJD3_KJ z)VBM{tx3szbXJq^beYqOecy)GIHCk~%GF2aH0A;HJQciWUz-Du`-7FE3~Ug7;W+ z_Qk!%py(#PYJDY%wLYAMuq7q@4O%A4Hp$o^568x-%uipH5`*(&V=w!`7?mC-3`Bg> zu$fcqv*IeoV=uIq&54^$VoxwN24%dXHw=3Zj}muR?mr`EjBl<}%qg%}XMq?nm~g)l zC8*8m!-7g~edH+S95!@%z&^vp*=kQXxdLJKk~Jk?g=+LK5Q`TQS!R}5sDm|$HXyv! zy3U6_bB!~mETzXP;r9ikY*RHEF;(t)lbsgqgzfcxl|+FCc?_(XuQ-VGKl-=GGuN9$ zh$==bDcuvYTT%58vViALPwc3Sdcwr4OVTFy+xP=}1{r&9yxmB8EG$i1n|geJonu*+ zdOC9d8Q5p2Ow2sMB?y-0bZMQLvSV!`!ptILACKyMc84A<;Q69gqj_-P&jgnnD^@8G z0&>y=F_2=F$k-#95yFbNdYi+GncdD#`!MeKM0fwLGqMg-T^Y$^A0uLjvdf6YF!Aru zwV!uNlT{gH6l53N!JBFe7c-nD*AEZ>?qnb9x%9mc5_+R18;1M(3_HS%aNxUru* z&8fW{E6wqni}gut#D-TwvTd!g##nPd@YQ&jQ=RP~`4mETO9I4{K{Tp}D^{OPzcukf z0i9D$*yPib=>TTifEpCD>KiMc9X5jGeGFsc6RG)g``V$O3{2iP_&J#=6^%+8?HB}$ ztS~!*HOWmh5a=tlV*L#U@?&~?gho%#jYM{EjlzA=!o!s-Hr5Hv51I;_=ZGZnfu}`3 z)w>9^g(T+c?msynvPjmqza_1~aw2Xzt~Z|aS?#0mBZW^I^lic@!9(4d{M2Z^9dCPd z(aH|74Zd02*+=gA8Y9jUp24|Lu)hO zbi?Gejw4^`AGgk#FS@})uG#}m>&u$TM0IEbrx{jd@t)Hm)%}Xmn?2@0U$Q%=^ATh{ znS35lTLzxvHiKb*ZVebTAV}5~PVm$(Ta-8R4RUYaa}&u}nYNqb8NpU%5%+uS>xd8$5!a2=W5tlj!N*u}Uk z#l4Ya>14H>-i{Ox89@V;PJ6H6slJFbxExSQftd*85!?3^?P zVYqU4Zbn2kASq6~NgE))O1G~{cTPRMyr$X-ilvg_wxGSKOK$zV$L~RSfG+0fuwy%V z>p?H?d};(4jk(ROB3~$teBS2t$(}^9;L~vNuf-QVteX&r)5+CW&nc%LJx{`UDhBtqhH(5Y4$Sw?#IyD3rD|0ti zTau{Y4=M+$&1m@J;*LHhhVp_eE=(r3J_A3No>ydy-25f$c4qJCUT+wdpz*`a8Fz<3 zdM65|Zggcl!NmmjU7YU`uUh4udbxcX=0Ip4kwn96f%)gGL)+-g%*+~u4OCxS{(h6J zI<@Sx#JC=m0ak}i&r#l07)#0GWd~mGEYBnY%YrjEQLcI`BrO!nmS<(8aVp0sDn;9a zNJ#T-;4xpe$IuJJdJ=v?7{HCtzlk?WF22msYkA|BQp``b$`Q38LvW28CU1gbqF8^n z2YMPf*zjHZ-eB9sIZ)ewzSvt8?r}!4O+3Nj#PWvQX%!Vcj`Pze-Q>!tMtL&fGU}VP z1T_tZb1yXW`+~CvqA-a|ivf6kTAghwyhF|Kcm^3?M{K6Z)c(xFfYRCxVy;Yt`nSWn zTu-{dHrl*L8Y#FKF^6A4_ueH;9{4(d-Ae+g9S9RioJbznBSwnB+A#s;NV6)cp3O$v zE+nMhN)g_h3XGhlnAzDbC*2EAj9Id{yR92k*I4!yTd{7Fq$fY|Y^W9JQt*xF>cI|Z zd2XLx?mJ`zM8=ONdP_r zn(KAK9qrbhipmTI6&a^W{@{pJs>P6W%qF zJd^jg#E9+5Cg)e562C%quTkh+d6C?=-92e&)7Z4aPy1T5!lxeV4?3&Mvhg3b#H}`sYOUCQ$d#3J zL+j`@t}yJ|%Lwi#7)*IId=? zb)Qbj?@aZFXJ+<5nq{&8M>v8d52*apOTP6dgR54`2NJz+h(Xss#RNEmo}q zD{aR_`rvmmRmW;8>dYq(cDfa$Cy2u6%Pl#O+IG$E&rjczczc=`o;E;C1=ah;qQ_qD z$d-6*GN3n4q!#D-S47epk4ImcRd`13H1s~2ALFK9k!?m~`H-I%eK~LV;SO8grx-wO zO26Uz`8eBSIBWEFn^oZ62J`;08=udBvZViqk|F_6!whQyIP4qCik3yd)cbMB`uJc1AU7Uy?Y)DT8NIxNDbu;PHOZki^q_ZmyI}lpuW7 zqH8>y>W*r;ZV&y^pyhV8LlC~Z@VbG76(4ekFOXjUa>9m;`QU2NAtH`ZQ4h9XtDw5= z*5Z~;x2XYkI|C)11BCuYSI^q zbGY0_)UxEWbXTWYHeIR_S6RvI9}rNX)d6JqSB#u4v~VMjz*s;TZPvZ56&c!IUj7-m zXY!|b3YY!5Gg=|b!jX&1;e6NeQVRi>UA8|hW=vYJK<{5@PYj$!mEjL*xZ*Ey+P7ROY{d>lo zl)teThY0l|H!U^7nv@hQ!L^H`ju`D06wG&-$;=xoH!gn=NsXa%dZ$b0AmwBHPr*q; zGonD=ANJvI^eV=(hghiZT+T(@nwn=UgxrV8_gE@V=2mEwO0Rh4a>s5uD_z1d+RF_~ zYy5>$i4+pHQb;hiyyh|W-*N}CrV5%q`mxT~ADhKdn+&^Q`hFlSY@*2b!U~RjbiHsS zPe@K?OT9_z6+sR>D8|La#8dbOE1L@rsNFP%86`C_{|$Aqx%x8Hj&pTwM*8~knz{Bp z!+A6Xwf4<`ngM_g(Y7MnSKY{f5xfi6TKKS;&>4#^Lym8l6Yai+Mbp`gP*tpYmWW?u zZr^>c3u*tlmo4sZz^oii>-DF6DaD_2N^GMZlak*YRaDtnONeX(u|BCs zD7aPpl9&kqI+6bm&{iH%d-QPGbsg4W8)dQ>yJywngA)=gfmyKS^VebnKmPwgHsoFl z20{!ZCR%3z5Lx^3&mO!~tTB~UOM=19-~nQb-M>l!hlGOScuP-JG9#s~o-A$o8Z)N* zUn!9(xVVzP!6UwT^TuJRhZeX*LgE!XB06yTruiCB%(+Bd`@hgdiEl3v5kU>MD_$fm zRtqeNOnR9WMg!plj_f8OKy@SYytB_{m>L=!{FaaJp?Y9z2Oo$B?&eep!N%^_3ucm% zl1;n!Z5~&-N`-QBRk@ZYS-wyMaHGAOo7-s@B3WZIG2oTcR7FHybc&iO{|E{)BO!nP zzAp~2u_47WO?E{kC0H)IRT%W3fX+@KsYH4tzmAR$x)Hk9K|SC43~4wXfw94_7;%+p zvH|;kUX}$^Qa-MO`<%}~Z^+29jD9CaM|Z~4D9yKf^M-_k#M7xowj4KyH9H@`Robly zzb7Xz(rMwqp;gvD`crpvb934Wj}e`mEMaU+VQy|-YcUh*dD4dG*B6Gz>UnKtG5zb4 zogH%;r)|G63nnS4+|GDL&3;H|sNrO;XgZfY90mpkA=_7>C{q5@)6><}u7Ge7Ufh}m znU!|$6kbgip<_J|QgoK&>5p-5O%FwwEG-PxZ4 zVDLX0zEDt57|jyQqLNKDZiC((R5%{ae0; zz~&kNIJVVdJ;MOE=k?(`0f9`_GR>Iy_}(Z%=wKik5sZ3^3j-FF%xZ54*7qMj6mo=L z0v9CUFq=5=WXNO*WLV4;EBq8ggNY;)l>7SigHDS}zGNH~v4B@{Mf+VSFx+cwY>_xB zSwBa43h+{@2KcM5|O9z5UcX#(I42%J0RJA0)3yS)gKCi;V)tp{Bk25k8 z6B7a|zF(hVmodvn+hsmnCf!jidA=Cu(xfCjrj7>|fEQ@J+b_v0C^#P^kNTY}iX!lE z`nleAWxOi@vBp%tt116`00LUKG0U10k4EiR%ns-s9fM}AKCo6WPRHPsdh5k?J1)1Y z8MTEfBSi5?;vt2d&TsHVY8AS(6Fq@wJr;HAPCP?{gR8rfKZ&^=zVmxt|E@NX2E+~y z4ed6qnQU=AK`G}Ie5W!~tU|zHr9NBb(vpG8pb4|n-R7`0e72ROS8X&92?w@+uBi2N z*Oay`n>ZyWe5`z+k2rwAMLpYBQgSjrOl)i{KJbJ{h+H~X%*GCIw?WOq>Gk!vN10;2 z6pWjP2b}SdcLEJFGqa@-AwK>qAuB7Z$aY`ot(gz>b_eB-QKy;B&PIsn&70V(Owb+$ z3rj4Z%72;OXtlR2%W@mwp8PpF$oV3FWFZD{D)Zl;|e&; zJL|FT@F_A?rl52KTNMaWOhELd&|~40g`AzOO^TC^o#`IK8tW1T>DjQJVNuKJH!N0Z zmJ#!Nu!(2E!om^@`lO?i@N6biZrO4D`jP`@Z*Q;RY`Z!{wE`h-?)tN5Isi~96KBCPRNSy1mKRC)5aQGS{(PMX`s-1 z+hwndvC?Q-&O#7UI?-l9VPOs6F94xZHj@4PU{<*KadaemvfNgr-NXXJ>w0Y5 zA5L(%*uXSU`b&D~aBj~j7I1z25kx3%oPe9Qk!gZ28qH#TvL2=THB9;?Wo(U~a5j@pt>nP%ND#e8JT+0q>2q1am6 z6#+}V!e>?9+Ukp?lvb}XMUyLx17y>z{c7JuUvT*Bp#+~EdVr}W^Luij5pm=J=Kd_- zK{B9Plljtksuj8!bqb!q6p+x+@;?WmKLE=kA}TrwXuG1KBBT1BMdv@&v$`AS-mHNERHqdeTsEx{nI=fQHRbQ z)DUQ^`qqRa%eOu5uetUpw`-g9Fr)hWOVt=|#lmH@0#ixlu=a?M!irhfKU?n`&E!wx zao%S(9(=8qME+j!?SG}L;v3XW1Y798SbAs*K|}HUXW@}NV>#b1rRx=j1|rnb;tOoi z^hQk`Rn-%`3lg4(BU;?*m)j0&2ZGxB_ngG{iF04SvYI@S-M6-n3ShiW+1{6`AR#wr z>R{9!E5B)l2sSgar{9q^BrzK}SoZ!Za~E_Yw;%ufLPJKKmT%}B<(w#>5ohAfx=zHh z-pSj181F@2GC7hcfSzDI@j+SagQIO(8h1R9JHILZnS}NW2AwkR0{F<+a7^LS^5~zU zzHt8ru>ZKk`{!&NEJCm1!D=Jsy*_RYE7E@lasT>Y@6it7fGG1pZu5pTV{q~G7`%HN zNi&C{GvoGZT~KVyoSZ7*R!~D*allqHf#Qy^}0STCZIEs8xpj;k_M? zT{68oGP&BI1QmfiUxiwuXizu`=Qf*&}>HbJwS9UX(O_)e| zBWo9B!ijK(;07c`sCq$nI)x}b2KD0MKY^fnBFKf6+4)d!rZ2>EUkt6;F`LLg;Jj2$ z5m+Jp{8RDxvP9#}TgwGKQ^6l3sN zvj5Kg`r5_&iICI{`k z{qaZP=9>N%pJ!tYL@s32T4Lgnk%~r|jB?MjD1eZ^w^9yk+Z(FF5Dl|gw z&H7;xkbGrL2Qwmm?e2U_^OW=_axod4exUEF`BLMFv44CQGf2Xnw47fWV*E*yi=X#y z3l(aeolo{}FTmk|`n8MTpN7_mS!e%Kq|#3%h${wLMZSgF+%6Xijbu;~K_gq!IP)}u zC2-p6y_rKdjOX;LeGgMc$UVeW@rj$t`*+-aJ7s0ly<*cidJf-f|K4eGJO$b+F3Xq)Al%yVEV_MMv5TmJ>bt3B<)KD29(hUwIF{j-d2 zRp4OE7}sMDNaVYdp|+SF)u`TJZ@Z6`o9|m&dftwq1fz);neN`y5qb}S3m`$$FJrzp zr7K4dX5$3ma96fFClE4|!<viT-*tIf!>p!n%Me9>7SRwf zi`%YT-9bVva*Ym&LSOyqb$DxBw2+bM?235{inN+b=>9YKGVl9U-cP;j;NhY6iTf$< zO&%!>{E5<+7s+?37~rHf;Vgp-39h-f@?H-tIR|4tYtOMR>z z$$J7Wv>l^aeTY%5^BE%iq0@J~?v-y_vf8u@#40ib|w-yB4l097;1Ic zd0pJM_0tzi2*J~O>DF=>Wx6`Og!)bb8K=2@m<}s5KY>^1g>~scvdao1RFbW6W+iDV zzqKl*)GZ15{qF&(%n+$%*T5RY;qxpKEcZrmQ|&<06W4h3J;B8>;=@YE2xU(iRrTcn z-a^wHx-( z`krF@%OonVnv1tC!v+z4} zq=d_ks3&|02wF^fCvf*rU3zEGuy#L|B|_pd)qdABSDG{S_3-ut)>IJgp)|f26i%4( zQzDHFDnNzKQ+)(;JR7^rUy`0xZCfVV5%h<7y{YaYlk0ov?Ow+lzaPV8i;4_%h%5@l zi@c);2>9l`q{}16I=(gQEzT4K@38xgi7dbJ{)y)%^GPnb-U_?*hD97QL$7p&$Z<@h zbtR$(RNwAT2$zxaBY7Kf2p)NbG&?iol|>or3VSZ^68r6i9S$^uOnZs{z=(?mv-6=1);vy6noZmi6#!eEj4qmG%jU2=6*KQ5J(;wfZ2x zOZ|dX5?E--7$sMx=ukZQlui#<-V=4wejM)7mg<-G9x=S?#vz&4nL1JN?d@yjLJ|o7 z6V1W8^s1`FhNt5f4gYG_UB02=hLb{#mx5j+GlfPSNh!7bBolDqxeRs9AaW-}L1--s z;-1xwIjPy=b+%*Y57ENI9roZZXNt-7dL)dmDG!`Jb&Q< zEnHCxUTda%9Gq5oZMFo&4<;{MIX?tc=uxIRd52HdpzEIxy9*yjfJo30#j#i&I9>Y2 z3%KohfM9cPzLym&kuzdP_+VdrYTB*)3^^$tiinG|x}B~92!_X%1(i&)T?E}5%%*m5 zYn#0*#tw)a&qm7H*vdqCqa@AB);N9LSmyd|*W0yebH&m2o7-fR>5idz@5a>LsWpCr z*56UoTvNTZR6lOqYMs&BNo-NPV``WD@_XD&ZwX^dSb&bZyVz$JGW zVz`hu@JlUP%eY7uLi+A7_#s4xrsDzx#{YBKn9&JlU*!CFy)2#_>w~dkBOt0h`mX-* z4y(eI(Yq^qiR+QIB4R~&4_S3P(j#sq7Ws?302jnt?CD-$)h-R=_UbFKS=6y{&jUtd z!*E{`r|EbBt&?1#KMmk0g@KeFySc+i|Bua$xgfEmlQTQs`T6!0gn& z3^Q97{_rQ|%cI`Fxs--dUch{cGl4b9hwbR0(PJqgzydU zBh35&$l~b)t&lgAUqJ;CB_ppf?Fk%z+!F|_!XFbmAi~R`t}SnyNIrPKCl`N`y8UQ7 z`Qa(5r$qu0-G^v0A}CHT$MwjG!xw^JGt#!-xGsA>@}{DDr$%{H7=PWJfu2L#&NZ)oS>MIju4Kym{B~7I zsyi_4y1a1@LI+gF z&{Xg*MIIrlR=QiEXtwhtV923ux8a=_Pc5*~Z@tGq`}62^+a<~iFB5+Np;`|aI_0P(g#ofTdhtp*ZENA-6c#LR-lu!-OIj|d_WHi0t$ z{j?WPK>PzyBgM1vbtp`CKq=k}MUUbvfWaR5KUL^NeJ6#hXE>*7m-$hiztCl@Fl=6G ze|-Qp_M`i`ai-fkQn6~86aan(8hj~MrV)!E6b10Z-9L47_mGnvpjFCr_jitRsrpB8 zA^^%T0QR``a!Q(lnp*F*q6z><43PN}`?)T=2L%VeO69a2-=8T-;jkuzM?lR6kjYZr zw$!bWBvy~huP^}OCnqEXV=^4S_6+lq31;qOdPWW>plm$750+49Fb7c;tCXl_JK7wd z#dW1rG%KFS~hQzw=_YCDF%AiPtkhC$>wwuM(t?t;~oJlj?43!{%DRu@5-t; zbeTi7{;YRm0t0{~>2alJWoSQuD=pURSz%C1iPXPZ>!Qs#niub^hbl5;doULMns($r zXavtcgSvw%_eVEd@U(umuHEJH{tX>2N18lNyFzsqGt4P6FAxwEo1M%7uuMc-n;4iZ zwQ5NM0M|H-Ff>#e^aK*`oGdm(4Gu~?FDD=0xo#YQbVmY+sA1LXH*dND+o@hI0Whbr zRQ4Xjs^87dmH@UVs`;lWLs0nhXBq&|riu#zx}1ME+8bRTE-0ObVFT1_ufLfeTyb~w z+#wa<5ynh6QV7*Lj5kvVk2Q{TN`dsgscARM3;@#1=DLG?b-a1e3iKY@Ff@Bu(HOn> zsi*=I8MJgyJphS)e0(%U&SBu-;kjK7)gz67urAc$^Y}rn94vZ&4Pcjd%VT2^d3hI6 zlIIr}BXNS9~!MW^jIvCTNzix%O2;ZIUh-lw5;_5%RG zCfFA*Uf2OZJBluoMm2@mL}nj=Orhycq;tpN&;pF)vy?!C_*Zb_8GDiSdT+?(?qtCB zSeg+_$_)T}RY(c~5C{SmEW~@Hd>mH_Zz$i#fx%eM$E-@-&ee4Q1d8k0%C+Z_K0W$2 zJyIJD`m7?w+^CJ5nVJ9mwPBTZ+}M;T(0uw#&)uGXI&jo;C#XRZvl_f_1J7RhCz>G7 zx*p7yrSQ440BVp6^sD#w_Uhv!B+#mK&&?&>UhIGXNDiHts}n%%+yHDBHW^TSQc_Z| z^PJAh1LiE$p0|{gKUP=uWvH+wCnv2Is(-i~{n3eo0)_Jn(~7sW?oG|eO}a8o9C8in z^Z)|Cwzc)6XKj_{p1>l}&a4{~WCHnBylZXrJ)W!&inN-q!{I5`^toYON4sPY^Y z0nydU)Y#pujh5xFN6P&V zGr9|S{=4fV>3pdKm>U2YJ-fU#zBygfu;#zp{TWZI!WHGlo+86{vl`%ayOnfvd#g}w zED6}Q+6QZZ>H9G^OIO2xSssznvBhF& z1DPA~{>aKAgN6MDkVUI&YcX{S&87+fT#ez;oE3~68q?A9OOO%j6OHIKiSB`Y_)Z<5 z7*aEjsU765sUHafzxAwjuGvMWrb-D5!yzFdQBYCErl-qzc<{K~H$@Kv*#Gu+U|}Kk z^78WY02>=|b$BY*`99ei&k$MjNJPdnO^MuB(%^@LkLA1;PAlk&@0tb&^z_H1scctw zjJ~E})jmHx?KG?c#QO%|-83{b0LQcWs>q6i2-r`6ds{s|&aCTYx~DH56?o>+3jhWa z`Ns@u1$&UEMQ8Wt$~B7kN+Hmco&1%f^fTAKxt+lKYZx^J@I$Jv6Jlb%f%bX<^(Ham zNUK_~Qm4l)Rke)V@<#pzaJ_iXiTAJlm)Z;MN&xEVurWfSYyv$5rUl$IHpXCSu7B+) zL!~qu=i!K`^w%vIz%9>*;#UVm6=0B&m#`|=j*O5tU~eA&;pV{EWxUcv%jdU%eUi!JxeasNZ!|J_yq*xMX?`mk}s;xp+2 z5Gbaro!?#{BEoa`6pY&K8^Xo|X*1@>mSz|LX8;_6$8&Fhq)(_m{uyyl!YUGw0^Sb-!=dU`(IrEQg=zp&%E>8KW~r# za7B|l38p0+&!o4IBmG|CLc2cZ zVjMPLvdNa3c_1 z@&20vZBl*t52pXW^lFppH7@ScO7|z_$28!Tx6(15wWmi`{A`ED$2iCv#r{ggroCnzTJFxvtpn z{(cA0!n*)(1Gr09`u$qp}!~^;f%Oq+;HKV5I zEvm2o_M{C$3NSmAKn7iBIR^&>9H0e&8%U~+fi{3z>%~NQ!N>UNX=OY$p!ERo7DfOu z@gL0uG2LG_g^PE0zuL52se-}aSIEfkDJZ@JGQ(E_#Eqem(cWws5fHcE($k~L%gfhW zEv&B>KfnAVV#Ak&Qrz9s13a)X^0^ViUKMy0kk`#t=*a{A_PK5V==OCi|qM8;lPgCGkA6Z=m1PLT=8fS9v~xj zAP}TNr$LY7nfw5a_hxNvZQhCl2;1fWnM%ZIlLzqg@jx#LK=K$gEY^^gcy11260%!3 zE!3YJJpu~Dd#$PG56)iSc!bqcOM3UL6=PfI1=Ssio(p={MmXxvmZ+L1Tnw~2czJoL zH#wNh$`k{vvtpH@C=8JQhXMimVteeTbP{8!UPoqL9tF^o5nXXjr&jL8FfsuGh*ujS+6KYI<>K7TM6;1qB67%^I{lLU7Rt!ps?0lG?dv2ps5 zKAcBj9?pp46OP_ZH9s42Yc+?Mt&`%|gjb(6J->s^f|4OZt0x^;t!CAlSn|8i$T)+Z zN3lTb!g;q5BLu=KXuUZw1GPaX<&)T47*>01X`1yFKfhn`G&9HB~enjJ8q}$rD~ySko%j{1UNYTYxY8n=H?XA2J^1ku!MKO*&DFCbCX| zEKT8dqyqZr`b=vu2?>Y2Axl9(G66FXMYgkO+p%@J*7M@!%d^!048@;f5hL}UwkL=w z+#C18W$c2Xo;OPKd`TMdRK1JScO0`}Du!#?U43Mh`zM>^W__@wXhpCM;Nuf2^T(RDC8*F=?y-LwjTYvwJg#u_bnY*^9Q#M&P>QS#TBjQN4dwSMd@VbCU(Q=+13NO^o!S@aIq4R<*OgM z9}qTr=}AjBKev4nbQsKhYQJ#qK%V?>oUS{9aubP^#Lk(DxVz1gVVlsI|2X~Fmt{*-w&9sbw3j)(73{={$gvJm>H!ERW^llnG%0-M=@XRVIKOvjor$E zP2uSoQ)(B?Fbud!mun;*D%^0d}${)Jr3tZ7JEKB_d)ygL~Rynmf(??&fhjapG zDx1`-7swA^*cX@|eO_|drLa9p9n{kW5bA2!Urg@2JW(U0nm`q%lB?jr{S@g(n?w^| ztcDC&ef=dNJhgSgW*;3v?3II{bx(}YDQ8QngjWmKd9-_fDN1<<+xF!};RCte>6l;h zO_E*DSPP%*y?0k)@{){iGlR+_-zlR`np}_1+F(ab_@M&%uY(ltTTR*)Gqggrl0PqQ zZ@!fKa0ZGWQ}6h*1bpwHV%;1UQ@*_D9BZTKLTh0$-bYugCc*01vP4)}2;a|dJuCYi zzigD~zz38wt1ugxeQdgclWTBtOf+ha}zp|jTEykFb?~Ko7h5r z%8tEl1%pqK|D{^fK^+bgE`PJ2YUirVf3u)$Y0v2((hp_DL(0W95thc39RH+}5;j}o4`Iml?)<+CDa_g*&GFRdWJ%pAS^h6%p7 zJ?2Y1+xky(bD*G-!vU7YfPZf{i8Z(S>6VKBglOXUx7p2m2Uthy$0U~!R`)yTWa$J9 zJ-hq*MiP?F6XAp`w?7tdi-2#UeURK--bKT|6U#BEeEqHKXB+M2sx_}d;8bGG1i}p+CE9i^+&9k#i)(lweb<7wkrnst^ z%p-g`ufOHKa(IofeR>a{BBanIX684y(Y)=S(zMgQ0^zMNbsO8cXcClNf5huw?YOq@ ze_{{u--nK*6HBuD`hJR-&E`qE^jF+IVX~``2HeEDWa=?Bnr@%6pw5E4hzKDgUTtH< z!U;6t+b5x{op~1Dm%a_)u@=^ooG^l2feiVbNHfT>ReDEQ`JICqt)pJ@L{6rBjmZ#O zvpS5;YHEMLE{DlRMHhuK30FH@^FK8v&^yqqeVA|;;=nc%ehtuRKbZa(J#Yp6N*p(JV6 z1>W5qJZfGRcgo9#LsR*jFo7HddY!`aiXglx+dDnULq5NziKoH3r-mO|x#JHRl_S4X ziY~V8PPTC0Ms}2?jht+|Y)wA3b>`uU;s4G=#BH01&$?ESk{^vf8#xoZ^tGcp;p6yz zPHzn}=A%A(!f~`+X+#kbu2OghJAdS&YO352487GzvG-qTu>L+|T+A|7(Jpffy!L(q z;4^5Mo|8_`N&1vuN=xq~`ROK!(JR@{qihG*1Nk^vxD4;UBM?bAD%TXdO}cv3k(5I_ z7I&?R+oyLz9K#+ zZm4}=2cI2qWZEZ9tS-bsM(Rtq!u+LgH~e0mJNjgF&oV$Q2%kEvtsWPK{9Me^nDuje zlB=BDeLhP2dW4tj$j)4BdVD3{RxVyIDZ9$PN=Rf{A3a;h5%9G6G?_|^T&9TI_dxz8r2tjPq z;Un8z?#?2uzW057+x{cs z`W;laOceB(*9A&=#xY>xLX-sKwCEEZ8MDz>X-792m!hQKr>QP1|IWiHOI5yW+~XU) z!?UF`>b4$u7ohJ; zT!_hFOk92DWm{F6>YYe5`au=>uV<%*2PU8a72>U9QpAcVg^)F@$qgpH`Q!>h;`37;WTUiFVf3kr_(XDNX4smczrPRAGfhqT7)p?_qe_ zY&K^mbDWBgy4@8N&XgXQ7E5{$D0Rg*(6Yl^D5 z$BYvTwy%RCg_B0Rmm6;2Jo*jU>_pvGn>brLy(}nj;xXtdDosXkfwy#?mkI`GJm1{j zW^ve*05J9c#oSwlRke0)!`MNIN=m3ms+1rN3Q7t{BQ4#HbQp+=G)S{lxYvy&0ILA58YjJTgRjv3#P|#(^_4&E9fH~^*nTddhLH+=ZpXPxO6avlSc~G6y>-A`TU1F_{zaa?FKbAjy~Pw5^=NBA;cu=jV&y)H`KU1{fbAi z)i*hUuHkL&WR4E~2wlA`DeUAbR`>Z=uSh+g(~G2qGnNbbxb1gpQ2S1L2NH!lLi6@yuybPd)t`x6K}xn?b=OE_VJI z{K>hw)x?TgA(<$8PR=ksm#u;YeLX$slaQwR{?5mT`p%v9D`-*PPgBsJBC}6q$UEgy zCh6#Nt;>9KVa#m;H-Dg^eZl0KeaC(lmjikJ1E(eJkI(fe^}iVHx!CltQ_Pdu-C1wi z^mw|!F!D8BZ~d-+pdRzSf71?=HtAxw)bQIloV|i^<3Uo2Iy<*3O@SIgS|+wv7SgtG zFGaXDG}sM(-|!?DE^%UBHZ$IwIio0ew!6G2oC?=QvpX`WpGS)ax4C(8t6SmAFGjT_ z%Nsh=KSG(+XnFL;rkShWB;M6Hr?=rnv9!J?ywPmhjpx=b_=A`Aja?xBxD*-g@2#KP zo3y*ud(ZZZEw*PKEnGSq`lfK1jl9_T%$@kM>b-1i>tyT(d7j0+EAK6DQ$H2qiMhB} z-DH;W#j-j^Rr)u1{?Hzdp--|`h~i1%ZV#vV;;EU+#)MNcw!D$>2!}M^yfc}zDpY;t z>6vA=8?Ic+!NwM>Uh1gkSLs8>T?3`YrsZaSscbzo-Gn~MMMzBSJTC8wpHs2J^2F0D zrGnKimFA-Ih+2uOmLofuGBZ7~adE9sz4mhL?=?!ao#?r`VrroC{6#TuUf=1yX3U4S zjvuC1ZgoyQ(NAtyoEiF}i)q@Im)2>_Fg{7+|IW}pIAc~(PVRxaI{Aq*p2Y}Z*@x_3 zGRris0_X=h|5KK*e#)ee^PckNdlr}7or>5|?o$;UpB zAz)?20vvF=GjbT9d32eOP_ZYypdfU3I2`-AsJQsDfj1jEZLCW{Fm<`sng414!7<&~ zIEQBs)CFfJJz}|d#SbnuwMZu64I>K?*8Ioh>r7viZb6wKUVXZ`s?SYDgl$#EZGDfP zVyt5bfP*H_=GSsSv(^Fvx;(kpyLZ>QxuFHnr$<%YQAp_YK(Sp$D_`j%c4~&}vQzSF z<;kv&CDdGmGEdRa>)!u(G*?8auIK8rk}yM=^W;gU&zt954X%9O7w0V(e?K&M*AK5T z3O+9oe%#59ZMyO;38u^b>-0}+6(LQ1G(%6;<_8)85S{AD)(@`L*3vqA?%Xw?@wc_f zAdCQMX*}ruP*0YdE_(N{T|3-9AG!qb@T8JU{0i%IDu;$pfJntZAh1@6a93Vf$h&*& z(c4?pOiUNt+}xnxQTpVT+Jgtqo>D%sV!%3pevgf9MYSh`2COVlyPjx@YJiH=Ib2+t zYuApYbWX>K#ibucEwN>sw)H4DLvyq5$B$P@an7vw__py?pg4(NTc=Co4}7mgDHjp- z$G-9Nn}BycGC4VklSEH}G*{#=)%i{1x@}YuqrBd~*XhkMB+Md7YCgc^MO@@LIl%2H zr776ivvt_N=X=dlb_-Ki_7esF<)ZJmzMQy#uM=-fc|wtmJ`P0%?Hm_?DK7~PPzouX zrH_k*026NF+uG4{9-&NJ(eay^@#Y%HJUA`Gdczi+XsjgG z0HiT*I%4_-{mZZJokrCIi7_-!UDc$IRy3ig!Z>66v`YIR;1vBJ1UZ)AIO_sM`&X$)md?XY7!10`*Po4@gY}&rpQEGETNC`5i_|k!ka4 zD13v44mp`S!GR3M=|roaa(I$abnY@tkhKv)L!4nIy^u^b>!KMM+}HKN&lljCIKOS} zJN3riEB=7a4+q)6@sMlNG(0Sz!0!vc>!w_hi3K&R@$vDN)F*f53&wC@6r8xHpg;g1 zDJ3s&)bHOG)RK`R#n0wSR5Cj_%P&7~JcjqY<@@NI5dyuz_H9xinT-2crv0K8w4yzD z^au-J<``&gxwl#AldazzkJM+QxPr&Wb)Y0y{hs&^h|2x8Ld%300H@<{GhZy6a%~7< z)CVj6t)}K8R1lyZZP=Ac{I7uF`0?Yw*P&rz@`HeZQSr8|_rcRgj<7+1A`#Wi?}N^$ ztNi>ZVG5Va3GJd8>ZJvXHCKR)s&nAlo>xN-nhFI2mOFP!m2x{Co{@Sj$Lw9I0*sD> zEod1+VFw3?0#yct=|k?eV;L`nY8otcdQxabg>g3mJEc<@%?1UPfPjnUK{stf|9QH| z705FS7`1%7&uXU1_YGY%lRoCfSf)At-G5_yTUJ$770p&%U48OQ_bo#au#_fW*~Skn zWwN#6vy&I@X({3` zp{ww}n87`je6u-!E@R5uw;ONPrlq}BnEb@p;I>xA8rgNN+`%rv&|tTuXYo(m6Za(22{#7BLjnm0Ym^Gb_f7g9~T#A@-q{VitFpk z*V)j~^9gK+O`b5;UO0gyXQx&XkaL-p-gVGu#gZ7H12t+ z26xcl$0Ta~F|4rjW^j$a$jcZcA34}I$YFpFBgQ7_Pi6I+9WqU8c?YDt;t%>(VW?mo z?A0NH%r#^~K^>NaG!2}?!8Yo2Sw{4w%(OcS^Q*z1UfS!U;s>8PTn_#^JfM6y@E?pT zo==Ls-ztaj&yj5?7LF8jf`(9{`yiu4c60XX={pr^H1Q+Md4G3(ejCOP5RwL5_;23y z0&njh9W7~Z&jBrKvC!c-NGm^mbzOx1s7QDHI$t$B4)?d0XskNr6_05q=2-YOptXQF zW3wr>R$A9?j+1+Qw1EmV`f1-r4wzf6~rKmFd z{@&yTTUV!_=U-XBjSJ1mF=-}{_ud+8_LBG;N7=?n9z4TasPhOl0%#J@S$52;x)R#j zeimBOK-u!tRUjUL+e6wUxol{WPO!wpH$Q*=B$+F>o#`U{vSS2O#sOWB+j(J{$I|MC z{G`RqDgN%)EzMq{e@~>JEc+EQ#Wy0mld{+FE1*-*9>$3!2Pr&gi*7Z$)_934|Kk*j z1Z!Uusibm_0M1TnVaf$maactCDwS!(dU^c~6#)!8~M)3K{<` zv@nyBGQ{}GL%Q@%)c8eg4F61`FpSdqQG{dMaFUO4Rm=gvMOjsya_#`lm}4)$KG-mA zpyM$OtSVvSzyPnkI`KfPsUYQ%9_~u5CR6019@+N&&App*%N-G|r1#pN?G{eX1udB_ z@7L1KgsmGg5it>6xnmjDsP;~KpD zX@q@wMZBH(&M2Nj)LOLbo|xj`!_Yc+<`rCLlM}S#FS8V|PTw)5_$d-r>$B2_INJM) zYnSl+w~|5`2^nbGNgh4^s(&M$r%SWk0s3P}EXXFtJZ5OEj&am&+Ta;umZ%0)37JiY z?5sCyJIpSBUjF&=rHeR0R$S^1S&OA6ofms|mbqT!lUqgm>RlS!I4Nb1Mpw;l7OeZ< z@VQ&TZVT4v>aThv%VLb$c;V52+dl2PKU~%znfYuaVcdS}L|V$LOVv%Xo+Cb+SA{B1^Zk5%^U(34b`}kxO_$xu{O~8YdOM@*dI@P-Gh8_CySkoaD-SBW zq^{-i?BOpR?YcB?L))PQ6I4ir?VO4w=#S8DzdO^%rnQptmZyaqE2W&``G^|v@~F_4 zJACNHYh;GxL=Up_b~l!{osxGfHT%kgXlmB37l~f=u4F(@pSz>9n!PKK3mHT*dOSoI zbMwnj4`!>gl%qS$9KKmrt;(*}k93)|Si&TWiBrT$v8aFG_l2G?7}UNcSR8(gmW~ef zNS{?<(DT#iRic6IyG2!4wdvKjdZkZKNMcb89=n5s!=UmbpO7hzUd4{0mHI@@uu9ne zKtw+Qp~Ton>Ib%kK6Tb^!w=BjbLE+9=sx0>sf#btzCOtD)gIRv)OFg+Sm;iFG2pzi z^I$9I+%={|PSdSN!waa{m;$X!>p_D2j=aSmVr$Q|XE|K(4zImnH)iepEOCiY_~ESM zKAzCJnRvU9L?Nr|dCawFF3~JMT(k3)CTnADXKqTYTcf|Aqs|n3(l-u2efq-B9PCmd z-tYT;;dZS;MmLcGZVZ(=kzLt}UJsOCpCxJjN=}>Y4+E~?RP7O(9{tU$Q#Wka9tiOV zKl(YBk@c(n#-Q6%ERb>2-_Z!9-}N8;Y%nI<&ztZbueo_F>^{Ev$GZwVdrbT|(beJJ zsHNTuG&kdYV^vV)R+_(W-csA;pEu9<+^2q|zgU;cs@fyI*8mveaoP=BsS#JVQC)dAiE>!leRJu#Lw-(9g?+lhMOp& zWuZttm$Xw`UtjAwcSA-0+Ua;+#}lTHhDB6rMlr)=WyIR`SY;u(a-FKGvsgD!p}blA+%h7x=9)Pi*b^ z6z^N|cZXscIJcKOY(K|SwQeLLcQZPkCbsrlw&;Y#@7>viCyyO3nNv6FO*d8%Ge6~8 zhT=f-k9>!bU5%F5`*{9dRbhL0Z#DWXhy{r_v@k-juYA=dupn2d``oZ!7Yla3I~9kr?=1S}u#Eff_?9nz z{Zwy0&G0V5M{jR$?DA!u#hxGr^!+hH;~wSHL9SKCQVgSn32&d}1G83=oYRSa_yaBX zn)NHWrjiBq7jbHpLqTM%h1D9s%ZomH|agLe8g5#JzwMOdpx$+cO z;m8ppPEJn9-Tb=8jnWrJuj($Z8?*sWzIu3kIN(7Uo$XTtR(HG;FPQB}YBF*3EGE7n zc2E4#YDD2|5Lbm#16$~9-^C{-eK<8|Px}^J z>=~+LZj&>kYeDq%{;~eB3&M$bJAF74TTOZu52f$pF{qO6JM#94sf8-{S42@>XFlHb z)5&2b2KNcmKHX~%PLa(WOdl?6qAMYpwoO=jd+WqMdSo753OuIxwc9x>&Z!gYk=&Xk_3`&;-K6sSq!Feuk8({3qd}6LbWh;#{$1F&)hyIrf1jG#&@zT zVfNeUi~LPoV?pJkY72L49}9=G8;KRC2nGIL62pl&A+iE)J% zGpg*G`<)0uVbaUaHr#0u>)!N{tm}er7*&< zW*5Tp`uZxcU;b_6z9#*N`}w!xzo9GTHzzj2!WI*RDT4_m8M*x%Clt?IQvOgKlF_Jn z-_f+D`$HC$<+<%yO_Mclp%rY5$%w;V{lLSFKgZw2;74qi&vDUY&WOVY$7-yVsEv z#CR!WS=^Q)XHF&5a+z!=V}*Lcta)N1%f@xXh^`q6hkIA>Q>#)j9bqT)Njy@W&krjn ze@gC-Rik6=7wwO`%`gKX76~d0eg$z@gbeQ#`tQGLb^kgnj0#yF#fU6SQOcRvsHTf= ztDMp^CgL?Cxt~gGL8>!!zm`*DUSW&uEyY|d4u|g#U7eUEx>w#pW#W04EOve@RY!2h zKC&GlHn`Y!GUiyMFpg#Hs7sG+q#DZY#}~AyN!<&-cnK!0t1Gw^DDsuUcbgly*Vy>A z9y57k4b$(2<=k37#`%mkqAhzuTu30Ct=a@bc;dcmdIzh@)_ok#ubSuL41b?0?$?YH zb8cCi>pS)fRDXhNWo2dS8XI*1dH_W80tJN>uq`2n8Kjk+KD+*T3L&+|MstMc_%%z~ zj7;$R((Lsb7v_x;xMAA)PTlKKe0wW{I?jr0=<5fU(^~_(w3J-z)wmVGQqy}?9iz=J z!tYdD$S<7rN!<>*9UOnQ!0Lmw#sYc&;z$pH18C_rTVy&}Uhk`KT5?m>Cr=@8sd@M= zDLHvV=9}${&!5A~Zw9#reh)aI@3e09d-)6S4MOXEpJ(5(lso^*WM&~DSoqS#6Q2~- zs&py5UK{`60uY?=K@l!5P!V&u2Q27YZU2^jUp944VLbHBTzANY7_S{{uO|)#JEg@s z-K5m3r2#j$`)m4NvQZ4`&R-Pvy?P?ZbabfM?FZvC3sU8}a^G&5z5SN3EHi1&KgSvqwWYkVo(daaLA;3U@93|w5{ zKYsl1dh)r0x#$ZZSsm=CTRV{fO)1Qy&H%XwIbeOS=Jw%%*1 z%*b0B*m|H|WO^0XS^51PCtU8fWlop3eM6NfSJ^$W{i=PPonOKm>z_MQckOZ9h;0e? zd7n|SV`FX4#pJ>`oh2<+iY$1^g2hVA=4+yl_UF1AKr!V`OyiJ3XbElh$zG9)x89J~ zp}OUKc$zXTioUutZ>&4p_)UY2}fsFfN`=n@D7V%rs-LrN!%$Hb}q{*kr z-Y*ZU*4WL|uq~EO^>aVpjBx!JyMFR@e!7E+_F1wTGWOhx@h{oybIduWKI>ROzjgT`AzMFI8`zU)lXO(C1{ z)ulJm9bZ0e#0L~x)nF~kODQKC>;2RBMJ|`0%I|g02=~XHLo04Js8oOMbRaC{6Z{^R zG#&Agl#6wykU;b+U%1nu%VTmaBk{V zJR_ZwFD7{D^}aP5W_08|XA{ihVhv{tm&o^)Dn!b(ZvCAmlb(!^ z7^jM{jjn6b)$!$Fg$i)ZCb@)+u5u^}_vV?Zq;%VFEe9e9h?*tTnDh%Sd)a}ySV(`r zDu6~fLB5f|L_-9@;ADSc9kT4gl9l)Gv5M>#)MIuN;^NdYdtDX_a^*E<`Xer#Qu=-K z`;FU;*?~k&@nvi6Dt{qQdBtgH=>iM2l;oEzh2oPxo&ZoymfODTe9;U8hSuMz4${a5 zZ02|G-o5emPHWx!TVUE!)vu}ZP~Lv_{`#+#n;+FLtQMjMKmM(2WqTiJFZypaCJ4}b zRm9gY(12=N8k4!`!dI3P0c(NAppHsN79f4IjbwfUAJ?T(6YP*5c;biAya&&?w-94y%o;r2v z)vH(FrkbHWYr&Q8zd@twsY=eB$NqwwNp}G4D;j-wlZe&e0${3u$1#HjA2jX$YKy~U z2=Rg{T{|=b#Y;wsLB%p#uTcvWu)rDG7uzf{&-=^$y%gu@W{GuUpe8`eA|=!opj86E z(eF)7r>{cM7Dl0v52+|La{^ZZnj-=18$~Bq6aMQ-jaXAAVSHdvs|PtPx?8tyfRG%N zdXM>qg^7Z8A%RzQsVVfFg5MaVmv;_oJVxxH$?_L{OTu(!i6vptIoqx7bbEVkZVdWG z=aZZdD-F6Tpui|9`j)-^GDZB~M``N?RSQ6S5zkIYSR2jjga~XQ;&6Y^Q33=VRn7jy z0xE@spH)%3W~QA9T;;q*rz#7-$p|R-j$mrYu}#bJyFC9pC#S`tkYP9agpXJzY8uq# zFhFd}KPt+5z^vAUfsvPz@+D}db{p`gspOYwvPFw3D~BuksHm)_HGQsJLPb>`Um4oH z_0L4>o{_Ua5OtaT&5p_`FyhY8HVA@jK~O))GaIOfM#5hmNtZB~nVI3;Lq+F-p&{Ls zyCxqGFjOT*MTW8oP1nt4qJLibCE$|;f7R54#ti4BI+~ylAHXSC*Z7b%1S_hab8j`! zSsJfHG|HeE(ub35#oMtHBv0A_T-`HErTAicfKEe0Wu}QY?hjt#I?U4*1 z_(>`3gLDeb$spIl5RUvx>b%x^gO4qs-Yj36iKqa&mp5wp_rB(Kt2acLmx%(jj&U@{ z%3Pe(9nkn&>kG|Lhyd7Z(F#3!ll2`^fm8$C#;K_(&?)@Z7l&Z`s+U31@ETMVTUuJO z%_e0jlVGY9pg*YegLczGGxQnv$HarK=TYnmMc2`>u_quD39;+S{6L>quvbP4;`6_C zLsKqD1wS-1V}LUZG6=(^kH5f#vM=;ihc@c_egZh0OWqY&cbuF#2Cc{4fBbj^FA^#t z^QNC;V(NbUSW$R8s%@i-@QpCRKtFx@G<*pG%4Ob4Nvx;*Fw0-=QZaAM(BKCh&|?RM z3wc74FUo0vlbg*?x&AdE)0a_LNlVxdk^jwl$Y~EtxrDhHUk6o)vLo= zA+&sA2(v!0GlOR3X3$s9Mh z)E6DIDNxVbdOR5&Nn7#4?J0qwVH{ybqEUyZ>()h}eH<1GJA=6pqx>x!?j2M#OLo`# zKzH;75c|e#xGcG%LLX5>G4Ah-`_}SFuqVgx(!+-jq2}6Uu#Zgb3Vn+rXo$`r&Ci<_ zk1CIh-0aEMz9F&0AS2zG$hf=(bkukjf%wj;`u6W{487_$zj)DjSMsiv= z6-j``Dzq*Yi-5bcx>~-I@UO|SFq+CEbR@GyZErN5B^eSv&tsXftRwTz&D+HRo@tisVA0eYD%21GQB2kDbkBDJR6w z{a<(l%GOO-e0Z(-scpa4kDa}p8OJ4+UwIhw`xnJXC-Z$zIbAcu>n}OKM#f+6A{Qx@ ze=2f)(_V{WScP|UD0*q=rjXpx5EB^~wHANm`TDh06*hY&6dK#3tqWBV`9iSbcWkHS z0s;fW*o+AvfV+D2>c`&Q(j5H3-E(J+>N>occCRoI8!5^rosj(5;5OudHP~~?H9oww zYwCTC!AVcdcl8xhFB*G(FCNQOHc~uu&yx6OB)S~6uql_1`!c1ZDSYcTZ;}NcZ_+P) z-QZ^Z)#gmfGg=Xy=^zk&uq`s6Fq0hDX3tgN^6$8}Po*xY8X3_S78brI<-F)sE#U0T z18rd7GCZL2hq4}$B)lB7w?-oM(+%68DQ#=Kc4C7~DG8s@f+dJ+VL9m;MY-u?wK+$b z((u*TaITwCQl>9i{+tRMGKeS%Jw0mpK2K zL2o6r%e}@SL!37)J^l5&ch@4fUFHiD7z9>ryBo)-{R)2XBnXPhPXloQ6&>g5_+e}6 z$#eo3J&`K3^|ek=(D(se+WqV7X8qqG(jn%4c1tM69}LtTyLnZR{FH!NI5fT|q{$xn z;_KIKk%BTbq-k{|O6xoGfrhMMd%W7WcYp45Tp&dj^Y4;(BD*^OLvo|`u?_i(b026$ z7yvmgAH;lMA`>1Ghz^cc@~@@v?4z1*M>5Ex(dfnU{axReXK-a6KdxwCEPpgsQ#xo(>@f}EYFzMD`ULV6QMFC6aI#AMpv@IYYU=JeO&B}d0 z!tQMDZ7&S0rzzabDBmmEb`@Nh1TNvv0!zxCo*v*sGCLb?#C!&w|%3l1}-z)5R`Xo__fpBp9Hl zSP6|=c^+h;5y4bMm;oetfb}Q@?=X2Fq)tZ*R8}DN(z+Y53AJiO|CO1lZSRd$1M6oUCLzKhbZ*c;IzxlLx%etiCiQsWY3D8q?16v0IBPj?ia+?`}PQk2Q zbK%Mr%zG9V7QvH>Y03|QDFve$8>GKMCZ!Ms6cy0YvxX}H0h4BjRB*^32mQv&i}LDK zcNMe3>Rna10l-ADA?T4uh%)c1wKx}+*I6~@Xda_|+y5pn=@(^^;M!;^jxfP1Ai~W# z$A(>q0%B+!{A)5$l-sK<-z^nbXVc}%Htq@v3cb6kFt~x>NCQNX`Nwfq{Gg=<@HrXC z5c5N517pRy8eh>bGEx=2e_~p{(0cXKM^H1t*!f+B%MsONG_#zGklo&VpSmp5`4ohw zVH$wUio;5)FoYi~)16*d%u8B#@9(5!lwGH#O{}-^QdD>FfW1Is`aTGwgYa`|>mo>p zcr@yzED0NX?CdyOSy>r?f_iYRhSMAyAjH51dI~f#R`bD~9jT4u%O0-qzJrh!UnM0G zd;1MT#b!DF=GhL{UX!~YZat|4f%hhkB7t3=?CCuhhX0$?q8;3wh(g0*LCQIi#U;av z-`dIwqCF6YD@OVH_)I`+Y}yx!)$IPlttYa!NgzgY{W^BAKr+`YMn>F_hH6Bj83?^T z(2oKnpH$Vt0Dns1<8sAKKT!KS`fy)g0g+u?UQStDlvEpwc`;x%nU+8JS)<%ley<{w z>FIG$Pp$+3MWar7b-2N3*DXWTE_EN_7AKIW(o5Hr;SJV8SMs^DXA{4aZaL^Btlfb* zeiNDw-n+d?M(Nub@t?sWx(9C#&Y}&&vINQ<0GJGrJxW29E9aRIgNcO)-n*-Wc2!9A z9$#2kaQ$JF3x-8T*Xi)aF4?9X-57yxVii4~Dk#;zfqeE7^a+E+i=wXO*ffww@dyZN zz-&J$cjbk6oqvJkKf>O!dTWSSslh@6#SWno0(t@h{S^)rGXn6IPD8#*LLvqtJwS_r zT%l$+a_fmTWGW^@Wl?a0D9bCW+0Ph?XIUVyuciu7t@OJlh~$WUd8XF<8Ll5xa*goe zXKgT+p^cqxxIluGSN~pIP*5O7o96lz8bNVU}TOY)Jk`a;jWHW3VfA7`S71V$p z{q9dWxvC7x%qr%k9`HMe+Vji^frV*$uub$WisRPIYS&x1@2f^g~1C}Zf8JI}C zf#(>2LP-JMfIMT>LI|g1=Hk9H-qo0e1sBd~xb3n5sSh~4$n7BN+pLBc-M5~+)Rv#u zNAbBNlj=hqW_G9?1?wPSKIZ?#b0M>Dj)N3uJqzpfOQ#$$G%~4R+<*x`LEz;9b|lMs zQWBiU`9##?J#!QAg@}+23>9gh&jPm>SibVxhAd%V!^Qwq9Eos$>ZT62gkezfSz##Q@zU_Vz?GT^XF~H|a$sBzR4q>M!1c z*9a<2Qclh=;UGr@zlzWf!T#0&3A&(w10aE!J;7yjx9uyS2|gNboQ~w2pkfpl9PIH` z^W#G=0tht&nxeS7e<>|bHrMK9Th@}<`2_~b&Lsu`agEtx_#QOke}_t8Ep({^ffQ(v zOdu!)vuSDsr_(26tz9ph89-2^T_1pp#t8PwUgHcZK0fk$yQyEZ=+~F!Kv6)aIhq&1 zhEs5x&LdO6`zx)t1dI_8PpUB7=i3KY0wDs({(v;c3pi1Gj4wRHdxX^=lBL=*|AjA}m3v zvWL)34a=Wtcy#ecYt*RQMpMFb(D{EzVGfQyW{GQ35uzr?`nqqcwZ z-Ur`ij?`P=ByYO^wPbR}k<&GRC(fN!(u0Yp2lhrJflToU0vOh^+6}t z6X0xdP;LTGiNO&i`E0&_YH$tuJoI
#q3m=Qt{)J(yAhXb9dfU1(_*W<94DD)0M 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 Qk*7;NptV1JpZWR!1vS}M%m4rY literal 0 HcmV?d00001 diff --git a/Relatorio/relatorio.qmd b/Relatorio/relatorio.qmd new file mode 100644 index 0000000..dd62620 --- /dev/null +++ b/Relatorio/relatorio.qmd @@ -0,0 +1,539 @@ +--- +title: "Sistema de Monitoramento Inteligente de Cozinha com ESP32" +subtitle: "Integração MQTT com Ubidots para IoT Industrial" +author: "Amaro Lopes" +institute: "Faculdade de Tecnologia FIAP" +date: today +format: + pdf: + documentclass: book + classoption: + - oneside + toc: true + toc-depth: 4 + number-sections: true + geometry: + - margin=1in + fontfamily: libertinus + include-before-body: + text: | + \frontmatter + include-after-body: + text: | + \mainmatter +lang: pt +execute: + echo: false +--- + +# Introdução + +Este projeto implementa um **sistema inteligente de monitoramento para cozinha industrial** utilizando um microcontrolador ESP32 conectado a múltiplos sensores. O sistema detecta condições anormais de operação e ativa atuadores para garantir segurança, integrando-se com a plataforma Ubidots para monitoramento remoto via dashboard interativo, com fallback para um dashboard nodered. + +A integração é realizada através de um broker MQTT em **77.37.69.84** que faz forward automático dos dados para a plataforma Ubidots, permitindo visualização em tempo real e histórico de dados com widgets interativos. Alternativamente, um dashboard NodeRed está disponível em **77.37.69.84:1880/dashboard/page1** para monitoramento. + +## Contexto + +Cozinhas industriais enfrentam desafios de segurança relacionados a: +- Variações bruscas de temperatura +- Acúmulo de vapores e gases +- Condições de umidade inadequadas +- Risco de incêndios por múltiplas causas + +Este sistema fornece monitoramento 24/7 com resposta automática a situações críticas. + +# Objetivo do Projeto + +## Objetivos Gerais +1. Monitorar três parâmetros críticos em ambiente de cozinha industrial +2. Detectar anomalias e ativar sistemas de proteção automaticamente +3. Integrar dados com plataforma IoT profissional (Ubidots) +4. Permitir configuração remota de limiares via MQTT +5. Garantir transmissão confiável de dados em tempo real + +## Parâmetros Monitorados + +- **Temperatura ambiente** (°C) - Faixa: -40 a +80°C +- **Umidade relativa do ar** (%) - Faixa: 0 a 100% +- **Concentração de gás** (ppm) - Qualidade do ar, detecção de vazamentos +- **Status de alarme** (estado) - Código do sistema (0-4) + +## Atuadores Controlados + +- **Alarme sonoro** - Ativação de sirene para emergências +- **Coifa/Exaustor** - Remoção de gases e vapores +- **Ar-condicionado** - Controle de temperatura ambiente + +# Diagrama de Arquitetura + +```{mermaid} +%%| fig-width: 7 +graph TB + subgraph "Camada de Sensores" + DHT22["DHT22
Temperatura &
Umidade
GPIO 32"] + MQ2["MQ2
Qualidade do Ar
(Gás)
GPIO 33 ADC"] + RTC["RTC DS1307
Timer para verificação de incêndio
I2C"] + end + + subgraph "Camada de Processamento" + ESP32["ESP32 DevKit V4
Dual-core 240MHz
WiFi + BLE"] + LOGIC["Lógica de
Detecção de
Alarmes"] + end + + subgraph "Camada de Atuadores" + ALARM["Alarme Sonoro
Sirene/>GPIO 4"] + COIFA["Coifa/Exaustor
Motor 220V
GPIO 17"] + AC["A/C
Unidade comercial
GPIO 16"] + end + + subgraph "Rede MQTT" + WiFi["WiFi
Wokwi-GUEST
2.4GHz"] + MQTT["Broker MQTT
77.37.69.84:1883
Mosquitto"] + end + + subgraph "Cloud - Ubidots" + UBIDOTS["Plataforma Ubidots
Dashboard
Histórico de Dados
Alertas"] + NODERED["NodeRed
Dashboard Fallback
77.37.69.84:1880/dashboard/page1"] + end + + DHT22 --> ESP32 + MQ2 --> ESP32 + RTC --> ESP32 + ESP32 --> LOGIC + LOGIC --> ALARM + LOGIC --> COIFA + LOGIC --> AC + ESP32 -->|Publica| WiFi + WiFi --> MQTT + MQTT -->|Subscreve| ESP32 + MQTT -->|Forward| UBIDOTS + MQTT --> NODERED +``` + +## Fluxo de Dados Simplificado + +1. **Leitura**: Sensores capturam dados continuamente (a cada 2s) +2. **Processamento**: ESP32 verifica limiares e detecta alarmes +3. **Publicação**: Dados publicados em tópico MQTT `cozinha` +4. **Roteamento**: Broker em 77.37.69.84 recebe e roteia para múltiplos dashboards +5. **Integração Cloud**: Ubidots consome via bridge MQTT automático +6. **Integração Fallback**: NodeRed consome dados em tempo real +7. **Visualização**: Dashboards exibem em tempo real com widgets + +# Descrição dos Componentes + +## Componentes Principais + +| Componente | Especificação | Função | +|-----------|---------------|--------|-----------------| +| Microcontrolador | ESP32 DevKit V4 | Processamento central | +| Sensor Temp/Umidade | DHT22 | Leitura ambiental | +| Sensor de Gás | MQ2 | Detecção de gás/ar | +| RTC | DS1307 | Timer para verificação de incêndio | +| Módulos Relé | 3x Relés 5V | Acionamento periféricos | +| Alarme Sonoro | Sirene | Alerta de emergência | +| Coifa | Motor AC 220V | Exaustão de gases | +| Ar-Condicionado | Unidade Comercial | Controle de temperatura | + +## Mapeamento de Pinos GPIO + +| GPIO | Periférico | Tipo | Função | +|------|-----------|------|--------| +| 4 | Alarme Sonoro | Saída Digital | Ativação de Sirene | +| 16 | Ar-Condicionado | Saída Digital | Controle de relé A/C | +| 17 | Coifa/Exaustor | Saída Digital | Controle de relé coifa | +| 21 | RTC SDA | I2C | Comunicação com DS1307 | +| 22 | RTC SCL | I2C | Comunicação com DS1307 | +| 32 | DHT22 | Entrada Digital | Leitura temperatura/umidade | +| 33 | MQ2 | Entrada Analógica | Leitura ADC (10 bits, 0-1023) | + +# Variáveis de Telemetria MQTT + +## Publicação: ESP32 → Broker (Tópico: `cozinha`) + +**Intervalo**: 2 segundos +**Tipo**: JSON +**Exemplo**: + +```json +{ + "tmp": 28.50, + "umi": 65.20, + "gas": 850, + "alarme": 0 +} +``` + +### Descrição das Variáveis Publicadas + +| Campo | Tipo | Faixa | Unidade | Descrição | Precisão | +|-------|------|-------|---------|-----------|----------| +| `tmp` | Float | -40 a +80 | °C | Temperatura ambiente (DHT22) | ±0.5°C | +| `umi` | Float | 0 a 100 | % | Umidade relativa do ar (DHT22) | ±2% | +| `gas` | Integer | 0 a 1023 | ADC | Concentração de gás (ADC 10bits, MQ2) | 1 LSB | +| `alarme` | Integer | 0 a 4 | Enum | Estado do sistema | - | + +**Mapeamento de Estados (campo `alarme`)**: +- `0` = NOMINAL (sem alarme) +- `1` = GAS (gás acima do limiar) +- `2` = TEMP_ALTA (temperatura acima do limiar) +- `3` = UMIDADE_ALTA (umidade acima do limiar) +- `4` = INCENDIO (padrão de incêndio detectado) + +## Subscrição: Broker → ESP32 + +O sistema recebe comandos de configuração remota em tempo real, provenientes de dois dashboards: + +| Origem | Tópico | Tipo | Faixa | Padrão | Descrição | +|--------|--------|------|-------|--------|-----------| +| NodeRed / CLI | `cozinha/max_tmp` | Float | 20 a 60 | 30.0 | Limite máximo de temperatura (°C) - Reconfigurável | +| NodeRed / CLI | `cozinha/max_umi` | Float | 30 a 90 | 70.0 | Limite máximo de umidade (%) - Reconfigurável | + +A configuração pode ser feita através dos sliders do **NodeRed Dashboard** (http://77.37.69.84:1880/dashboard/page1), como visto na apresentação passada. + +**Exemplo de comandos para configuração:** + +```bash +# Alterar limite de temperatura para 32°C +mosquitto_pub -h 77.37.69.84 -t "cozinha/max_tmp" -m "32.0" + +# Alterar limite de umidade para 75% +mosquitto_pub -h 77.37.69.84 -t "cozinha/max_umi" -m "75.0" + +# Verificar tópico em tempo real +mosquitto_sub -h 77.37.69.84 -t "cozinha" +``` + + +# Configuração do Sistema + +## Limiares de Alarme Padrão + +| Parâmetro | Ativação | Desativação | Histerese | Tipo | +|-----------|----------|-------------|-----------|------| +| Temperatura | 30.0 °C | 28.0 °C | 2.0 °C | Upper limit com histerese | +| Umidade | 70.0 % | 65.0 % | 5.0 % | Upper limit com histerese | +| Gás (MQ2) | 940 ppm | 916 ppm | 24 ppm | Upper limit com histerese | + +**Histerese (Debounce)**: Implementa margem de segurança para evitar oscilações frequentes entre estados ativo/inativo. + +## Estados do Sistema + +O sistema opera em **5 estados distintos**, com prioridades hierárquicas: + +| Estado | Código | Alarme | Coifa | A/C | Descrição | Ação | +|-------------|--------|--------|-------|-----|-----------|-----------|------| +| NOMINAL | 0 | - | - | - | Operação normal, sem alarmes | Todos desativados | +| GAS | 1 | X | X | - | Gás detectado acima do limiar | Alarme + Exaustão | +| TEMP_ALTA | 2 | - | - | X | Temperatura acima do limiar | Resfriamento | +| UMIDADE_ALTA | 3 | - | X | - | Umidade acima do limiar | Exaustão | +| INCENDIO | 4 | X | X | X | Padrão de incêndio detectado | Máxima proteção | + +## Detecção Avançada de Incêndio + +O sistema implementa detecção inteligente de incêndio baseada em **padrão temporal**, não apenas em limiar único de temperatura: + +**Parâmetros de Monitoramento**: +- **Janela de tempo**: 30 segundos +- **Aumento mínimo de temperatura**: $\Delta T > 5°C$ +- **Queda mínima de umidade**: $\Delta UR < -10\%$ + +**Condição de Alerta de Incêndio**: +$$\text{Incêndio} = (\Delta T > 5°C) \land (\Delta UR < -10\%) \text{ em 30 segundos}$$ + +**Vantagem**: Reduz falsos positivos comparado à detecção por limiar único. Um aumento isolado de temperatura ou queda de umidade não ativa alarme. + +# Fluxo de Dados e Integração + +## Sequência de Operação Completa + +```{mermaid} +%%| fig-width: 7.5 +sequenceDiagram + participant DHT as DHT22
(Sensor) + participant MQ as MQ2
(Sensor) + participant ESP as ESP32
(Processador) + participant WiFi as WiFi
+ participant Broker as Broker MQTT
77.37.69.84 + participant Ubidots as Ubidots
(Cloud) + participant Dashboard as Dashboard
(Visualização) + + loop A cada 2 segundos + DHT->>ESP: Temperatura, Umidade + MQ->>ESP: ADC (Gás) + ESP->>ESP: Detecta Alarmes + ESP->>WiFi: JSON payload + WiFi->>Broker: PUBLISH cozinha + Broker->>Ubidots: Forward automático + Ubidots->>Dashboard: Atualiza widgets + end +``` + +## Integração MQTT com Ubidots + +**Tipo de Integração**: Bridge MQTT com Forward Automático + +**Configuração do Forward**: +- **Source Broker**: 77.37.69.84:1883 +- **Tópico Source**: `cozinha` +- **Destination**: Ubidots Cloud +- **Autenticação**: Token do device Ubidots + +**Processamento no Ubidots**: +- Cada variável JSON é extraída e armazenada +- Histórico de 30+ dias +- Alertas configuráveis por variável +- Dashboard com widgets em tempo real + +**Processamento no NodeRed**: +- Consumo direto de mensagens MQTT em tempo real +- Acesso em: **http://77.37.69.84:1880/dashboard/page1** +- Controle remoto de limiares via sliders +- Visualização gráfica em tempo real + + +# Ciclo de Operação + +## Fluxograma do Loop Principal + +### Parte 1: Leitura e Processamento + +```{mermaid} +%%| fig-width: 6.5 +flowchart LR + A["INÍCIO
Loop"] --> B{"MQTT
OK?"} + B -->|Não| C["Reconecta"] + C --> D["Lê Sensores"] + B -->|Sim| D + D --> E["DHT22"] + D --> F["MQ2"] + D --> G["RTC"] + E --> H["Detecta
Alarmes"] + F --> H + G --> H + H --> I["Publica"] +``` + +### Parte 2: Decisão de Alarmes + +```{mermaid} +%%| fig-width: 6.5 +flowchart LR + H["Detecta
Alarmes"] --> G{"Incêndio?"} + G -->|Sim| S4["Estado = 4"] + G -->|Não| G2{"Gás
>940?"} + G2 -->|Sim| S1["Estado = 1"] + G2 -->|Não| T{"Temp
Alta?"} + T -->|Sim| S2["Estado = 2"] + T -->|Não| U{"Umidade
Alta?"} + U -->|Sim| S3["Estado = 3"] + U -->|Não| S0["Estado = 0"] + S4 --> M["Publica
MQTT"] + S1 --> M + S2 --> M + S3 --> M + S0 --> M + M --> A["Ativa
Atuadores"] + A --> B["Aguarda 2s"] + B --> H +``` +# Validação e Testes + +## Protocolo de Validação + +A validação do sistema foi realizada através dos seguintes testes: + +### Teste 1: Conectividade WiFi +- Conexão com SSID Wokwi-GUEST +- Obtenção de IP via DHCP + +### Teste 2: Conectividade MQTT +- Conexão com broker 77.37.69.84:1883 +- Publicação de mensagens a cada 2s +- Recebimento de comandos de configuração + +### Teste 3: Leitura de Sensores +- DHT22: Temperatura entre 15-35°C (simulado) +- DHT22: Umidade entre 40-80% (simulado) +- MQ2: ADC entre 0-1023 (simulado) + +### Teste 4: Detecção de Alarmes +- Temperatura > 30°C ativa ar-condicionado +- Umidade > 70% ativa coifa +- Gás > 940 ativa alarme + coifa +- Padrão de incêndio (ΔT>5°C + ΔUR<-10%) ativa todos + +### Teste 5: Integração Ubidots +- Dados recebidos no dashboard +- Histórico armazenado +- Widgets atualizados em tempo real + +## Monitoramento de Dados + +**Captura do Monitor Serial** (origin dos dados): +``` +[SETUP] Iniciando sistema... +[DHT] Inicializado +[WiFi] Conectando..... +[WiFi] Conectado! +[MQTT] Conectando... +[MQTT] Conectado! +[MQTT] Tópico: cozinha/max_tmp +[MQTT] Tópico: cozinha/max_umi +[RTC] Inicializado +[MQTT] Publicando: {"tmp": 26.10, "umi": 63.50, "gas": 906, "alarme": 0} +[SETUP] Pronto! + +[MQTT] Publicando: {"tmp": 26.10, "umi": 63.50, "gas": 906, "alarme": 0} +[MQTT] Publicando: {"tmp": 26.10, "umi": 63.50, "gas": 906, "alarme": 0} +[MQTT] Publicando: {"tmp": 26.10, "umi": 63.50, "gas": 906, "alarme": 0} +[MQTT] Publicando: {"tmp": 26.10, "umi": 63.50, "gas": 983, "alarme": 0} +[ALARME] GÁS DETECTADO! +``` + +## Comparação: Origem vs. Ubidots + +| Métrica | Monitor Serial | Ubidots | Status | +|---------|---|---|---| +| Temperatura | 28.50°C | 28.50°C | Correspondência | +| Umidade | 65.20% | 65.20% | Correspondência | +| Gás | 850 ADC | 850 ADC | Correspondência | +| Alarme | 0 (NOMINAL) | 0 | Correspondência | + +**Conclusão**: Dados transmitidos corretamente sem perda ou corrupção. + + +# Dashboard Ubidots + +### Configuração do Device + +**Nome do Device**: `cozinha` +**Tipo**: Sensor IoT + +**Variáveis Configuradas**: + +| Variável | Tipo | Unidade | Limites | Status | +|----------|------|---------|---------|--------| +| temperatura | Float | °C | -40 a +80 | Ativa | +| umidade | Float | % | 0 a 100 | Ativa | +| gas | Integer | ppm | 0 a 1023 | Ativa | +| alarme | Integer | Enum | 0 a 4 | Ativa | + +## Widgets no Dashboard + +### Widget 1: Gauge Temperatura +- **Variável**: temperatura +- **Mín**: 15°C | **Máx**: 40°C +- **Alerta**: > 30°C (vermelho) + +### Widget 2: Gauge Umidade +- **Variável**: umidade +- **Mín**: 30% | **Máx**: 90% +- **Alerta**: > 70% (laranja) + +### Widget 3: Gauge Gás +- **Variável**: gas +- **Mín**: 500 ppm | **Máx**: 1000 ppm +- **Alerta**: > 940 ppm (vermelho) + +### Widget 4: Indicador de Estado +- **Variável**: alarme +- **Estados**: + - 0 = Verde (NOMINAL) + - 1 = Vermelho (GAS) + - 2 = Laranja (TEMP_ALTA) + - 3 = Amarelo (UMIDADE_ALTA) + - 4 = Vermelho (INCENDIO) + +### Widget 5: Gráfico de Histórico (Última 24h) +- **Variáveis**: temperatura, umidade, gas +- **Tipo**: Linha com pontos +- **Intervalo**: Últimas 24 horas + +## Alertas Configurados + +| Evento | Condição | Ação | +|--------|----------|------| +| Temperatura Alta | tmp > 30°C | Email | +| Umidade Alta | umi > 70% | Nada | +| Gás Detectado | gas > 940 | SMS | +| Incêndio | alarme == 4 | SMS + Email | + +## Screenshot do Dashboard + +![Dashboard no Ubidots](ubidots.png) + +**Conteúdo Esperado**: +- 4 widgets numéricos com valores em tempo real +- Gráfico histórico de 24 horas +- Status indicador colorido +- Últimas leituras: data/hora + +## Dashboard NodeRed - Monitoramento Fallback + +### Acesso + +O sistema também disponibiliza um dashboard NodeRed para monitoramento alternativo ao Ubidots: + +**URL**: http://77.37.69.84:1880/dashboard/page1 + +![Dashboard no NodeRed](nodered.png) + +### Recursos Disponíveis + +| Recurso | Descrição | Funcionalidade | +|---------|-----------|-----------------| +| Indicadores Numéricos | Temperatura, Umidade, Gás | Valores em tempo real | +| Status do Alarme | Código 0-4 | Indicador colorido (verde/vermelho/amarelo) | +| Gráfico em Tempo Real | Histórico 2 minutos | Visualização de tendências | +| Slider Temperatura | Input de controle | Alterar limite máximo de temp | +| Slider Umidade | Input de controle | Alterar limite máximo de umidade | + +### Configuração de Sliders + +Os sliders do dashboard NodeRed publicam diretamente nos tópicos MQTT: + +``` +Slider Temperatura → cozinha/max_tmp +Slider Umidade → cozinha/max_umi +``` + +**Operação**: + +1. Mover slider de temperatura +2. NodeRed publica valor em `cozinha/max_tmp` +3. ESP32 subscreve e recebe o comando +4. Limite é atualizado imediatamente + + +# Conclusões + +## Funções Implementadas + +1. **Detecção de Incêndio em 2D**: Combinação de ΔT e ΔUR em janela temporal +2. **Configuração Remota**: Limiares ajustáveis via MQTT em tempo real +3. **Histerese Dinâmica**: Evita oscilações entre estados +4. **Priorização de Alarmes**: Sistema hierárquico de estados +5. **Integração Cloud**: Dashboard profissional com Ubidots + +## Aplicações Práticas + +Este sistema pode ser estendido para: +- Outras ambientes: restaurantes, indústrias alimentícias +- Múltiplos sensores: CO2, fumaça, luminosidade +- Integração com sistemas SCADA +- Análise preditiva com machine learning +- Mobile app de alertas + +## Recomendações Futuras + +- [ ] Adicionar certificado SSL/TLS para segurança +- [ ] Implementar backup local em SD card +- [ ] Criar relatórios mensais de histórico +- [ ] Adicionar IA para detecção de padrões anormais + +--- + +**Última Atualização**: 26 de janeiro de 2026 +**Versão**: 1.0 +**Status**: Finalizado diff --git a/Relatorio/ubidots.png b/Relatorio/ubidots.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf7b5e8df808f87a7ae3be704faf8d3f9c734b4 GIT binary patch literal 70437 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≠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 literal 0 HcmV?d00001 diff --git a/diagram.json b/diagram.json new file mode 100644 index 0000000..6a46f49 --- /dev/null +++ b/diagram.json @@ -0,0 +1,551 @@ +{ + "version": 1, + "author": "Amaro Lopes", + "editor": "wokwi", + "parts": [ + { + "type": "board-esp32-devkit-c-v4", + "id": "esp", + "top": -19.2, + "left": -119.96, + "attrs": {} + }, + { + "type": "wokwi-gas-sensor", + "id": "gas1", + "top": 98.7, + "left": -559.4, + "attrs": {} + }, + { + "type": "wokwi-relay-module", + "id": "relay1", + "top": 86.6, + "left": 96, + "attrs": {} + }, + { + "type": "wokwi-dht22", + "id": "dht1", + "top": -86.1, + "left": -331.8, + "attrs": { + "temperature": "61" + } + }, + { + "type": "wokwi-gnd", + "id": "gnd2", + "top": 268.8, + "left": -298.2, + "attrs": {} + }, + { + "type": "wokwi-led", + "id": "led1", + "top": 82.8, + "left": 330.6, + "attrs": { + "color": "red", + "flip": "1" + } + }, + { + "type": "wokwi-gnd", + "id": "gnd3", + "top": 268.8, + "left": 345, + "attrs": {} + }, + { + "type": "wokwi-resistor", + "id": "r1", + "top": 119.15, + "left": 259.2, + "attrs": { + "value": "220" + } + }, + { + "type": "wokwi-vcc", + "id": "vcc3", + "top": -181.64, + "left": -412.8, + "attrs": {} + }, + { + "type": "wokwi-vcc", + "id": "vcc4", + "top": -181.64, + "left": 403.2, + "attrs": {} + }, + { + "type": "wokwi-relay-module", + "id": "relay2", + "top": 0.2, + "left": 124.8, + "attrs": {} + }, + { + "type": "wokwi-led", + "id": "led2", + "top": -3.6, + "left": 359.4, + "attrs": { + "color": "green", + "flip": "1" + } + }, + { + "type": "wokwi-resistor", + "id": "r2", + "top": 32.75, + "left": 288, + "attrs": { + "value": "220" + } + }, + { + "type": "wokwi-relay-module", + "id": "relay3", + "top": 86.6, + "left": 96, + "attrs": {} + }, + { + "type": "wokwi-led", + "id": "led3", + "top": 82.8, + "left": 330.6, + "attrs": { + "color": "red", + "flip": "1" + } + }, + { + "type": "wokwi-resistor", + "id": "r3", + "top": 119.15, + "left": 259.2, + "attrs": { + "value": "220" + } + }, + { + "type": "wokwi-relay-module", + "id": "relay4", + "top": -86.2, + "left": 134.4, + "attrs": {} + }, + { + "type": "wokwi-led", + "id": "led4", + "top": -90, + "left": 369, + "attrs": { + "color": "blue", + "flip": "1" + } + }, + { + "type": "wokwi-resistor", + "id": "r4", + "top": -53.65, + "left": 297.6, + "attrs": { + "value": "220" + } + }, + { + "type": "wokwi-text", + "id": "text1", + "top": -76.8, + "left": 422.4, + "attrs": { + "text": "COIFA" + } + }, + { + "type": "wokwi-text", + "id": "text2", + "top": 9.6, + "left": 422.4, + "attrs": { + "text": "AR CONDICIONADO" + } + }, + { + "type": "wokwi-text", + "id": "text3", + "top": 96, + "left": 422.4, + "attrs": { + "text": "ALARME SONORO" + } + }, + { + "type": "wokwi-ds1307", + "id": "rtc1", + "top": 253.8, + "left": 48.1, + "attrs": {} + } + ], + "connections": [ + [ + "esp:TX", + "$serialMonitor:RX", + "", + [] + ], + [ + "esp:RX", + "$serialMonitor:TX", + "", + [] + ], + [ + "dht1:GND", + "gnd2:GND", + "black", + [ + "v0" + ] + ], + [ + "dht1:SDA", + "esp:32", + "green", + [ + "v0" + ] + ], + [ + "gas1:GND", + "gnd2:GND", + "black", + [ + "h0" + ] + ], + [ + "led1:A", + "r1:2", + "green", + [ + "v0" + ] + ], + [ + "led1:C", + "gnd3:GND", + "black", + [ + "v0" + ] + ], + [ + "relay1:NO", + "r1:1", + "green", + [ + "h0" + ] + ], + [ + "vcc3:VCC", + "vcc4:VCC", + "red", + [ + "v19.2", + "h0", + "v0", + "h57.6" + ] + ], + [ + "esp:3V3", + "vcc3:VCC", + "red", + [ + "h-38.25", + "v-144", + "h0", + "v0", + "h-249.6" + ] + ], + [ + "dht1:VCC", + "vcc3:VCC", + "red", + [ + "v9.6", + "h-38.4" + ] + ], + [ + "gnd2:GND", + "gnd3:GND", + "black", + [ + "v-28.8", + "h0", + "v0", + "h595.2" + ] + ], + [ + "esp:GND.2", + "gnd3:GND", + "black", + [ + "v0", + "h57.6", + "v230.4", + "h268.8" + ] + ], + [ + "vcc4:VCC", + "relay1:COM", + "red", + [ + "v19.2", + "h-134.4", + "v249.6", + "h-19.2" + ] + ], + [ + "gas1:VCC", + "vcc3:VCC", + "red", + [ + "h0" + ] + ], + [ + "relay1:VCC", + "vcc4:VCC", + "red", + [ + "h-28.8", + "v-240", + "h345.6" + ] + ], + [ + "relay1:GND", + "gnd2:GND", + "black", + [ + "h-19.2", + "v124.4", + "h-364.8" + ] + ], + [ + "relay1:IN", + "esp:4", + "green", + [ + "h0" + ] + ], + [ + "led2:A", + "r2:2", + "green", + [ + "v0" + ] + ], + [ + "relay2:NO", + "r2:1", + "green", + [ + "h0" + ] + ], + [ + "led2:C", + "gnd3:GND", + "black", + [ + "v201.6", + "h-29.2" + ] + ], + [ + "relay2:VCC", + "vcc4:VCC", + "red", + [ + "h-57.6", + "v-153.6", + "h345.6" + ] + ], + [ + "relay2:GND", + "gnd2:GND", + "black", + [ + "h-48", + "v210.8", + "h-240" + ] + ], + [ + "relay2:IN", + "esp:16", + "green", + [ + "h-67.2", + "v76.6" + ] + ], + [ + "led3:A", + "r3:2", + "green", + [ + "v0" + ] + ], + [ + "relay3:NO", + "r3:1", + "green", + [ + "h0" + ] + ], + [ + "led4:A", + "r4:2", + "green", + [ + "v0" + ] + ], + [ + "relay4:NO", + "r4:1", + "green", + [ + "h0" + ] + ], + [ + "led4:C", + "gnd3:GND", + "black", + [ + "v288", + "h-38.8" + ] + ], + [ + "relay4:VCC", + "vcc4:VCC", + "red", + [ + "h-67.2", + "v-67.2", + "h345.6" + ] + ], + [ + "relay4:GND", + "gnd2:GND", + "black", + [ + "h-57.6", + "v297.2", + "h-268.8", + "v0", + "h-96" + ] + ], + [ + "relay4:IN", + "esp:17", + "green", + [ + "h-86.4", + "v-0.2" + ] + ], + [ + "relay2:COM", + "vcc4:VCC", + "red", + [ + "h39.6", + "v-164.6", + "h134.4" + ] + ], + [ + "relay4:COM", + "vcc4:VCC", + "red", + [ + "h30", + "v-78.2", + "h134.4" + ] + ], + [ + "gas1:AOUT", + "esp:33", + "green", + [ + "h230.4", + "v-9.6" + ] + ], + [ + "rtc1:GND", + "esp:CMD", + "black", + [ + "h-192", + "v-96" + ] + ], + [ + "esp:5V", + "rtc1:5V", + "red", + [ + "h-9.45", + "v96" + ] + ], + [ + "rtc1:SCL", + "esp:22", + "green", + [ + "h-38.4", + "v-269" + ] + ], + [ + "rtc1:SDA", + "esp:21", + "green", + [ + "h-48", + "v-230.7" + ] + ] + ], + "dependencies": {} +} \ No newline at end of file diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..a704130 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,15 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp32] +platform = espressif32 +framework = arduino +board = esp32dev +lib_deps = hwspeedy/DHT-Sensor, knolleary/PubSubClient, adafruit/RTClib diff --git a/src/esp32-ntp-clock.ino b/src/esp32-ntp-clock.ino new file mode 100644 index 0000000..1fbd9aa --- /dev/null +++ b/src/esp32-ntp-clock.ino @@ -0,0 +1,429 @@ +// ============================================================================ +// Sistema de monitoramento de cozinha com ESP32 +// Monitora temperatura, umidade e gás com detecção avançada de incêndio +// Envia dados via MQTT e controla coifa e ar-condicionado +// ============================================================================ + +// INCLUDES +#include // Sensor DHT22 +#include // MQTT +#include // RTC DS1307 +#include // WiFi + +// ============================================================================ +// DEFINES - Pinos GPIO +// ============================================================================ +#define DHTPIN 32 // Sensor DHT22 (temperatura/umidade) +#define DHTTYPE DHT22 // Tipo sensor DHT +#define MQ2PIN 33 // Sensor MQ2 (qualidade do ar/gás) +#define ALARME_SONORO 4 // Alarme sonoro +#define COIFA 17 // Coifa (exaustor) +#define AR_CONDICIONADO 16 // Ar-condicionado + +// ============================================================================ +// ENUMS +// ============================================================================ +enum statusCozinha { + NOMINAL, // Sem alerta + GAS, // Detecção de gás + TEMP_ALTA, // Temperatura acima do limite + UMIDADE_ALTA, // Umidade acima do limite + INCENDIO // Possível incêndio (padrão: ΔT > 5°C + Δumidade < -10% em 30s) +}; + +// ============================================================================ +// CONSTANTES - Limiares de alarme +// ============================================================================ +const int GAS_ON = 940; // Ativação gás (~1000ppm) +const int GAS_OFF = 916; // Desativação gás (~500ppm) +const float TEMP_ON_DEFAULT = 30.0; // Temperatura máxima padrão (°C) +const float TEMP_HISTERESE = 2.0; // Histerese temperatura +const float UMIDADE_ON_DEFAULT = 70.0; // Umidade máxima padrão (%) +const float UMIDADE_HISTERESE = 5.0; // Histerese umidade + +// Detecção de incêndio +const uint32_t JANELA_TEMPO_INCENDIO = 30; // Janela: 30 segundos +const float DELTA_TEMP_INCENDIO = 5.0; // Aumento mínimo: 5°C +const float DELTA_UMIDADE_INCENDIO = -10.0; // Queda mínima: -10% + +// ============================================================================ +// CONSTANTES - WiFi e MQTT +// ============================================================================ +const char* WIFI_SSID = "Wokwi-GUEST"; +const char* WIFI_PASSWORD = ""; +const char* MQTT_BROKER = "77.37.69.84"; +const int MQTT_PORT = 1883; +const char* MQTT_SUB_TOPICS[] = { "cozinha/max_tmp", "cozinha/max_umi" }; +const char* MQTT_PUB_TOPIC = "cozinha"; +const int MQTT_SUB_COUNT = sizeof(MQTT_SUB_TOPICS) / sizeof(MQTT_SUB_TOPICS[0]); + +// ============================================================================ +// VARIÁVEIS GLOBAIS - Objetos +// ============================================================================ +DHT dht(DHTPIN, DHTTYPE); +RTC_DS1307 RTC; +WiFiClient espClient; +PubSubClient mqtt(espClient); +DateTime now; + +// ============================================================================ +// VARIÁVEIS GLOBAIS - Estado do sistema +// ============================================================================ +int alarmStatus = NOMINAL; +float umidade = 0.0; +float temperatura = 0.0; +int iqAR = 0; + +// Variáveis de configuração (atualizáveis via MQTT) +float TEMP_ON = TEMP_ON_DEFAULT; +float TEMP_OFF = TEMP_ON - TEMP_HISTERESE; +float UMIDADE_ON = UMIDADE_ON_DEFAULT; +float UMIDADE_OFF = UMIDADE_ON - UMIDADE_HISTERESE; + +// Variáveis para detecção de incêndio +float temp_inicio = 0.0; +float umidade_inicio = 0.0; +uint32_t timestamp_inicio = 0; + +// Buffer MQTT +char msg[256]; +char MQTT_CLIENTID[32]; + +// ============================================================================ +// FUNÇÕES AUXILIARES - Callbacks MQTT +// ============================================================================ +void mqttCallback(char* topic, byte* payload, unsigned int length) +{ + Serial.print("[MQTT] Mensagem em ["); + Serial.print(topic); + Serial.println("]"); + + // Copia payload para buffer null-terminated + char buf[64]; + int n = (length < (int)sizeof(buf) - 1) ? length : (int)sizeof(buf) - 1; + memcpy(buf, payload, n); + buf[n] = '\0'; + + Serial.print("[MQTT] payload: "); + Serial.println(buf); + + // Processa tópicos + if (strcmp(topic, "cozinha/max_tmp") == 0) { + float v = atof(buf); + if (!isnan(v)) { + TEMP_ON = v; + TEMP_OFF = TEMP_ON - TEMP_HISTERESE; + Serial.print("[MQTT] TEMP_ON = "); + Serial.println(TEMP_ON); + } + } else if (strcmp(topic, "cozinha/max_umi") == 0) { + float v = atof(buf); + if (!isnan(v)) { + UMIDADE_ON = v; + UMIDADE_OFF = UMIDADE_ON - UMIDADE_HISTERESE; + Serial.print("[MQTT] UMIDADE_ON = "); + Serial.println(UMIDADE_ON); + } + } +} + +// ============================================================================ +// FUNÇÕES AUXILIARES - Conectividade +// ============================================================================ +// Conecta o ESP32 à rede WiFi +void connectWiFi() +{ + Serial.print("[WiFi] Conectando..."); + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + int attempts = 0; + while (WiFi.status() != WL_CONNECTED && attempts < 20) { + delay(500); + Serial.print("."); + attempts++; + } + Serial.println("\r\n[WiFi] Conectado!"); +} + +// Inscreve em tópicos MQTT para receber atualizações de limiares +void mqttSubscribe() +{ + Serial.println("[MQTT] Conectado!"); + for (int i = 0; i < MQTT_SUB_COUNT; ++i) { + if (mqtt.subscribe(MQTT_SUB_TOPICS[i])) { + Serial.print("[MQTT] Tópico: "); + Serial.println(MQTT_SUB_TOPICS[i]); + } + } +} + +// Conecta ao broker MQTT +void connectMQTT() +{ + mqtt.setServer(MQTT_BROKER, MQTT_PORT); + mqtt.setCallback(mqttCallback); + + while (!mqtt.connected()) { + Serial.println("[MQTT] Conectando..."); + if (mqtt.connect(MQTT_CLIENTID)) { + mqttSubscribe(); + break; + } else { + Serial.print("[MQTT] Falha rc="); + Serial.println(mqtt.state()); + delay(2000); + } + } +} + +// ============================================================================ +// FUNÇÕES AUXILIARES - Sensores +// ============================================================================ +// Lê valores de temperatura e umidade do sensor DHT22 +void read_DHT() +{ + umidade = dht.readHumidity(); + temperatura = dht.readTemperature(); + + if (isnan(umidade) || isnan(temperatura)) { + Serial.println("[DHT] Erro na leitura!"); + umidade = 0.0; + temperatura = 0.0; + } +} + +void read_MQ2() +{ + iqAR = analogRead(MQ2PIN); +} + +// ============================================================================ +// FUNÇÕES - Detecção de alarmes +// ============================================================================ +// Detecta padrão de possível incêndio: aumento de temperatura > 5°C + queda de umidade > 10% em 30 segundos +void detect_fire() +{ + // Inicializa janela de monitoramento na primeira chamada + if (temp_inicio == 0.0) { + temp_inicio = temperatura; + umidade_inicio = umidade; + timestamp_inicio = now.secondstime(); + return; + } + + // Calcula tempo decorrido + uint32_t tempo_decorrido = now.secondstime() - timestamp_inicio; + + // Verifica padrão de incêndio a cada 30 segundos + if (tempo_decorrido >= JANELA_TEMPO_INCENDIO) { + float delta_temp = temperatura - temp_inicio; + float delta_umidade = umidade - umidade_inicio; + + // Debug: exibe deltas + Serial.print("[INCENDIO] ΔT: "); + Serial.print(delta_temp); + Serial.print("°C | ΔUmidade: "); + Serial.print(delta_umidade); + Serial.println("%"); + + // Verifica condições críticas + if (delta_temp > DELTA_TEMP_INCENDIO && delta_umidade < DELTA_UMIDADE_INCENDIO) { + Serial.println("[ALERTA] INCÊNDIO DETECTADO!"); + alarmStatus = INCENDIO; + } + + // Reseta janela + temp_inicio = temperatura; + umidade_inicio = umidade; + timestamp_inicio = now.secondstime(); + } +} + +// Verifica qual alarme deve ser ativado baseado nos limites +void check_alarm() +{ + // Atualiza RTC + now = RTC.now(); + + // Detecção de incêndio (máxima prioridade) + detect_fire(); + if (alarmStatus == INCENDIO) { + return; + } + + // Verifica gás + if (alarmStatus == GAS) { + if (iqAR <= GAS_OFF) { + alarmStatus = NOMINAL; + } + } else if (iqAR > GAS_ON) { + alarmStatus = GAS; + return; + } + + // Verifica umidade + if (alarmStatus == UMIDADE_ALTA) { + if (umidade <= UMIDADE_OFF) { + alarmStatus = NOMINAL; + } + } else if (umidade > UMIDADE_ON) { + alarmStatus = UMIDADE_ALTA; + return; + } + + // Verifica temperatura + if (alarmStatus == TEMP_ALTA) { + if (temperatura <= TEMP_OFF) { + alarmStatus = NOMINAL; + } + } else if (temperatura > TEMP_ON) { + alarmStatus = TEMP_ALTA; + return; + } + + // Nenhum alarme ativo + if (alarmStatus != GAS && alarmStatus != UMIDADE_ALTA + && alarmStatus != TEMP_ALTA) { + alarmStatus = NOMINAL; + } +} + +// ============================================================================ +// FUNÇÕES - Leitura e publicação +// ============================================================================ +// Realiza leitura de todos os sensores e publica dados via MQTT +void leitura_sensores() +{ + read_DHT(); + read_MQ2(); + + // Formata e publica via MQTT + snprintf(msg, sizeof(msg), + "{\"tmp\": %.2f, \"umi\": %.2f, \"gas\": %d, \"alarme\": %d}", + temperatura, umidade, iqAR, alarmStatus); + Serial.print("[MQTT] Publicando: "); + Serial.println(msg); + mqtt.publish(MQTT_PUB_TOPIC, msg); + + // Verifica alarmes + check_alarm(); +} + +// Processa ativação de periféricos baseado no alarme +void processa_alarme() +{ + // Desativa todos antes de processar + digitalWrite(ALARME_SONORO, LOW); + digitalWrite(COIFA, LOW); + digitalWrite(AR_CONDICIONADO, LOW); + + if (alarmStatus == NOMINAL) { + return; + } + + // Ativa periféricos conforme alarme + switch (alarmStatus) { + case INCENDIO: + digitalWrite(ALARME_SONORO, HIGH); + digitalWrite(COIFA, HIGH); + digitalWrite(AR_CONDICIONADO, HIGH); + Serial.println("[ALARME] INCÊNDIO!"); + break; + case GAS: + digitalWrite(ALARME_SONORO, HIGH); + digitalWrite(COIFA, HIGH); + Serial.println("[ALARME] GÁS DETECTADO!"); + break; + case UMIDADE_ALTA: + digitalWrite(COIFA, HIGH); + Serial.println("[ALARME] UMIDADE ALTA!"); + break; + case TEMP_ALTA: + digitalWrite(AR_CONDICIONADO, HIGH); + Serial.println("[ALARME] TEMPERATURA ALTA!"); + break; + default: + break; + } +} + +// ============================================================================ +// FUNÇÕES - Inicialização +// ============================================================================ +void rtc_setup() +{ + if (!RTC.begin()) { + Serial.println("[RTC] Erro: não encontrado!"); + while (1) + delay(1000); + } + Serial.println("[RTC] Inicializado"); +} + +// Inicializa o ESP32 e configura os periféricos +void setup() +{ + Serial.begin(115200); + delay(100); + + Serial.println("\n[SETUP] Iniciando sistema..."); + + // Inicializa DHT + dht.begin(); + Serial.println("[DHT] Inicializado"); + + // Gera ID único MQTT + snprintf(MQTT_CLIENTID, sizeof(MQTT_CLIENTID), "esp32_%08X", + (uint32_t)(ESP.getEfuseMac() & 0xFFFFFFFF)); + + // Configura ADC + analogReadResolution(10); + + // Configura pinos + pinMode(ALARME_SONORO, OUTPUT); + pinMode(COIFA, OUTPUT); + pinMode(AR_CONDICIONADO, OUTPUT); + pinMode(MQ2PIN, INPUT); + pinMode(DHTPIN, INPUT); + + // Desativa todos os atuadores + digitalWrite(ALARME_SONORO, LOW); + digitalWrite(COIFA, LOW); + digitalWrite(AR_CONDICIONADO, LOW); + + // Conecta + connectWiFi(); + connectMQTT(); + rtc_setup(); + + // Primeira leitura + now = RTC.now(); + leitura_sensores(); + + Serial.println("[SETUP] Pronto!\n"); +} + +// ============================================================================ +// LOOP PRINCIPAL +// ============================================================================ +// Loop principal - executa continuamente +void loop() +{ + // Verifica MQTT + if (!mqtt.connected()) { + connectMQTT(); + } + mqtt.loop(); + + // Lê sensores + leitura_sensores(); + + // Processa alarme + processa_alarme(); + + // Aguarda 2 segundos + unsigned long start = millis(); + while (millis() - start < 2000UL) { + mqtt.loop(); + delay(10); + } +} \ No newline at end of file diff --git a/wokwi.toml b/wokwi.toml new file mode 100644 index 0000000..0115800 --- /dev/null +++ b/wokwi.toml @@ -0,0 +1,4 @@ +[wokwi] +version = 1 +elf = ".pio/build/esp32/firmware.elf" +firmware = ".pio/build/esp32/firmware.bin"