DYNAMENT AN0007 Komunikace mezi Arduinem a Platinum

Specifikace
- Název produktu: NÁPOVĚDA K KOMUNIKACÍM PŘEVODCŮM ARDUINO DO PLATINUM
- Výrobce: Dynament Limited
- Adresa: HermitagPrůmyslová zóna e Lane, Kings Mill Way, Mansfield, Nottinghamshire, NG18 5ER, Spojené království
- Kontakt: Tel.: 44 (0)1623 663636, E-mail: sales@dynament.com, Webmísto: www.dynament.com
- Vydání: 1.2, Datum: 09
Návod k použití produktu
Připojení senzoru
Tento datový list používá Arduino Mega jako příklad.ampnapř. Připojte následovně:
- 5V -> 5V pin Arduina
- 0V -> Uzemnění Arduina
- Vysílač -> Arduino RX1
- Rx -> Jde na výstup děliče napětí.
Vstup jde do Arduino Txe
svtage Kompatibilita
Arduino používá logické napětí 5V, zatímco Platinum Sensor používá 3.3V. Použijte napětí...tagdělič s doporučenými hodnotami pro R1 a R2 4K7, aby se zabránilo poškození senzoru.
Nastavení Arduino IDE
- Stáhněte si nejnovější verzi softwaru Arduino IDE z Arduina. webmísto.
- V rozbalovací nabídce nástrojů vyberte desku Arduino, procesor a port.
Nahrávání kódu
- Zkopírujte poskytnutý exampkód do Arduino IDE.
- Nahrajte kód do Arduina kliknutím na šipku.
- Otevřete sériový monitor pro view přenos dat.
Připojení senzoru
Tento datový list používá Arduino Mega jako příklad.ampArdunio Mega nabízí více než jeden komunikační port, proto se komunikační port 1 používá pro komunikaci se senzorem a komunikační port 0 se používá pro tisk do počítače.
Arduino používá logické napětí 5 V, zatímco Platinum Sensor používá 3.3 V, takže aby se zabránilo poškození senzoru, je nutné...tagMusí být použit dělič. Doporučené hodnoty pro R1 a R2 jsou 4K7Ω.

Vysílací linka senzoru vedoucí k přijímači Arduina nepotřebuje dělič, protože 3.3 V je pro Arduino přijatelný vstup.
Pro napájení senzoru musí být připojen k 5V a 0V. K tomu můžete použít piny na Arduinu.
Po dokončení by měl mít senzor připojeny následující piny: 5V -> 5V pin Arduina
- 0V -> Uzemnění Arduina
- Vysílač -> Arduino RX1
- Rx -> Jde na výstup děliče napětí. Vstup jde na Arduino Tx.
- Po dokončení by měl být váš Platinum Sensor připojen, jak je znázorněno:

- Pokud používáte Arduino s pouze jedním komunikačním portem (jako je Arduino Uno), budete ho muset připojit k němu. Pokud však použijete sériový monitor (viz dále), zobrazí se také přenášený hexadecimální kód.
Arduino IDE
Jdi k Arduinu weba stáhněte si nejnovější verzi softwaru Arduino IDE. Po instalaci byste měli vidět následující obrazovku:
V rozbalovací nabídce nástrojů vyberte desku Arduino, procesor a port, který používáte:
Kopie v tomto příkladuample kód:
- void send_read_live_data_simple(); void receive_read_live_data_simple();
- void setup() { Serial.begin(38400); Serial1.begin(38400); }
- void loop(){send_read_live_data_simple();receive_read_live_data_simple(); delay(5000);}
- void send_read_live_data_simple(){ // 0x10, 0x13, 0x06, 0x10, 0x1F, 0x00, 0x58 Serial1.write(0x10); Serial1.write(0x13); Serial1.write(0x06); Serial1.write(0x10); Serial1.write(0x1F); Serial1.write(0x00);Serial1.write(0x58); }
- void receive_read_live_data_simple(){while (Serial1.available()) {Serial.print(Serial1.read(), HEX); Serial.print(“|”); } Serial.println(); }

- Kliknutím na šipku nahrajete kód do Arduina.
- Po naprogramování Arduina otevřete sériový monitor.


Vysvětlení kódu
Arduino IDE používá k programování Arduina jazyk C++.![]()
- Tento řádek je deklarace pro dopředné zpracování. Používá se k tomu, aby mikrokontroléru sdělil, že dále v programu, funkce 'send_read_live_data_simple' a
Bude volána funkce 'receive_read_live_data_simple'.
- Další je funkce nastavení. Tento kód se spustí pouze jednou při spuštění. Spouští porty Serial0 a Serial1. Serial0 je to, co se zobrazuje na obrazovce sériového monitoru. Serial1 je port pro komunikaci se senzorem.

- Toto je hlavní smyčka; tento kód se opakovaně opakuje. Z názvů funkcí můžete vidět, že odesílá požadavek na čtení zjednodušené verze datové struktury. Poté čte přijímací port, aby si přečetl odpověď. Poté mikrokontrolér čeká 5000 ms.

- Tato funkce zapíše požadavek na získání jednoduché struktury živých dat na sériový port 1. Jak již bylo zmíněno, pokud máte pouze jeden sériový port, měli byste změnit Serial1 na Serial.
Úplný seznam příkazů naleznete v dokumentu komunikačního protokolu Premier sensor. Zde je část dokumentu, která vám říká, co pro tento příkaz napsat:
Jednoduché čtení živých dat
Odešlete následující bajty:
DLE, RD. Proměnná 10, OLE, EOE Kontrolní součet - horní bajt. Kontrolní součet - dolní bajt nebo CRC. Horní bajt, CRC - dolní bajt, tj. ox10, ox13, 006, ox10, oxlF, OXOO, ox58, Ox9B, Ox8F.
Tato funkce smyčkou provede čtení, dokud jsou stále k dispozici data z platinového senzoru. Funkce Serial1.read() načte data ze sériového portu Serial1, který je připojen k senzoru, a vytiskne je na Serial0, aby byla viditelná na sériovém monitoru. Znak '|' se poté vytiskne pro rozdělení každého přijatého bajtu a jeho přehlednější zobrazení na sériovém monitoru.
Po dokončení zapíše nový řádek do sériového monitoru.
Rozdělení paketů
Obrázky 8 a 9 znázorňují výstup sériového dekodéru připojeného k přijímacím a vysílacím linkám.

Obrázky 10 a 11 zobrazují odchozí a příchozí hexadecimální kód se sloupcem, který ukazuje, o který příkaz se jedná.


Upozorňujeme, že údaj o plynu je desetinné číslo, nikoli celé číslo. Toto desetinné číslo je ve formátu IEEE-754, k jeho převodu můžete použít online převodník, jako je tento. Hodnota plynu v tomto případě ukazuje -250 (protože v dané chvíli byla v chybovém režimu).
Použití Serial.read()
Předchozí kód pouze vypisoval přijatá data do sériového monitoru. Pokud chcete data uložit do proměnných, budete muset provést další zpracování. Přijatý paket je rozdělen na bajty, proto budete muset některá z těchto dat zřetězit do proměnných.
Serial1.Read() vrací celé číslo (které má pro Arduino 16 bitů); používá se však pouze prvních 8 bitů. Díky tomu jej můžeme zkopírovat do menšího datového typu, který má pouze 8 bitů; v tomto případě použiji char.![]()
Pro pakety, které jsou dlouhé pouze jeden bajt, to funguje dobře:
U paketů o délce 2 nebo 4 bajty budete muset data zřetězit.
Můžete to udělat mnoha různými způsoby, tady to, co udělám, je posunout data doleva a pak je operovat operací NEBO. 
Pomocí tohoto kódu, pokud je readByte1 0x34 a readByte2 0x12.
- (int)readByte2 // toto převede 0x12 na 0x0012.
- (int)readByte2 << 8 // toto posune bity o jeden bajt, čímž se hodnota vrátí na 0x1200.
- (int)readByte2 << 8 | readByte1 // toto se pak operací OR zkombinuje, přičemž 0x34 dává 0x1234.
Dalším způsobem, jak to udělat, je vložit hodnoty do pole a poté toto pole převést na požadovaný typ:

Znaky (chars) jsou dlouhé jeden bajt, zatímco čísla s plovoucí čárkou (float) jsou dlouhá 4 bajty. Z tohoto důvodu, pokud vytvoříme pole o 4 znakech s našimi hodnotami, změníme typ na float.
V tomto případě je readArray ukazatel na pole znaků. (float*)readArray tato část jej převede na ukazatel na číslo s plovoucí čárkou a poté se na začátek přidá *, aby se získala hodnota daného čísla s plovoucí čárkou.
Pokročilé poznámky k převodu
- Funkce Serial.read() vrací celé číslo místo znaku, protože chyby vracejí záporné hodnoty. Váš program by to měl zkontrolovat.
- Místo typů char a int by se měly používat uint8_t a uint16_t, protože tyto typy nemají standardní velikost (na mém PC je int 32 bitů, zatímco na Arduinu je to 16 bitů).
- Komunikační protokol obsahuje znaky vyplněné bajty (známé také jako řídicí znaky). Toto je podrobněji vysvětleno v dokumentu tds0045 Premier sensor Communications protocol. Z tohoto důvodu může být jednoduchý paket čtených živých dat občas větší, než se očekávalo.
FAQ
Otázka: Co mám dělat, když mám Arduino Uno pouze s jedním COM portem?
A: Připojte platinový senzor k tomuto portu. Při použití sériového monitoru se také zobrazí přenášený hexadecimální kód.
Dokumenty / zdroje
![]() |
DYNAMENT AN0007 Komunikace mezi Arduinem a Platinum [pdfUživatelská příručka AN0007 Arduino na Platinum COMM, AN0007, Arduino na Platinum COMM, na Platinum COMM, Platinum COMM |
