Selfcontrol



Projekty, dokumentace, zajímavosti ...


MKS3x3 ( Open Source Project ) zde ...

MKS3x3 : Aktualizace1 ( 29.června 2020 ) ...


Hrátky s Raspberry PI       Zde ve zkratce popíšu, jak je možné s pomocí Raspberry aktualizovat LED zobrazovače, ať již číselné nebo textové, přes webové rozhraní. Podmínkou je, aby v místě, kde budou LED zobrazovače umístěné, bylo internetové připojení, fyzicky UTP kabel ( CAT5e s konektorem RJ-45 ) na připojení k Raspberry.

       Začněme vytvořením webové stránky, kde budeme provádět aktualizaci, pro jednoduchost například dvou cen, které se nám mají kdesi zobrazovat na LED zobrazovačích. Jednoduchý formulář, kam budeme zadávat data, ovšem místo HTML se bude jednat o PHP soubor, tj. HTML rozšířitelný o PHP skript, aby bylo možné aktualizovaná data načítat a ukládat do souborů přímo na server.
       Webové rozhraní se tak bude skládat ze dvou PHP souborů. Prvním souborem prvni.php otevřeme soubor dat texty.txt a tato naformátujeme do formuláře pomocí PHP příkazu echo(). Druhý soubor druhy.php je volán metodou GET po odeslání formuláře a jsou mu tak předána zaktualizovaná data. Jeho úkolem je tato data uložit zpět do souboru texty.txt ( přepsat soubor ). Tím je webová prezentace vytvořena.
       Nyní nastupuje na scénu Raspberry. Do /etc/rc.local napíšeme jednoduchý skript, kterým budeme v pravidelných intervalech např. 5 minut načítat soubor texty.txt z výše uvedeného webového rozhraní a obsah souboru přes sériový port odesílat do připojených zobrazovačů.

Soubor rc.local již v adresáři /etc je, dopsat skript do něho můžeme například textovým editorem nano takto:

sudo nano rc.local
      

Tímto otevřeme textový editor, ve kterém dopíšeme skript a nové úpravy uložíme stiskem CTRL+O, enter a editor ukončíme CTRL+X.

Aby se skript rc.local spustil automaticky pokaždé po nabootování, je nutné mu nastavit spouštěcí práva takto:

sudo chmod +x /etc/rc.local
      

Obdobným způsobem zakážeme výstup console na sériový port, tj. zkontrolujeme soubor /boot/cmdline.txt v editoru NANO takto:

sudo nano /boot/cmdline.txt
      

Najdeme a odstraníme (zvýrazněný) text z řádky:

console=serial0,115200 console=tty1 root...

      

Opět uložíme CTRL+O a editor ukončíme CTRL+X. Nyní Raspberry restartujeme, například příkazem:

sudo shutdown -r now
      

Po rebootu Raspberry už příkazem wget odesílá znak po znaku soubor texty.txt na sériový port ( pravidelná aktualizace každých 5 minut ).

Ještě výpis skriptu ( nutno nastavit parametry přenosové rychlosti sériového portu a přístupová práva na povolení zápisu do sériového portu, jen místo standardního linuxového ttyS0 je v Raspberry sériový port pod jménem /dev/ttyAMA0:

#!/bin/sh
#
# rc.local
#

sudo stty -F /dev/ttyAMA0 cs8 cstopb 9600;						# nastaveni prenosove rychlosti serioveho portu
sudo chmod a+rw /dev/ttyAMA0;               						# povoleni zapisu do serioveho portu
while true; do
  wget --no-check-certificate  http://www.selfcontrol.cz/texty.txt -O /dev/ttyAMA0;     # soubor texty.txt do serioveho portu
  sleep 300;                  				                                # pockej 300 vterin, tj. 5 minut a pak opakuj cyklus
done

POZN: U Raspberry Pi3 změňte ttyAMA0 na ttyS0. Port ttyAMA0 je zde Bluetooth. Popřípadě můžeme Bluetooth vypnout příkazem pi3-disable-bt a ttyAMA0 bude uvolněn pro sériovou linku UART {pin 8 TXD a pin 10 RXD}.
Raspberry Pi3, popis I/O jumperu 2x20





Programovatelný modul SW24x3       S jeho pomocí můžeme snadno a rychle vyřešit právě to, co potřebujeme. Zatímco se v létě dá využít jako automatický spínač klimatizace, o dlouhých zimních večerech může dobře posloužit jako soumrakový spínač a pod.

      Rychlé naprogramování textovými soubory, které je možné psát v libovolném textovém editoru a pak nahrát do modulu pomocí terminálového programu funkcí File Send se přímo nabízí. Program můžeme také sestavovat t.zv. on-line v okně terminálu.

       Modul je vhodný jak pro pokročilé programátory, tak i pro úplné začátečníky, kteří se s programováním teprve seznamují. Jednoduché a přehledné programy také prohlubují analytické myšlení. Zde uvedené konstrukce jsou vybrány jak z hlediska užitečnosti, praktičnosti, tak i pro zábavu a radost.

Parametry SW24x3:
       Napájení 24V DC, 3 externí vstupy, 3 tlačítka, 2 relé pro spínání 230VAC/5A ( celkem 4 přepínací kontakty ), 4 analogové vstupy, 2xUART. Na modulu jsou 4 konektory, ke kterým lze připojit fotoodpory, fotodiody, teplotní čidla, IR detektory, sedmisegmentové nebo LCD displeje a další.
Modul SW24x3
Více informací ...

 

Popis funkce spínače ( programu ):

      Stiskem tlačítka IN4 sepne relé Re1, které zapne UV lampu pro osvit fotocitlivých DPS. Současně se spustí časování, které je dané napevno na 330 vteřin ( 5.5minuty ). Tato doba je optimální k osvitu a není třeba ji upravovat/měnit otočným ovladačem ( trimrem zapojeným do AN0 a pod. ).

      Po uplynutí 330 vteřin relé Re1 vypne a UV lampa zhasne. Modrá LED LD6 začne blikat, čímž víme, že v průběhu osvitu nedošlo k výpadku napájení ( po zapnutí modulu LD6 nebliká ). Dalším stiskem tlačítka IN4 spustíme nový cyklus.


POZN: řádek 90 slouží k vynulování události R pro tlačítko IN4 ihned s vypnutím relé Re1, čímž je zabráněno spuštění dalšího cyklu, pokud bychom tlašítko IN4 stiskli znovu v průběhu časování než relé Re1 vypne. Podmínky @D=R můžeme také nahradit @D=1 a tím pádem je řádek 90 zbytečný. Ovšem podmínka @D=1 má jednu citelnou vadu, pokud by došlo k zablokování spouštěcího tlačítka, UV lampa by svítila nepřetržitě.

Modul SW24x3

 

Popis funkce resetátoru ( programu ):

      Dokud počítač odesílá znaky "w" ( 119 ), po každém přijetí znaku "w" blikne na modulu SW24x3 na půl vteřiny modrá LED LD6. Pokud počítač přestane znaky posílat, po uplynutí timeoutu 10 minut po posledním znaku "w" sepne na 20 vteřin relé Re1. Následuje bliknutí modré LD6 a opět celý cyklus od začátku.


10 P1=60000
20 P2=119 
30 P3=0
100 P0=50
110 P9=P1
120 R2=1
130 P4=%1
140 IF P4=P2 THEN 100
150 IF P9=P3 THEN 200
160 IF P0>P3 THEN 130
170 R2=0
180 GOTO 130 
200 R1=1
210 R2=0
220 P9=2000
230 P4=%1
240 IF P9>P3 THEN 230
250 R1=0
260 GOTO 100

Řádek 10 slouží k nastavení proměnné P1 na 600 vteřin ( časování je po setinách směrem k nule ).
Řádek 20 k nastavení P2="w", příkaz P3=0 na řádku 30 nuluje pomocnou proměnnou P3, která se používá v relačních operátorech v testech podmínek IF ... THEN ( tento řádek lze vynechat, neboť před spuštěním programu jsou všechny proměnné vynulovány ).

Na řádku 100 nastavíme 50 setin do časovače P0 pro bliknutí LD6 ( výstup R2 ).
Na řádku 110 nastavíme timeout, časovač P9 na 10 minut ( P9 lze také nastavit přímo immediate konstantou P9=60000 ).
Na řádku 120 rozsvítíme modrou LD6.
Na řádku 130 do proměnné P4 načteme znak z USB ( portu UART1 ).
Na řádku 140 testujeme, zda je načtený znak "w" ( 119 v proměnné P2 ) a pokud ano, skočíme na řádek 100 k nové inicializaci resetátoru ( naplnění časovače P0, P9 a rozsvícení LD6 ) a zahájení nového odpočtu timeoutu.

Je-li splněna podmínka na řádku 150, víme, že vypršel timeout 10 minut a skočíme na rutinu pro sepnutí relé na 20 vteřin ( od řádku 200 ).

Je-li splněna podmínka na řádku 160, skočíme zpět na řádek 130. Pokud již časovač P0 doběhl na 0, zhasneme LD6 ( konec půlvteřinového bliknutí, řádek 170 ).
Na řádku 180 je nepodmíněný skok uzavírající hlavní smyčku.

Rutina od řádku 200 do 260 sepne na 20 vteřin relé Re1 ( resetovací čas ) a vrátí řízení zpět do hlavní smyčky na inicializaci obou časovačů, čímž se bude celý cyklus opakovat.

POZN: Řádek 230 slouží ke zneplatnění všech přijímaných znaků během resetování, aby se neakumulovaly a neovlivňovaly později hlavní smyčku, neboť požadujeme okamžitou odezvu na "w" v reálném čase.


Modul SW24x3

 

Popis funkce USB relé:

      Pomocí modulu SW24x3 připojeného k USB portu libovolného počítače jednoduše řídíme relé Re1, kterým můžeme například zapínat/vypínat světla nebo jiné spotřebiče.
       Odesláním znaku "1" ( 49 ) relé Re1 sepneme, odesláním znaku "0" relé Re1 vypneme. Odesláním znaku "2" až "9" relé na 20 až 90 vteřin sepneme s možností udržování relé Re1 v sepnutém stavu periodickým/opakovaným odesílám daného znaku, přičemž interval odesílání musí být kratší než doba sepnutí relé.


10 P1=48
20 P2=49
30 P3=57
40 P4=1000
50 P5=0
100 P6=%1
110 IF P6< P1 THEN 100
120 IF P6=P1  THEN 300
130 IF P6=P2  THEN 400
140 IF P6>P3  THEN 100
150 R1=1
160 P6-48
170 P6=P4*P6
180 P0=P6
200 IF P0=P5 THEN 300
210 P6=%1
220 IF P6< P1 THEN 200
230 IF P6=P1  THEN 300
240 IF P6=P2  THEN 400
250 IF P6>P3  THEN 200
260 GOTO 160
300 R1=0
310 GOTO 100
400 R1=1
410 GOTO 100
Modul SW24x3

 

Popis funkce RF relé:

      Předchozí program USB relé jednoduše upravíme doplněním řádku 5 pro inicializaci bezdrátové komunikace a do konektoru JP3 připojíme bezdrátový přijímač RF433. Na řádcích 100 a 210 zaměníme UART1 za UART2, ke kterému je RF433 připojen. Na straně vysílače musíme nastavit pro TX stejný kanál jako zde pro RX ( příjem dat ), viz příkaz SET na pátém řádku. Číslo přijímacího ( RX ) a vysílacího ( TX ) kanálu musí být rozdílné, jinak se budou navzájem rušit. Vysílačem může být jak jiný modul SW24x3, k jehož portu UART2 je připojen externí vysílač TX433 nebo tranceiverem TCX433, kterým lze jednak vysílat, ale i přijímat. Data lze přenášet také z RF ovladačů DOK2 a pod.

      Na řádku 40 provedeme zkrácení intervalu sepnutí relé v desetinách vteřiny ( P4=10 , P4 použita v násobení na ř. 170 ).


5  SET(%2,"RF:RX=10,TX=12")
10 P1=48
20 P2=49
30 P3=57
40 P4=10
50 P5=0
100 P6=%2
110 IF P6< P1 THEN 100
120 IF P6=P1  THEN 300
130 IF P6=P2  THEN 400
140 IF P6>P3  THEN 100
150 R1=1
160 P6-48
170 P6=P4*P6
180 P0=P6
200 IF P0=P5 THEN 300
210 P6=%2
220 IF P6< P1 THEN 200
230 IF P6=P1  THEN 300
240 IF P6=P2  THEN 400
250 IF P6>P3  THEN 200
260 GOTO 160
300 R1=0
310 GOTO 100
400 R1=1
410 GOTO 100

      A ještě program pro vysílací část. Tlačítkem IN4 pošleme znak "1" ( proměnná P3 ) pro sepnutí relé Re1, stiskem tlačítka IN5 odešleme znak "0" ( P2 ) pro rozepnutí relé Re1. Vstupem IN1, dokud bude aktivní ( svítí LD1 ), budeme periodicky odesílat "5", po uvolnění vstupu IN1 se "5" přestane odesílat a relé Re1 na straně přijímače do půl vteřiny vypne. Kratší prodlevu získáme nahrazením znaku "5" za "4", "3" nebo "2", delší prodlevu za "6" až "9" ( 0.6 až 0.9 vteřiny ) v proměnné P4 nebo úpravou programu v přijímací části. Na řádku 10 nastavíme proměnnou P1 na rychlost 10 znaků za vteřinu ( odeslání znaku "5" v proměnné P4 každých 10 setin vteřiny, pokud je aktivní vstup IN1 ).

5  SET(%2,"RF:RX=12,TX=10")
10 P1=10
20 P2=48
30 P3=49
40 P4=53
50 P5=0
100 IF @D=R THEN 200 
110 IF @E=R THEN 300
120 IF @A=0 THEN 100
130 PRINT2(P4)
140 P0=P1
150 IF @D=R  THEN 160
160 IF @E=R  THEN 170
170 IF P0>P5 THEN 150
180 GOTO 120
200 PRINT2(P3)
210 GOTO 100
300 PRINT2(P2)
310 GOTO 100




SW perličky, jednoduché prográmky, formáty souborů





 



Řídící DPS pro číselník.