Charger para sa lithium battery 12V. Pagpili ng charger para sa mga bateryang lithium. Paano mag-ipon ng charger para sa mga baterya ng lithium-ion gamit ang iyong sariling mga kamay

Charger para sa lithium battery 12V.  Pagpili ng charger para sa mga bateryang lithium.  Paano mag-ipon ng charger para sa mga baterya ng lithium-ion gamit ang iyong sariling mga kamay
Charger para sa lithium battery 12V. Pagpili ng charger para sa mga bateryang lithium. Paano mag-ipon ng charger para sa mga baterya ng lithium-ion gamit ang iyong sariling mga kamay

Patuloy nating pinapaunlad ang ating weather station.

Bago tayo magpatuloy sa pag-update, nais kong linawin ng kaunti.

Sumulat sa akin ang isa sa aming mga kasamahan na nagtatanong kung bakit ipinakilala ang watchdog timer?

Ang watchdog timer ay nasa lugar kung sakaling magkaroon ng emergency. Tulad ng ipinapakita ng kasanayan, ang ENC28J60 ay hindi humahawak ng higit sa (maliban kung ang memorya ay nabigo) 4 sabay-sabay na koneksyon. Isinasaalang-alang kung gaano karaming mga koneksyon sa serbisyo ang patuloy na nagaganap upang mapanatili ang pagpapatakbo ng network mismo, at iniwan lamang ang trapiko na nilikha ng lahat ng uri ng mga laruan sa bahay (halimbawa, modernong telebisyon, i-scan ang mga magagamit na host sa network at ang kanilang mga bukas na port) ang disenyo ay napupunta lamang sa isang pagkahilo. Ang ENC28J60 ay hindi maaaring gumana nang nakapag-iisa sa mga protocol ng network at lahat ay ipinapatupad sa mga aklatan. Baka sila lang.
Sinuri ko ang lahat ng magagamit na mga aklatan at iba't ibang mga module (biglang may sira), ngunit nakamit matatag na operasyon Hindi ko magawa ng matagal. Pinakamataas na termino ay mga 3-4 na linggo.
Ito ang dahilan kung bakit umiikot ang "aso" doon at, kung may mangyari, hinihila ang controller. Pagkatapos nito, nawala ang problema.
Hindi ko rin itinatanggi na posible sa aking home network may ilang mga nuances o problema. Pero dahil may problema ako, baka may ibang tao din. Sa ngayon ay natagpuan ko lamang ang solusyon na ito.
Sa pagkakaalam ko, ang mga chips mula sa Wiznet (W5100 at mas mataas) ay wala nito, o hindi maganda ang hitsura nila.

Mag-move on na tayo sa update

Ang pinakamahalaga, lumalayo tayo sa chip ENC28J60 at pumunta sa W5100. Sinubukan kong ipatupad ang lahat sa lumang chip, ngunit walang sapat na memorya ng microcontroller dahil sa napaka malalaking aklatan Para sa ENC28J60. Kapag gumagamit ng bagong chip, pamantayan mga aklatan mula sa developer at sa lahat ginawang pagbabago, may natitira pa 20% libreng memorya ng microcontroller ATMega328. At ito ay mga bagong buns!

Sa bersyong ito (tawagin natin itong pangalawa) ang kakayahang magpadala ng mga pagbabasa mula sa mga sensor sa pamamagitan ng wireless na komunikasyon gamit ang dalas 433 MHz. Kinuha ko mismo ang mga module mula sa Chinese, markings XY-MK-5V. Nais kong tandaan na ang kalidad ng paghahatid ay malayo sa perpekto. Posibleng pagkawala ng signal, ingay, kawalan ng kakayahang magpadala ng sabay-sabay, atbp., atbp. Ngunit ang kanilang presyo (mas mababa sa $1 bawat set) ay nagbabayad para sa mga pagkukulang na ito. Sasabihin ko sa iyo ang isang lihim na ang mga ito (ang pinakamurang) na mga module ay matatagpuan sa maraming branded na istasyon ng panahon gamit sa bahay. Wow, hindi inaasahan?

Magsimula tayo sa base station

Lilipat na kami sa Arduino UNO At Ethernet Shield(unang bersyon) batay sa chip W5100. Ito ay isang sandwich at walang saysay na ilarawan ito. Ilalarawan ko lamang ang mga karagdagang kasangkot na contact para sa mga module XY-MK-5V.

Ang module ng transmitter ay gumagamit ng kapangyarihan 5V, GND(saan tayo kung wala si nanay) at D2 pin sa controller. I-edit ang contact D2 (DATA) maaari mong gamitin ang function vw_set_tx_pin mula sa vw library.

Hindi tulad ng nakaraang sketch, ang isang ito ay gumagamit ng dalawang karagdagang library:

#isama #isama

Ang sketch mismo

Nakatagong text

#isama #isama #isama #isama #isama #isama #isama #isama #define DHTTYPE DHT22 #define DHTPIN 5 DHT dht(DHTPIN, DHTTYPE); byte mac = (0x54, 0x34, 0x31, 0x31, 0x31, 0x31); char server = "narodmon.ru"; int port = 8283; IPAddress ip(192,168,0,201); kliyente ng EthernetClient; BMP085 dps = BMP085(); mahabang Temperatura = 0, Presyon = 0; lumutang H, dP, dPt; bool interval = totoo; EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE( byte ID; // Device ID int Temperature; // Temperature float Pressure; // Pressure float Humidity; // Humidity float dewPoint; // Dew/frost point ); IPADALA ang broadcast; void setup() ( // Initialize ang Watchdog timer wdt_disable(); delay(8000); wdt_enable(WDTO_8S); // Initialize ang console Serial.begin(9600); // Initialize ang DHT sensor dht.begin(); / / Pagsisimula ng 433 MHz module ET.begin(details(broadcast)); vw_set_ptt_inverted(true); 1-Wire Wire.begin(); // Pagsisimula ng BMP180 na may pagsasaayos ng taas // dps.init (MODE_STANDARD, 3200, true); // Ipadala kaagad ang unang data pagkatapos i-on ang device send_info(true) // dewPoint function NOAA / / reference (1) : http://wahiduddin.net/calc/density_algorithms.htm // reference (2) : http: //www.colorado.edu/geography/weather_station/Geog_site/about.htm double dewPoint(double celsius , double humidity) ( // (1) Saturation Vapor Pressure = ESGG(T) double RATIO = 373.15 / (273.15 + celsius) ; Ito ay kinakailangan // upang hindi makaligaw sa panahon ng taglamig.<0?0:dPt):0; dP = dewPoint(Temperature*0.1, H); // Отправляем данные в эфир 433 мГц broadcast.ID = 1; broadcast.Temperature = floor(Temperature*0.1); broadcast.Pressure = floor(Pressure/133.3*10)/10; broadcast.Humidity = floor(H*10)/10; broadcast.dewPoint = floor(dP*10)/10; ET.sendData(); delay(250); if(eth) { // Подключаемся к серверу "Народный мониторинг" if(client.connect(server, port)) { // Начинаем передачу данных // адрес_устройства_в_проекте, имя_устройства, GPS широта, GPS долгота client.print(F("#fe-31-31-0e-5a-3b#Arduino Uno#71.344699#27.200014\n")); // Температура client.print(F("#T0#")); client.print(Temperature*0.1); client.print(F("#Температура\n")); // Давление client.print("#P1#"); client.print(Pressure/133.3); client.print(F("#Давление\n")); // Влажность client.print("#H1#"); client.print(H); client.print(F("#Влажность\n")); // Точка росы\инея client.print("#T1#"); client.print(dP); client.print((dP <= 0)? F("#Точка инея\n"):F("#Точка росы\n")); //client.print(F("#Точка росы\n")); // Отправляем конец телеграммы client.print("##"); // Даем время отработать Ethernet модулю и разрываем соединение delay(250); client.stop(); } } // Останавливаем цикл, если передача завершена fail = !fail; break; } delay(250); } } void loop() { // Каждые 4 секунды сбрасываем сторожевой таймер микроконтроллера // Каждые 6 минут отправляем данные на "Народный мониторинг" // Каждые 30 секунд отсылаем данные в эфир 433 if(!(millis()%1000)) wdt_reset(); if(!(millis()%360000)) send_info(true); if(!(millis()%30000)) send_info(false); }

Ang isang antenna ay dapat idagdag sa mga module mismo. Para sa 433 MHz Ang isang ordinaryong mahabang tansong kawad ay sapat na 17 cm. Kung walang antena, maaari mong kalimutan ang tungkol sa normal na operasyon.

Lumipat tayo sa pinakamahalagang bahagi ng update na ito - ang lokal na istasyon ng wireless

Upang ipatupad ito (sa tuhod) gumamit ako ng isang analogue Arduino NANO(batay sa ATMega328) At TFT ipakita sa isang chip ST7735S may pahintulot 128 x 160

Nakatagong text



Pinout display -> controller

============================ LED | 3.3V SCK | SCK (13) SDA | MOSI(11)A0 | DC (9) I-RESET | RST(8)CS | CS (10) GND | GND VCC | 5V ==============================

Ang module ng receiver ay konektado sa parehong paraan tulad ng isang transmiter, lamang DATA upang i-pin D7.

Isang pares ng mga larawan kung ano ang hitsura nito:

Nakatagong text

Receiver sketch

Nakatagong text

#isama #isama #isama #isama int x, y; int w = 128, h = 160; int laki; // 433 EasyTransferVirtualWire ET; struct SEND_DATA_STRUCTURE( byte ID; // Device ID int Temperature; // Temperature float Pressure; // Pressure float Humidity; // Humidity float dewPoint; // Dew/frost point ); IPADALA ang broadcast; Temperatura); = Log_dewPoint) ( TFTscreen.setTextSize(laki); // I-overwrite ang hindi na ginagamit na impormasyon ng data = String(Log_dewPoint); info.toCharArray(dewPoint, info.length()); TFTscreen.stroke(0, 0, 0); TFTscreen.text (dewPoint, x_alignment_right(w/2-5, info.length(), size), 120); // Output new readings info = String(broadcast.dewPoint(dewPoint, info.length()); TFTscreen.stroke(255, 255, 255); TFTscreen.text(dewPoint, x_alignment_right(w/2-5, info.length(), laki), 120; Log_dewPoint)?true:false); ) else ( changes(10, 106, 125, true, true); changes(10, 106, 125, false, true); ) // I-update ang mga value sa mga log para sa kasunod paghahambing ng mga pagbasa Log_Temperature = broadcast.Temperature;

Ang mga pagbabasa ay ipinapakita nang medyo compact, ngunit tulad ng ipinapakita ng pagsasanay (at ang payo ng aking mga kasama) - "panlasa at kulay, kahit na ang asawa ay hindi isang kaibigan." Marami akong nakinig na payo at mungkahi, ngunit nagkakasalungatan sila. Samakatuwid, gawin ito sa iyong panlasa.

Tila sa akin na ang disenyo ay bahagi ng proyekto na tumatagal ng halos lahat ng oras!

Nakatagong text

Ang ilan sa mga data ay gawa-gawa upang ipakita ang ilang mga elemento ng disenyo.

Ang mga artifact sa display ay alikabok at iba pang dumi na naipon sa loob ng mahabang panahon na ang display ay nasa... sa isang lugar doon,... well, doon, hindi ko matandaan kung saan ko ito nakuha! Iwan mo na ako!

Ang sketch ay may mga function sa pagpoposisyon. Ang mga ito ay medyo primitive, ngunit pinapayagan ka nitong makamit ang ilang mga epekto.

  1. x_center
  2. x_alignment_right

Ang una ay nakasentro sa teksto, at ang pangalawa ay nakahanay sa kanang bahagi ng tinukoy na zone. Ang lahat ng mga kalkulasyon ay ginawa na may kaugnayan sa laki ng ibinigay na teksto, batay sa expression 1 laki = 1PX x 1PX segment ng font.

Ang display ay nagpapakita rin ng mga elemento na tumutugma sa isang pagtaas o pagbaba sa isang partikular na halaga ng pagbabasa. Ang mga ito ay ipinapakita sa anyo ng mga tatsulok. Ngunit sa function code pagbabago Mayroong alternatibong display sa anyo ng mga tatsulok na pinaikot ng 45 degrees. Kung tumaas ang mga pagbabasa, ang elemento ay pula, kung hindi, asul.

Sa pamamagitan ng paraan, ang kulay at lilim ng pangunahing temperatura ay nagbabago depende sa temperatura mismo. Medyo kontrobersyal na desisyon, ngunit sa aking opinyon, kumportable sa paningin. Nakipaglaban ako dito nang ilang sandali at napagtanto na ang mga halaga sa pag-andar stroke, ang mga TFT display object ay nakalista sa maling pagkakasunud-sunod. BGR lugar RGB. Isa itong error sa developer, o hindi ko maintindihan ang isang bagay.

PS: Ang lahat ay medyo kawili-wili, ngunit sa palagay ko ito ay nararapat sa karagdagang pag-unlad. Iyan ang gagawin natin pagkatapos ng ilang oras.

Panimula

Pagbati sa lahat, ngayon gusto kong sabihin sa iyo ang tungkol sa isang maliit na subroutine o utility, depende sa kung ano ang mas maginhawa para sa iyo, na tinatawag na "Port Monitor". Kung pamilyar ka na sa Arduino IDE, pagkatapos ay nakita mo ito nang higit sa isang beses at nahulaan kung ano ang pag-uusapan natin. Ngunit huwag magmadali sa pag-alis, tiyak na may babasahin ka sa pagpunta natin mula sa mga pangunahing kaalaman hanggang buong pagsusuri kanyang trabaho.

Kaya, ang "Port Monitor" ay isang maliit na Arduino IDE subroutine na idinisenyo upang tumanggap at magpadala ng data mula-sa Arduino. Dahil sa ang katunayan na ang Arduino IDE ay walang anumang paraan para sa pag-debug ng mga sketch, ito ang tanging paraan upang suriin kung ang lahat ay gumagana nang tama at ayon sa nararapat.

Ang subroutine ay binubuo ng isang form; kapag inilunsad, ang Arduino IDE ay nagpapadala dito ng numero ng COM port kung saan ito dapat gumana, pagkatapos nito ay sinusubukang kumonekta dito at, kung matagumpay, ay nagsisimulang makinig at ipakita ang lahat ng impormasyong natanggap .

Ang Port Monitor form mismo ay maaaring nahahati sa tatlong bahagi: itaas, sentral At mas mababa.

  1. Sa itaas ay mayroong input field kung saan maaaring ipasok ng user ang data na gusto niyang ipadala sa Arduino. Maaari itong maging alinman sa teksto o mga numero (sasabihin ko sa iyo ang higit pa tungkol sa format ng paghahatid sa ibaba). Sa pamamagitan ng pagpindot sa pindutang "Ipadala", tulad ng nahulaan mo, ipinapadala ng subroutine ang inilagay na data sa COM port at pagkatapos ay sa Arduino.
  2. Sa gitnang bahagi mayroong isang patlang ng teksto kung saan ang lahat ng impormasyong natanggap mula sa COM port ay ipinapakita, i.e. kung ano ang ipinadala mula sa Arduino.
  3. Sa ilalim ng form mayroong mga karagdagang setting, katulad:
  • "Autoscroll" - Maginhawa kapag gusto mong palaging makita ang pinakabagong impormasyon na natanggap mula sa Arduino. Ang gitnang bahagi ay awtomatikong ini-scroll sa pinakailalim ng field.
  • "Postfix" - Isang drop-down na listahan kung saan maaari kang pumili ng isa sa mga opsyon sa postfix, i.e. kapag na-click mo ang button na "Isumite" sa tuktok ng form, idadagdag pa ang ilang byte sa data na iyong inilagay sa field, na maaari mong basahin sa ibaba.
  • "Bilis" - Drop-down na listahan kung saan kailangan mong piliin ang baud rate.

Sa pangkalahatan, ang form ay hindi kumplikado, mayroong ilang mga elemento dito, mahirap malito. Dito natin tatapusin ang paglalarawan at magsisimula ng detalyadong pagsusuri.

Paglilipat ng data mula sa Arduino sa "Port Monitor"

Magsisimula tayo sa Arduino.

Upang mailipat ang data mula sa Arduino patungo sa "Port Monitor", kailangan mong simulan ang Serial class sa setup() function sa pamamagitan ng pagtawag sa paraan ng pagsisimula nito, na ipinapasa ang bilis at mga setting ng COM port.

Syntax.

Serial.begin(bilis, mga setting);

  • Kung saan ang bilis ay ang data transfer rate baud per second.
  • Ang mga setting (hindi kinakailangang parameter) ay nagpapahiwatig kung gaano karaming mga bit ng impormasyon ang nasa isang byte, pati na rin ang bilang ng mga stop bit at kung magdagdag ng parity bit. Bilang default, kung hindi ka pumasa sa mga setting (at hindi namin kailangan ang mga ito sa 99.9% ng mga kaso), ang Serial class ay kukuha ng mga karaniwang setting, ibig sabihin:
  1. Ang bilang ng mga bits ng impormasyon sa isang byte ay 8.
  2. Ang bilang ng mga stop bit ay 1.
  3. Parity bit - Walang parity bit.

Ano ang start bit, information bit, parity bit, bakit ang bilis ay sinusukat sa baud, sasabihin ko sa iyo sa isa pang artikulo, kung hindi, hindi mo ito madigest malaking volume impormasyon, ngunit ang artikulo ay hindi magiging maliit, hindi ito magiging madali. Ngayon ay gagamit kami ng mga karaniwang setting, kung saan ang bilis ay 9600 baud bawat segundo, at awtomatikong pipiliin ng Arduino ang mga setting.

Sa kabuuan, nakuha namin ang mga sumusunod:

Void setup() ( // Initialize (start) the Serial class by calling its begin method indicating a speed of 9600 baud per second. Serial.begin(9600); )

Kapag handa na ang lahat, maaari kang magpadala ng data gamit ang mga pamamaraan ng pag-print at println ng parehong Serial na klase.

Void loop() ( // Send "Hellow World!" "); // Sleep for one second. delay(1000); )

Kaya, sa port monitor makikita natin ang isang linya na binubuo ng dalawang "Hello World!" bawat segundo ( tingnan ang larawan sa itaas).

Ang Serial class ay naglalaman ng iba pang mga pamamaraan para sa pagtatrabaho sa port monitor, ngunit sa pangkalahatan ang mga pamamaraan ng pag-print at println ay sapat para sa karamihan ng mga kaso.

Pagtanggap ng data na ipinadala mula sa "Port Monitor" sa Arduino

Ngayon ay susubukan naming tanggapin ang mga utos na ipinadala mula sa port monitor sa Arduino at gamitin ang mga ito, halimbawa, upang i-on o i-off ang isang LED.

Ang parehong Serial na klase at ang pamamaraan nito ay makakatulong sa atin dito readString.

At iba pa ang utos" MATAAS"I-on namin ang LED, at sa utos " MABABA"I-off natin ito.

Upang magpadala ng isang command, kailangan mong mag-type ng teksto sa field na matatagpuan sa tuktok ng form at i-click ang pindutang "Isumite". Makakatanggap kami ng mga utos gamit ang nabanggit na readString na paraan.

Sa kabuuan, dapat mong makuha ang sumusunod.

Void setup() ( Serial.begin(9600); pinMode(13, OUTPUT); ) void loop() ( // Tumanggap ng mga command para i-on/off ang LED sa port 13. String str = Serial.readString(); / / Kung ang command na “HIGH” ay i-on ang LED kung (str == “HIGH”) digitalWrite(13, HIGH); . pagkaantala(1000);

Ito ay kung paano, nang walang labis na sakit, maaari kang lumikha Nth dami mga utos at iproseso ang mga ito sa Arduino.

Format ng paghahatid ng data

Sa wakas, pag-uusapan natin ang form kung saan ang impormasyon ay ipinagpapalit sa pagitan ng "Port Monitor" at Arduino. Anuman ang data na ipapasa mo mula sa Arduino patungo sa port monitor, lahat ito ay na-convert sa isang ASCII format string ( tingnan ang talahanayan), ang parehong bagay ay nangyayari kapag nagpapadala ng data mula sa port monitor sa Arduino. Yung. Sa pamamagitan ng pagpapadala ng numerong sampu, hindi ka talaga nagpapadala ng numero, ngunit isang string na binubuo ng dalawang character, isang character at isang zero character.

Halimbawa, ang pagpapadala ng isang byte na katumbas ng 128, ang port monitor ay talagang makakatanggap ng tatlong byte.

  • Byte 49 - ASCII unit character.
  • Byte 50 - Dalawang simbolo.
  • Byte 56 - Walong simbolo.

Kapag isinasagawa ang paraan ng println, makakakuha tayo ng 5 bytes. Kung saan ang unang tatlo ay ilalarawan sa itaas, at ang dalawang karagdagang mga ay bytes CR (13) at LF (10), ibig sabihin ay isang bagong linya.

Ang pagkakaroon ng pagtingin sa talahanayan ng character ng ASCII, marami ang mapapansin na naglalaman lamang ito ng mga Latin na character, bilang isang resulta kung saan kung magpadala kami, halimbawa, "Hello world!", makakakuha tayo ng ilang uri ng kalokohan sa monitor ng port. Gusto kong kunin ang pagkakataong ito upang mag-advertise na isinulat ng mga may-akda ng portal, na nauunawaan hindi lamang ang mga inskripsiyon sa Russian, kundi pati na rin sa iba pang mga wika.

At ngayon, matapos basahin ang lahat ng isinulat ko dito, masasabi ko na sa iyo kung ano ang "Postfix", ang drop-down list sa ibaba ng port monitor.

Ang postfix ay isang byte o byte, depende sa kung aling item ang iyong pinili, na idaragdag sa data na iyong ipinasok sa field ng pagpapadala.

Halimbawa, sa pamamagitan ng pagsulat ng numero 128 sa field ng pagpapadala at pag-click sa pindutang "Ipadala", matatanggap namin ang sumusunod:

  • Sa postfix, napili ang "Walang dulo ng linya" - Ang port monitor ay magpapadala lamang ng kung ano ang ipinasok sa field ng pagpapadala, nang walang pagdaragdag ng anuman.
  • Sa postfix, “NL ( Bagong linya)" - Ipapadala ng port monitor ang ipinasok sa field ng pagpapadala at idagdag ang LF (10) byte.
  • Sa postfix, ang "CR (Carriage Return)" ay pinili - Ipapadala ng port monitor ang ipinasok sa field ng pagpapadala at idagdag ang CR (10) byte.
  • Sa postfix "NL&CR" ay napili - Ang port monitor ay magpapadala ng kung ano ang ipinasok sa field ng pagpapadala at magdagdag ng dalawang byte na CR (13) at LF (10).

Iyon lang. Isulat sa mga komento ang hindi mo naiintindihan, at sa mga bagong artikulo ay susubukan naming ilarawan ito nang mas detalyado.

Well, ang susunod na artikulo ay tungkol sa kung paano isulat ang iyong sariling port monitor sa Delphi.

Good luck sa iyo.

Mangyaring paganahin ang javascript para gumana ang mga komento.

Nag-deploy ang aming organisasyon ng server ng Zabbix upang subaybayan ang pagganap ng mga server at workstation. Dahil sa mga kakaibang teknikal na proseso, ang kagamitan ay "kumakalat" sa maraming silid at ipinamamahagi sa buong negosyo. Naturally, kasama ang mga pangunahing parameter ng mga computer (gumagana/hindi gumagana), gusto ko ring kontrolin ang microclimate sa mga silid ng server. Kasabay nito, tulad ng dati, ang mga posibilidad ay napakalimitado, at imposibleng "itumba" ang mga makabuluhang pondo para sa kumplikadong mga sistema Ang pagsubaybay sa temperatura (kasama ko ang mga control board na may mga sensor ng temperatura para sa APC rack UPS) ay isang hiwalay na paghahanap.

Sa pangunahing silid ng server, ang lahat ay simple - ang isang naturang board ay naka-install (matagal nang binili ng hinalinhan kasama ang pangunahing kagamitan), isang APC thermal sensor ay naka-plug in, isang ahente ay nilikha sa Zabbix, lahat ay gumagana sa pamamagitan ng SNMP . Nakakainip :) Walang kagamitan para sa pagsubaybay sa malayong hardware, o mga pondo - tingnan sa itaas. Samakatuwid, napagpasyahan na maging matalino, makatipid ng badyet at kasabay nito ay bumuo ng isang bagong kasanayan sa pamamagitan ng pagbuo ng isang simple at murang "knock-on" na solusyon na gayunpaman ay umaangkop sa umiiral na imprastraktura ng pagsubaybay ng Zabbix.

Mga kinakailangang sangkap:

  • Ang batayan ng system ay Arduino Nano V3
  • Lokal na network module (ethernet-shield)
  • At, sa katunayan, isang digital temperature sensor batay sa DS18B20
Ang kabuuang halaga ng mga bahagi ay $10 kasama ang paghahatid.

Ang pag-assemble ng device ay hindi mahirap. Ang module ng network ay inilalagay sa pangunahing board tulad ng isang "sandwich", ang thermal sensor ay ibinebenta sa mga pin nito. Koneksyon ng sensor: pula +5 V, itim - lupa, dilaw - data; Sa pagitan ng +5V at Data naghihinang kami ng 4.7 kOhm pull-up resistor.

Pinili ang data pin na isinasaalang-alang ang mga pin na ginagamit ng module ng network (D10 – SS; D11 – MOSI; D12 – MISO; D13 – SCK; D2 – IRQ).

Rake: sa prototype ng device ay nakatagpo ako ng isang salungatan - ang data ng temperatura ay inisyu nang random, "bawat dalawa hanggang tatlo." Ang dahilan ay lumabas na nag-attach ako ng isang sensor ng temperatura sa pin 2, na, tulad ng nakita ko sa Internet, ay ginagamit ng module ng network upang makabuo ng isang interrupt kapag dumating ang isang packet. Inilipat ko ito sa ika-4 - ito ay gumana tulad ng orasan.

Pagkatapos i-assemble ang hardware, lumipat kami sa software.

Ang aparato ay gagana sa network at magpanggap na isang ahente ng Zabbix, para dito kailangan nito ng MAC at IP address. Nagpasya kami kung ano ang mas maginhawa - i-hardwire ito sa panahon ng programming, bumuo ng MAC mula sa address ng sensor ng temperatura at kumuha ng IP sa pamamagitan ng DHCP, atbp. Kinuha ko ang pinakasimpleng ruta at na-hardcode ang parehong mga parameter.

Ang exchange protocol sa Zabbix server ay inilarawan sa dokumentasyon. Sasagot ang aming device sa dalawang utos - ahente.ping At env.temp(may puwang para sa karagdagang pagkamalikhain dito; maaari mong ilakip ang alinman sa mga module ng pagpapalawak na magagamit para sa Arduino - kahit isang humidity sensor, kahit isang light sensor - anuman ang nais ng iyong puso). Sasagot ito sa lahat ng iba pang mga utos na may karaniwang tugon na naiintindihan ng server ng Zabbix.

Para sa mga nagsisimula sa simula (tulad ko), ang Arduino programming ay ginagawa gamit ang Arduino IDE, ang pag-install at pagsasaayos nito ay simple. Para gumana ang mga bahagi, kinakailangan ang UIPEthernet at OneWire library, na naka-install at nakakonekta sa proyekto sa pamamagitan ng Sketch menu - Connect library - Manage library...
Kung mayroon kang iba pang mga bahagi (halimbawa, isang module ng network na wala sa enc28j60, ngunit sa ibang chip), kakailanganin mo ng iba pang mga aklatan!

Ang code para sa pagtatrabaho sa module ng network at sensor ng temperatura ay karaniwan, mula sa Internet, na may ilang mga pagpapalagay at pagpapagaan.

Pagkatapos i-upload ang code sa controller at ikonekta ang ethernet cable, suriin namin mula sa console:

$ zabbix_get -s 192.168.4.5 -k agent.ping 1 $ zabbix_get -s 192.168.4.5 -k env.temp 23.12 $ zabbix_get -s 192.168.4.5 -k bla-blah ZBX_NOTSUPPORTED
Rake: ang pinagsama-samang bersyon ng zabbix_get para sa Windows na nai-post sa zabbix.com ay luma na at gumagamit ng ibang protocol (na may ZBXD\x01 header sa kahilingan ng server). Ang bersyon ng Linux ay napapanahon at ang protocol ay tumutugma sa ibinigay na code.

Gumagana ang lahat ayon sa nilalayon. Sa admin panel ng Zabbix, lumikha kami ng bagong host na may napiling IP, naglalaman ito ng dalawang key, Numeric (unsigned) agent.ping at Numeric (float) env.temp, at tamasahin ang trabaho. Mga chart, trigger - lahat ay gaya ng dati.

Ang device ay pinapagana sa pamamagitan ng native USB. Case - opsyonal: angkop na plastic box, heat shrink, asul na electrical tape.

Ang resolution ng sensor ay humigit-kumulang 0.06 (mas tiyak, 1/16) °C, ang katumpakan - kapag inilubog sa natutunaw na snow, ito ay nagpakita ng 0.19 °C (marahil ito ay bumaba nang mas mababa, ngunit mayroong maliit na snow at lahat ng ito ay natunaw. mabilis). Sa tingin ko ito ay higit pa sa sapat para sa isang device na nagkakahalaga ng $10 at ang mga layuning inilarawan.

Sketch

#isama #isama byte mac = ( 0xDE, 0x05, 0xB6, 0x27, 0x39, 0x19 ); // random MAC byte ip = ( 192, 168, 4, 5 ); // IP address sa lokal na network String readString = String(20); byte addr; OneWire ds(4); // DS18B20 at pin 4 EthernetServer server(10050); // Zabbix port void setup() ( Ethernet.begin(mac, ip); server.begin(); ds.search(addr); ) void loop() ( byte data; float celsius; readString = ""; if ( EthernetClient client = server.available()) ( while (client.connected()) ( if (client.available()) ( char c = client.read(); if (c == "\n") // end ng query mula sa zabbix server ( client.print("ZBXD\x01"); // response header if (readString == "agent.ping") ( byte responseBytes = (0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00, "1"); client.write(responseBytes, 9 else if (readString == "env.temp") ( ds.reset(); ds.select(addr); // simulan ang conversion gamit ang regular (non-parasite!) power delay(1000); ds.select(ds.write(0xBE); // read Scratchpad data = ds.read(); ; data = ds.read(); int16_t raw = (data<< 8) | data; celsius = (float)raw / 16.0; byte responseBytes = {(byte) String(celsius).length(), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; client.write(responseBytes, 8); client.print(celsius); } else { byte responseBytes = {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; client.write(responseBytes, 8); client.print("ZBX_NOTSUPPORTED"); } break; } else if (readString.length() < 20) { readString = readString + c; } } } delay(10); client.stop(); } }

Nang malaman ko ang tungkol sa pampublikong pagsubaybay, tungkol sa pagkakataong maging bahagi ng sistema ng pagsubaybay sa panahon na ito, nabigla ako, at isang simpleng istasyon ng panahon ang ginawa sa isang Arduino nano at isang ethernet module.
Nagpadala siya ng temperatura, presyon at halumigmig sa site. Ito ay gumana nang hindi maganda, kung minsan ito ay nagyelo, ito ay kinakailangan upang i-reboot. Pagkatapos ay namatay ang humidity sensor, at nagsimula akong maghanap ng alternatibong aparato. Tumingin ako sa esp8266 nang matagal, ngunit kakaunti ang alam tungkol dito. Ang huminto sa akin ay ang code para dito ay kailangang isulat sa isang hindi pamilyar na kapaligiran ng esplorer sa isang wikang hindi pamilyar sa akin. Ang isang katulad na aparato ay nai-publish na dito, ang aparato ay nagtrabaho sa shareware firmware mula sa Homes Smart, ang solusyon na ito ay hindi nababagay sa akin. Nang maglaon nalaman ko na ang esp8266 ay maaaring matagumpay na konektado sa arduinoIDE. Nagsimula akong mag-googling nang masinsinan, at bilang resulta ay nakakuha ako ng mga resulta na nababagay sa akin.
Umaasa ako na ang artikulo ay magiging kapaki-pakinabang. Sa palagay ko maaari itong ituring bilang isang pagsusuri sa gabay sa pagpupulong.

Ang NodeMcu ay isang uri ng development board para sa esp8266 (sa aking pag-unawa). Gamit ito, maginhawang gumawa ng mga prototype ng mga device sa mga breadboard. Maginhawang mag-upload ng firmware mula sa ArduinoIDE, awtomatikong nangyayari ang lahat. Naturally, kailangan mo ng ArduinoIDE upang gumana sa esp8266. Ang pagkakaroon ng paghahanda sa kapaligiran sa pagtatrabaho, agad akong nag-sketch ng isang diagram, hindi ito mahirap.
Ang bmp180 pressure at temperature sensor ay konektado sa pamamagitan ng i2c sa SCL(gpio05) at SDA(gpio04).
Ang humidity at temperature sensor dht22 ay konektado sa gpio02
Ang 1602 display na may soldered i2c adapter ay naka-mount din sa scl at cda, kasabay ng pressure sensor.
Ang power supply para sa mga sensor ay 3.3V, ang power supply para sa display ay 5V.

Ang isang photoresistor ay konektado sa pin A0; kinokontrol nito ang liwanag ng display upang ang display ay hindi masyadong kumikinang sa gabi. Ang backlight ay pinapagana ng gpio14, na nagpapatupad ng software na PWM. Pagkatapos ng transistor cascade, ang backlight power ay direktang pumupunta sa spot A (anode) sa display. ito ay matatagpuan sa tabi ng LED. Mula sa spi display adapter kailangan mong alisin ang jumper na kumokontrol sa backlight.

Larawan ng prototype





Ikakabit ko ang diagram at tatakan sa dulo.

Ito ay mas mahirap sa code.

//arduino 181, o inilibing #include #isama #isama #isama #isama LiquidCrystal_I2C lcd(0x27, 16, 2); #isama #isama #isama #isama #define debug true // output debug messages #define postingInterval 300000 // interval sa pagitan ng pagpapadala ng data sa millisecond (5 minuto) #define DHTPIN 2 // dht sa gpio02 // Alisin sa komento ang uri ng sensor na ginagamit: //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Lib instantiate DHT dht(DHTPIN, DHTTYPE); Adafruit_BMP085 bmp; /**/unsigned long lastConnectionTime = 0; // oras ng huling paglipat ng data /**/String Hostname; //pangalan ng piraso ng hardware - mukhang ESPAABBCCDDEEFF i.e. ESP+mac address. lumutang dhttemp; // buffer variable para sa pag-iimbak ng temperatura mula sa dht22 int dhthum; // buffer variable para sa pag-iimbak ng halumigmig mula sa dht22 int topwm; // iniimbak ang halaga para sa liwanag ng display shim void wifimanstart() ( // Magic procedure para sa paunang koneksyon sa Wifi. // Kung hindi mo alam kung saan ikokonekta, gagawa ng ESP8266 access point at configuration table http: //192.168.4.1 // Higit pang mga detalye: https ://github.com/tzapu/WiFiManager WiFiManager wifiManager; if (debug) Serial.println("failed to connect and hit timeout"); (debug) Serial.println("connected.. ."); ) void setup() ( // pinMode(14, OUTPUT); // i-tweak ng gpio14 ang display backlight Hostname = "ESP"+WiFi.macAddress(); Hostname.replace(":",""); Serial.begin(115200); pagsisimula ng temperatura at pressure sensor bmp180 dht.begin(); (!bmp.begin()) // kung hindi nakita ang sensor, iuulat namin ito sa comport at sa display ( Serial.println("Hindi mahanap ang BMP180 o BMP085 sensor sa 0x77"); 3);

Ano ang magagawa ng device?
Sinusukat ng aparato ang temperatura, presyon (sensor bmp180) at halumigmig (sensor dht22), ipinapakita ang mga pagbabasa sa display, at ipinapadala ang mga ito sa pampublikong lugar ng pagsubaybay.
Kapag binuksan mo ito sa unang pagkakataon pagkatapos ng firmware, o sa kawalan ng mga kaibigan mga wifi network nagpapanggap ang device bilang isang access point bukas na uri pinangalanang ESP8266.

SA com port ipinapadala ito ng device:

Kailangan mong kumonekta mula sa iyong telepono, laptop o tablet sa isang puntong pinangalanang ESP8266, at pumunta sa 192.168.4.1
Ang sumusunod na pahina ay magbubukas:


I-click ang button na I-configure ang Wifi at dadalhin ka sa page na ito


Susunod, piliin ang iyong network, ilagay ang password, at i-click ang I-save. Tapos na, magre-reboot ang device at magsisimulang gumana. Una, ang IP address at mac address ng device na may prefix ng ESP ay ipinapakita sa display at sa com port, dapat itong gamitin bilang sensor ID kapag nagrerehistro sa pampublikong monitoring site, at pagkatapos ng 15 segundo ang mga nauna ay ipinapakita sa display, sa com port, at sa pampublikong monitoring site ng mga pagbabasa mula sa mga sensor.
T1 - temperatura na may bmp180
T2 - temperatura na may dht22
P- presyon ng atmospera. Ipinapakita sa mm. rt. Art., para sa pampublikong pagsubaybay ito ay pumapasok hindi ko matandaan kung anong mga yunit, ito ay na-convert sa mm. rt. Art. awtomatiko.
H - kahalumigmigan sa porsyento.


Ang mga linyang T2 at H ay maling pananampalataya, dahil ang dht22 sensor ay hindi konektado

Ang disenyo ay gumana sa form na ito sa loob ng ilang linggo habang dahan-dahan akong nag-iisip tapos na device.
Nagpasya akong tipunin ang natapos na aparato sa isang module (ang parehong naka-install sa nodemcu)
Mabilis akong humiwalay at nag-ukit sa board.




Hindi na kailangang baguhin ang code. Ang mga numero ng port para sa mga sensor ay pareho, kailangan mo lamang ikonekta ang hubad na esp8266 karaniwang pamamaraan, para gumana ito at ma-upload ang firmware. Nakakuha ako ng 3.3 volts gamit ang isang ams 1117 3.3v stabilizer.
Ang aparato ay pinapagana ng isang 5V na charger ng telepono. 2A. Ngunit sa tingin ko ay sapat na ang isang ampere.


Para sa firmware ay nag-install ako ng hiwalay na 3-pin connector na may mga contact sa RX, TX at GND.

Pina-flash ko ang tapos na gamit na gamit usb adapter-uart. Ang bentahe nito ay mayroon itong 5v-3.3v switch, bagaman ang mga may sapat na kaalaman ay nagsasabi na ang switch na ito ay gumagana lamang para sa kapangyarihan, at ang mga antas ng rx at tx ay hindi nagbabago. Ngunit lahat ay nagtrabaho para sa akin nang walang antas ng conversion, marahil dahil ang esp8266 ay mapagparaya sa 5v sa rx tx, bagaman ito ay gumagana mula sa 3.3.
Gayundin sa natapos na board mayroong isang switch para sa pagpasok sa firmware mode (pulang slider, mas mababang slider para sa pagpasok sa firmware mode. Ikinonekta ko ang itaas na slider sa gpio12, kung sakali, marahil upang lumipat ng mga mode ng display sa hinaharap, ngunit sa ngayon hindi ito ginagamit. Hindi mo kailangang maging matalino at maglagay lang ng jumper sa pagitan ng gpio0 at GND)

Upang i-flash ang firmware kailangan mong ikonekta ang usb-uart converter sa ganitong paraan:
esp rx - uart tx
esp tx - uart rx
esp gnd - uart gnd

Pagkatapos ay ikonekta ang gpio0 sa ground gamit ang mas mababang slider sa switch, pindutin ang pindutan ng "I-reset" sa board (matatagpuan sa itaas), sa arduinoIDE piliin ang nais na com port, bilis ng pag-download (115200 para sa karamihan ng esp8266 boards), at i-click ang " I-download" na buton.
Matapos makumpleto ang pag-download, magsisimulang gumana ang aparato, ang switch ng firmware ay dapat ibalik sa posisyon ng OFF, kung hindi man sa susunod na pag-reboot mo o i-off ang kapangyarihan, ang aparato ay muling papasok sa mode ng firmware.

Alalahanin natin ang patay na sensor ng dht22. Sintomas - patuloy na nagpapakita ng halumigmig na 99.9, sa tuyong panahon ay maaaring mas kaunti. Namatay ito noong taglagas ng 2016, na nagtrabaho nang maayos sa buong tagsibol at tag-araw. Nagkaroon ng isang linggong patuloy na pag-ulan, at nakatanggap ako ng sulat mula sa pagsubaybay ng mga tao sa pamamagitan ng email na nagsasabi na ang iyong sensor ay nagpapakita ng parehong bagay sa loob ng ilang araw na magkakasunod. Hindi ko binago ang sensor, ngunit itinago lamang ito mula sa pampublikong pag-access hanggang kamakailan.
Sa tingin ko ang masikip na pabahay ay posibleng dahilan ng pagkamatay. Isang itlog mula sa Kindersurprise ang ginamit bilang base nito. Ang isang bago, mas advanced na teknolohiya at maluwag na pabahay ay binuo mula sa isang socket box at isang plug tubo ng imburnal. Narito ang magkatabing gusali:


Hindi ko binago ang sensor board, pinalitan ko lang ang patay na dht22 ng isang buhay, tinakpan ito ng tsapon varnish at sinigurado ito ng mga thermal nozzle sa itaas na bahagi ng panlabas na pabahay.
Ito ang hitsura ng sensor board diagram. Maaari ka ring gumuhit gamit ang isang marker

diagram at hitsura




Ikinabit ko ang mga sensor sa bintana at pinauna ang cable sa silid. Ang takeaway ay maaaring gawin nang higit pa, at mula sa panlabas na yunit tanggalin ang air conditioner, ngunit ito ay may problema.

Pinalamanan ang kanyang lakas ng loob sa isang mega-technological na kaso na gawa sa kahon ng pamamahagi para sa mga kable. Hindi ako nag-abala sa pangkabit, gumamit ako ng mga thermal nozzle.

Nagtipon

Matagumpay na naipasa ang humidity test. Ang sensor ay buhay.

Ito ay kapaki-pakinabang na karanasan para sa akin, sa wakas ay nakuha ko na ang aking mga kamay sa esp8266 at nakakuha ng isang matatag na gumaganang device na kapaki-pakinabang sa akin.
Umaasa ako na ang artikulong ito ay kapaki-pakinabang sa isang tao. Kung mayroon kang anumang mga paghihirap o katanungan, sumulat sa isang personal na mensahe, sasagutin ko.

Nagpaplanong bumili ng +121 Idagdag sa mga paborito Nagustuhan ko ang pagsusuri +108 +214