- Pagkakaiba sa pagitan ng Komunikasyon ng UART at RS485
- Kinakailangan ang Mga Bahagi
- Circuit Diagram para sa Long Distance Wired Communication
- MAX485 UART-RS485 Converter Module
- Ethernet CAT-6E Cable
- Paliwanag ng Arduino Code
- Konklusyon
Gumagamit kami ng Microcontroller Development Boards tulad ng Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430, atbp sa loob ng mahabang panahon ngayon sa aming mga maliliit na proyekto kung saan ang karamihan sa mga oras na distansya sa pagitan ng mga sensor at board ay hindi hihigit sa ilang sentimetro sa max at sa mga distansya na ito, ang komunikasyon sa pagitan ng magkakaibang mga module ng sensor, relay, actuators, at Controller ay madaling gawin sa mga simpleng wire na lumulukso nang hindi kami nag-aalala tungkol sa pagbaluktot ng signal sa daluyan at mga ingay ng Elektrikal na gumagapang dito. Ngunit kung nagtatayo ka ng isang sistema ng kontrol kasama ang mga board ng pag-unlad na higit sa distansya na higit sa 10 hanggang 15 metro, dapat mong isaalang-alang ang ingay at signal power sapagkat kung nais mong gumana ng maaasahan ang iyong system, hindi mo kayang mawala ang data habang inililipat.
Mayroong maraming iba't ibang mga uri ng mga serial protocol ng komunikasyon tulad ng I2C at SPI na maaaring madaling ipatupad sa Arduino at ngayon titingnan natin ang isa pang pinaka-karaniwang ginagamit na protokol na tinatawag na RS485 na karaniwang ginagamit sa mataas na ingay na mga pang-industriya na kapaligiran upang ilipat ang data isang malayong distansya. Sa tutorial na ito, matututunan namin ang tungkol sa RS485 na komunikasyon sa komunikasyon at kung paano ito ipapatupad sa dalawang Arduino Nano na mayroon kami sa amin at kung paano gamitin ang MAX485 RS485 sa UART Module ng conversion. Dati gumanap din kami ng MAX485 na komunikasyon sa Arduino at MAX485 na Komunikasyon sa Raspberry pi, maaari mo ring suriin ang mga ito kung interesado.
Pagkakaiba sa pagitan ng Komunikasyon ng UART at RS485
Karamihan sa mga low-cost sensor at iba pang mga module tulad ng GPS, Bluetooth, RFID, ESP8266, atbp na karaniwang ginagamit sa Arduino, ang Raspberry Pi sa merkado ay gumagamit ng komunikasyon na nakabatay sa UART TTL sapagkat nangangailangan lamang ito ng 2 wires TX (Transmitter) at RX (Tumatanggap). Hindi ito isang pamantayan na protocol ng Komunikasyon, ngunit ito ay isang pisikal na circuit na kung saan maaari kang magpadala at makatanggap ng serial data sa iba pang mga peripheral. Maaari lamang itong magpadala / makatanggap ng data nang serial, kaya't unang binago nito ang parallel data sa serial data at pagkatapos ay inililipat ang data.
Ang UART ay isang Asynchronous transmission device kaya't walang signal ng orasan upang mai-sync ang data sa pagitan ng dalawang aparato sa halip ay gumagamit ito ng mga start at stop bits sa simula at pagtatapos ng bawat packet ng data ayon sa pagkakabanggit upang markahan ang mga paa't kamay ng inililipat na data. Ang data na nailipat sa UART ay isinaayos sa mga packet. Ang bawat packet ay naglalaman ng 1 start bit, 5 hanggang 9 data bits (depende sa UART), isang opsyonal na parity bit, at 1 o 2 stop bits. Napakahusay na dokumentado at malawak na ginamit at mayroon din itong parity bit upang pahintulutan ang error sa pagsuri. Ngunit may ilang mga limitasyon dito dahil hindi nito masusuportahan ang maraming alipin at maraming panginoon at ang maximum na frame ng data ay limitado sa 9 na piraso. Para sa paglipat ng data, ang mga rate ng baud ng parehong Master at Slave ay dapat na nasa pagitan ng 10% ng bawat isa. Ipinapakita sa ibaba ang halimbawa ng kung paano ang isang character ay isang transmiter sa isang linya ng data ng UART. Sinusukat ang Signal High at Lows laban sa antas ng GND kaya ang paglilipat sa antas ng GND ay magkakaroon ng mapaminsalang epekto sa paglipat ng data.
Sa kabilang banda, ang RS485 ay higit na komunikasyon na batay sa industriya na binuo para sa isang network ng maraming mga aparato na maaaring magamit sa mahabang distansya at sa mas mabilis ding bilis. Nagpapatakbo ito sa isang kaugalian na paraan ng pagbibigay ng senyas ng pagsukat kaysa sa pagsukat ng boltahe wrt GND pin. Ang mga signal ng RS485 ay lumulutang at ang bawat signal ay inililipat sa isang linya na Sig + at isang linya na Sig-.
Kinukumpara ng tagatanggap ng RS485 ang pagkakaiba ng boltahe sa pagitan ng parehong mga linya, sa halip na ang ganap na antas ng boltahe sa isang linya ng signal. Gumagana ito nang maayos at pinipigilan ang pagkakaroon ng mga ground loop, isang pangkaraniwang mapagkukunan ng mga problema sa komunikasyon. Ang mga pinakamahusay na resulta ay makamit kung ang mga Sig + at Sig-line ay baluktot habang ang pag-ikot ay nagpapawalang bisa ng epekto ng ingay na electromagnetic na sapilitan sa isang cable at magbigay ng isang mas mahusay na kaligtasan sa sakit laban sa ingay na nagbibigay-daan sa RS485 na ipadala ang data hanggang sa 1200m na saklaw. Pinapayagan din ng baluktot na pares ang mga bilis ng paghahatid na mas mataas kaysa sa kung ano ang posible sa mga tuwid na kable. Sa maliliit na distansya ng paghahatid, ang bilis ng hanggang sa 35Mbps ay maaaring mapagtanto sa RS485 bagaman ang bilis ng paghahatid ay babawasan ng may distansya. Sa 1200m ng bilis ng paghahatid, maaari mo lamang magamit ang 100bps ng bilis ng paghahatid. Kailangan mo ng isang espesyal na Ethernet cable para mapagtanto ang komunikasyon na ito protocol. Maraming mga kategorya ng mga Ethernet cable na maaari naming magamit tulad ng CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, atbp. Sa aming tutorial, gagamit kami ng CAT-6E cable na mayroong 4 baluktot na mga pares ng 24AWG wires at maaaring suportahan hanggang sa 600MHz. Natapos ito sa magkabilang dulo ng isang konektor ng RJ45. Karaniwang mga antas ng boltahe ng linya mula sa mga tsuper ng linya ay isang minimum na ± 1.5 V hanggang sa isang maximum na halos ± 6 V. Ang sensitibo sa pag-input ng tatanggap ay ± 200 mV. Ang ingay sa saklaw na ± 200 mV ay mahalagang na-block dahil sa pagkansela ng ingay na karaniwang-mode. Isang halimbawa kung paano maililipat ang isang byte (0x3E) sa dalawang linya ng Komunikasyon ng RS485.
Kinakailangan ang Mga Bahagi
- 2 × MAX485 Converter Module
- 2 × Arduino Nano
- 2 × 16 * 2 Alphanumeric LCD
- 2 × 10k Wiper Potentiometers
- Cat-6E Ethernet Cable
- Mga Breadboard
- Jumper Wires
Circuit Diagram para sa Long Distance Wired Communication
Ipinapakita ng imahe sa ibaba ang diagram ng transmiter at circuit ng tatanggap para sa malayuang komunikasyon ng Arduino na may wired. Tandaan na ang parehong mga circuit ng transmiter at receiver ay magkapareho ang nag-iisang bagay na naiiba ay ang code na nakasulat dito. Gayundin para sa pagpapakita, gumagamit kami ng isang board bilang isang transmiter at isang board bilang isang receiver, ngunit madali naming mai-program ang mga board upang gumana bilang parehong transmitter at receiver na may parehong set-up
Ang diagram ng koneksyon para sa itaas na circuit ay ibinibigay din sa ibaba.
Tulad ng nakikita mo sa itaas mayroong dalawang malapit na magkaparehong mga pares ng mga circuit na ang bawat isa ay mayroong Arduino nano, 16 * 2 Alphanumeric LCD, at MAX485 UART sa RS485 converter IC na konektado sa bawat dulo ng isang Ethernet Cat-6E cable sa pamamagitan ng isang RJ45 konektor. Ang cable na ginamit ko sa tutorial ay 25m ang haba. Magpadala kami ng ilang data mula sa panig ng transmiter sa kable mula sa Nano na na-convert sa mga signal ng RS485 sa pamamagitan ng MAX RS485 Module na gumagana sa Master Mode.
Sa pagtanggap, ang MAX485 converter module ay gumagana bilang isang Alipin, at pakikinig sa paghahatid mula sa Master muli nitong binabago ang RS485 Data na natanggap sa karaniwang 5V TTL UART signal na mabasa ng tumatanggap na Nano at ipinakita sa 16 * 2 Alphanumeric LCD na konektado dito.
MAX485 UART-RS485 Converter Module
Ang module na UART-RS485 Converter na ito ay mayroong on-board MAX485 chip na kung saan ay isang low-power at slay-rate-limitadong transceiver na ginamit para sa komunikasyon ng RS-485. Gumagana ito sa isang solong + 5V power supply at ang na-rate na kasalukuyang 300 μA. Gumagana ito sa kalahating-duplex na komunikasyon upang ipatupad ang pagpapaandar ng pag-convert ng antas ng TTL sa antas ng RS-485 na nangangahulugang maaari itong magpadala o makatanggap sa anumang oras, hindi pareho, maaari itong makamit ang isang maximum na rate ng paghahatid ng 2.5Mbps. Ang MAX485 transceiver ay kumukuha ng kasalukuyang supply na nasa pagitan ng 120μA at 500μA sa ilalim ng hindi na -load o ganap na na-load na mga kondisyon kapag ang driver ay hindi pinagana. Ang driver ay limitado para sa kasalukuyang short-circuit at ang mga output ng driver ay maaaring mailagay sa isang mataas na estado ng impedance sa pamamagitan ng thermal shutdown circuit. Ang input ng tatanggap ay may tampok na nabigo na ligtas na ginagarantiyahan ang mataas na output ng lohika kung ang input ay bukas na circuit.Bilang karagdagan, mayroon itong malakas na pagganap na laban sa pagkagambala. Mayroon din itong onboard LEDs upang ipakita ang kasalukuyang estado ng maliit na tilad ibig sabihin kung ang chip ay pinalakas o ang paglilipat o pagtanggap ng data na ginagawang mas madaling i-debug at gamitin.
Ang circuit diagram na ibinigay sa itaas ay nagpapaliwanag kung paano ang onboard MAX485 IC ay konektado sa iba't ibang mga bahagi at magbigay ng 0.1-inch standard na spacing header na gagamitin sa breadboard kung nais mo.
Ethernet CAT-6E Cable
Kapag naisip namin ang paglipat ng data sa malayo, agad naming naisip ang tungkol sa pagkonekta sa internet sa pamamagitan ng mga Ethernet cable. Ngayon, karamihan sa amin ay gumagamit ng Wi-Fi para sa pagkakakonekta sa internet ngunit mas maaga ginagamit namin ang mga Ethernet cable na papunta sa bawat personal na computer upang ikonekta ito sa internet. Ang pangunahing dahilan sa likod ng paggamit ng mga Ethernet Cables na ito sa normal na mga wire ay nagbibigay sila ng mas mahusay na proteksyon laban sa ingay na gumagapang sa at pagbaluktot ng signal sa mataas na distansya. Mayroon silang Shielding Jacket sa layer ng pagkakabukod upang maprotektahan laban sa pagkagambala ng Electromagnetic at gayundin ang bawat pares ng mga wire ay baluktot upang maiwasan ang anumang kasalukuyang pagbuo ng loop at sa gayon ay mas mahusay na proteksyon laban sa ingay. Sila ay madalas na winakasan ng 8 pin RJ45 konektor sa alinman sa dulo. Maraming mga kategorya ng mga Ethernet cable na maaari naming magamit tulad ng CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, atbp. Sa aming tutorial, gagamit kami ng CAT-6E cable na mayroong 4 baluktot na mga pares ng 24AWG wires at maaaring suportahan ang hanggang sa 600MHz.
Ipinapakita ang larawan kung paano ang isang pares ng mga wire ay napilipit sa loob ng Insulation Layer ng CAT-6E Cable
Ang ibig sabihin ng RJ-45 Connector para sa CAT-6E Ethernet Cable
Paliwanag ng Arduino Code
Sa proyektong ito, gumagamit kami ng dalawang Arduino Nano, isa bilang isang transmiter at Isa bilang isang tagatanggap bawat nagmamaneho ng 16 * 2 Alphanumeric LCD upang maipakita ang mga resulta. Kaya, sa Arduino code, magtutuon kami sa pagpapadala ng data at ipakita ang nagpadala o nakatanggap ng data sa LCD screen.
Para sa Transmitter Side:
Nagsisimula kami sa pagsasama ng pamantayang aklatan para sa pagmamaneho ng LCD at ideklara ang D8 pin ng Arduino Nano bilang isang output pin na sa paglaon ay gagamitin namin upang ideklara ang MAX485 Module bilang isang transmiter o Receiver.
int enablePin = 8; int potval = 0; # isama
Papunta ngayon sa bahagi ng pag-setup. Hihilahin namin ang mataas na paganahin ang pin upang ilagay ang MAX485 module sa transmitter mode. Dahil ito ay isang half-duplex IC kung kaya't hindi ito maaaring magpadala at tumanggap ng sabay. Sisimulan din namin ang LCD dito at mag-print ng isang maligayang mensahe.
Serial.begin (9600); // initialize serial at baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Transmitter Nano"); pagkaantala (3000); lcd.clear ();
Ngayon sa loop, nagsusulat kami ng isang patuloy na pagtaas ng halaga ng integer sa mga linya ng Serial na pagkatapos ay naihatid sa iba pang mga nano. Ang halagang ito ay naka-print din sa LCD para sa pagpapakita at pag-debug.
Serial.print ("Sent Value ="); Serial.println (potval); // Serial Sumulat ng POTval sa RS-485 Bus lcd.setCursor (0,0); lcd.print ("Naihatid na Halaga"); lcd.setCursor (0,1); lcd.print (potval); pagkaantala (1000); lcd.clear (); potval + = 1;
Tabi ng Tagatanggap:
Dito muli, nagsisimula kaming kasama ang pamantayang aklatan para sa pagmamaneho ng LCD at ideklara ang D8 pin ng Arduino Nano bilang isang output pin na sa paglaon ay gagamitin namin upang ideklara ang MAX485 Module bilang isang transmiter o Receiver.
int enablePin = 8; # isama
Papunta ngayon sa bahagi ng pag-setup. Hihilahin namin ang mataas na paganahin ang pin upang ilagay ang module na MAX485 sa mode ng tagatanggap. Dahil ito ay isang half-duplex IC kung kaya't hindi ito maaaring magpadala at tumanggap nang sabay. Sisimulan din namin ang LCD dito at mag-print ng isang maligayang mensahe.
Serial.begin (9600); // initialize serial at baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Receiver Nano"); pagkaantala (3000); digitalWrite (enablePin, LOW); // (Pin 8 palaging LOW upang makatanggap ng halaga mula sa Master)
Ngayon sa loop, suriin namin kung mayroong anumang magagamit sa serial port at pagkatapos ay basahin ang data at dahil ang papasok na data ay isang integer, pinaparehas namin ito at ipinapakita sa konektadong LCD.
int pwmval = Serial.parseInt (); // Makatanggap ng halaga ng INTEGER mula sa Master throught RS-485 Serial.print ("Nakakuha ako ng halaga"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Natanggap na Halaga"); lcd.setCursor (0,1); lcd.print (pwmval); pagkaantala (1000); lcd.clear ();
Konklusyon
Ang setup ng pagsubok na ginamit namin para sa proyektong ito ay matatagpuan sa ibaba.
Ang kumpletong pagtatrabaho ng proyektong ito ay matatagpuan sa video na naka-link sa ibaba. Ang pamamaraang ito ay isa sa simple at madaling ipatupad ng mga pamamaraan upang ilipat ang data sa mahabang distansya. Sa proyektong ito, gumamit lamang kami ng baud rate na 9600 na nasa ilalim ng maximum na bilis ng paglipat na maaari nating makamit gamit ang MAX-485 Module ngunit ang bilis na ito ay angkop para sa karamihan ng mga module ng sensor doon at hindi namin talaga kailangan lahat ng maximum na bilis habang nagtatrabaho kasama ang Arduino at iba pang mga development board maliban kung ginagamit mo ang cable bilang isang koneksyon sa ethernet at kinakailangan ang lahat ng bandwidth at bilis ng paglipat na maaari mong makuha. Maglaro sa paligid gamit ang bilis ng paglipat sa iyong sarili at subukan ang iba pang mga uri ng ethernet cable din. Kung mayroon kang anumang mga katanungan, iwanan ang mga ito sa seksyon ng komento sa ibaba o gamitin ang aming mga forum at susubukan ko ang aking pinakamahusay na pagsagot sa kanila. Hanggang doon, adios!