Servisní analyzátor
Napsal: 05 úno 2018, 18:36
Ahoj,
Občas se tu objevují nápady pro použití arduina jako PLC v průmyslu, což podle mě není nejlepší nápad. Ale kdo se stará o průmyslové stroje /výrobní linky mi dá za pravdu, že se občas hodí sledovat stavy vstupů od fotobuněk, indukčních snímačů apod. A na tohle se arduino parádně hodí. Funkce je jednoduchá: načtu 8 vstupů a jako byte odešlu po sériové lince. V pc rozkóduji na jednotlivé signály a zobrazím.
Použil jsem arduino nano, krabička byla vytištěna na 3d tiskárně.

Popis firmware
seznam vstupů:
tento seznam projdeme a nastavíme vstupy jako vstupní s vnitřním PULLUP odporem:
naplníme byte stav stavy vstupů a pošleme:
To je vše. Pokud z PC pošlete znak 'A' přepne se analyzátor do analogového režimu pro měření pomocí proudového transformátoru SCT013.
Oživení
Pro kontrolu doporučuji odkomentovat:
pro pomalý výpis stavů na sériovou linku.
Pokud je vše ok, zakomentujeme zpět řádek a znovu nahrajeme program sa.ino
Zobrazení
Když jsem tento analyzátor stavěl zobrazovací část jsem napsal v processingu - https://github.com/blindp/sa/blob/maste ... a_java.pde.

Pokud se rozhodnete pro processing, možná budete muset upravit pauzu pro odesílaní dat v sa.ino
Celé je to takové pomalé a těžkopádné prostě java. 
Proto jsem přešel k zmijozelu a přepsal to do pythonu.

V počítači je třeba mít nainstalovaný python, modul serial, tkinter a modul pygraf umístit do stejného adresáře jako sa.pyw
tento port se pokouší otevřít při spuštění.Lze vybrat i jiný za běhu programu z menu-> port (analyzátor musí být připojen před spuštěním sa.pyw):
Čísla v závorkách (10,200,200,200) jsou rychlosti obnovování grafu v ms. Můžete si tedy vytvořit vlastní profily:
V popisu je sice uvedeno, že lze připojit 8 vstupů, ale zobrazuji jen 4, víc jsem nepotřeboval. Nic Vám nebrání si aplikaci sami rozšířit.
Stejně tak jsem moc nepoužil i ty analogové vstupy, proto je v programu nenajdete. A pozor! Nejsou galvanicky odděleny.
Vše najdete zde: https://github.com/blindp/sa
Závěrem bych chtě říct, že se nejedná o nic velkolepého, ale dost jsem se toho naučil, objevil kouzlo jazyka python a věřím, že i Vám tento projekt něco přinese, inspiruje.
BP
Občas se tu objevují nápady pro použití arduina jako PLC v průmyslu, což podle mě není nejlepší nápad. Ale kdo se stará o průmyslové stroje /výrobní linky mi dá za pravdu, že se občas hodí sledovat stavy vstupů od fotobuněk, indukčních snímačů apod. A na tohle se arduino parádně hodí. Funkce je jednoduchá: načtu 8 vstupů a jako byte odešlu po sériové lince. V pc rozkóduji na jednotlivé signály a zobrazím.
Použil jsem arduino nano, krabička byla vytištěna na 3d tiskárně.

Popis firmware
seznam vstupů:
Kód: Vybrat vše
byte digPins[] = {5,6,7,8,9,10,11,12};
Kód: Vybrat vše
for(int i=0;i<sizeof(digPins);i++) {
pinMode(digPins[i],INPUT_PULLUP);
}
Kód: Vybrat vše
for(int i=0;i<8;i++) {
bitWrite(stav,i,!digitalRead(digPins[i]));
Serial.write(stav);
Oživení
Pro kontrolu doporučuji odkomentovat:
Kód: Vybrat vše
//#define DEBUG
Pokud je vše ok, zakomentujeme zpět řádek a znovu nahrajeme program sa.ino
Zobrazení
Když jsem tento analyzátor stavěl zobrazovací část jsem napsal v processingu - https://github.com/blindp/sa/blob/maste ... a_java.pde.

Pokud se rozhodnete pro processing, možná budete muset upravit pauzu pro odesílaní dat v sa.ino
Kód: Vybrat vše
#define DELAY_DIGITAL 5

Proto jsem přešel k zmijozelu a přepsal to do pythonu.

V počítači je třeba mít nainstalovaný python, modul serial, tkinter a modul pygraf umístit do stejného adresáře jako sa.pyw
tento port se pokouší otevřít při spuštění.Lze vybrat i jiný za běhu programu z menu-> port (analyzátor musí být připojen před spuštěním sa.pyw):
Kód: Vybrat vše
DPORT = '/dev/ttyUSB0' #defaultni port
Kód: Vybrat vše
profilMenu.add_command(label="CH1 : kolečko, CH2-CH4 : Foto", command=lambda: parent.setdelay((10,200,200,200)))
profilMenu.add_command(label="CH1-CH4 : Foto - rychlé", command=lambda: parent.setdelay((200,200,200,200)))
profilMenu.add_command(label="CH1-CH4 : Foto - pomalé", command=lambda: parent.setdelay((400,400,400,400)))
profilMenu.add_command(label="Vlastní1 ---", command=lambda: parent.setdelay((400,400,400,400)))
profilMenu.add_command(label="Vlastní2 ---", command=lambda: parent.setdelay((400,400,400,400)))
Stejně tak jsem moc nepoužil i ty analogové vstupy, proto je v programu nenajdete. A pozor! Nejsou galvanicky odděleny.
Vše najdete zde: https://github.com/blindp/sa
Závěrem bych chtě říct, že se nejedná o nic velkolepého, ale dost jsem se toho naučil, objevil kouzlo jazyka python a věřím, že i Vám tento projekt něco přinese, inspiruje.
BP