Strona zgodnie z Polityką plików cookies wykorzystuje pojedynczy plik cookie do poprawnego działania licznika odwiedzin.
Możesz określić warunki przechowywania lub dostępu do plików cookies w ustawieniach Twojej przeglądarki.

 Centrum Usług Sieciowych 
 
Komputerowy system sterowania urządzeniami
 
 
Ostatnia aktualizacja: 04.08.2015
Wstęp
Sprzęt
Oprogramowanie
Instalacja
AP i DHCP
ProFTPd
Firewall
Apache z PHP
MySQL
Dźwięk
Obsługa LPT
Moduł 230V
LPT przez WWW
Cron
Muzyka  NEW
Budzik WWW
Termometr
Automatyzacja
Kontrola dostępu
Co dalej?
Moduł 1-Wire z termometrem

Najprostszy moduł jaki znalazłem, podłączany do portu COM wygląda następująco:

image

Tu mamy listę potrzebnych elementów:

wtyczka DB-9
rezystor 1.5k
2 x dioda 1N5818 Schottky
1 x dioda 1N5228 3.9v Zener
1 x dioda 1N5234 6.2v Zener
1 x termometr DS1820 lub DS18S20 lub DS18B20

Nie dając kompletnie wiary temu, że to w ogóle zadziała zmontowałem układ "na szybko":

image
image

Na drugim zdjęciu widać dokładnie które wyprowadzenie termometru jest niepodpięte.
Ku mojemu wielkiemu zaskoczeniu układ działa perfekcyjnie =D.

Oprogramowanie

Opisany powyżej schemat to część projektu digitemp. Po rozpakowaniu paczki
digitemp-3.6.0.tar.gz musimy skompilować pakiet do pracy z naszym modułem:

cd ./digitemp-3.6.0/
make ds9097

Powstanie plik digitemp_DS9097, który jest gotowym do pracy programem. Kopiujemy go do katalogu /bin do późniejszego użycia:

cp ./digitemp_DS9097 /bin/digitemp

Po podłączeniu naszego modułu program musi przeszukać magistralę na obecność sensorów:

./digitemp_DS9097 -s/dev/ttyS0 -i

Jeśli wszystko zadziała zostanie znaleziony termometr. U mnie wygląda to tak:

DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.
Searching the 1-Wire LAN
106B73F1010800C0 : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 106B73F1010800C0
Wrote .digitemprc

Jeśli nie działa możemy sprawdzić inne porty COM, np: /dev/ttyS1. Możliwe też, że układ jest źle zmontowany. Gdy już nasz termometr zostanie znaleziony jego adres i podstawowa konfiguracja digitemp'a zostaną zapisane w pliku .digitemprc. Skopiujmy ten plik to katalogu /tmp do późniejszego użycia:

cp ./.digitemprc /tmp/digitemp

Teraz sprawdźmy odczyty wszystkich znalezionych sensorów:

digitemp -c /tmp/digitemp -a

Efekt wygląda następująco:

DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Sep 19 12:54:06 Sensor 0 C: 25.62 F: 78.12

Teraz przykład pobrania temperatury z konkretnego sensora z zastosowaniem odpowiedniego formatowania:

digitemp -c /tmp/digitemp -t0 -q -o"%.2C"

Efekt:

25.62

Użycie termometru

O ile digitemp ma własne ciekawe mechanizmy gromadzenia i wykorzystania danych z sensorów, o tyle ja zdecydowałem się w ramach przykładu napisać własne skrypty. Na końcu pliku /etc/rc.d/rc.local dopisujemy linijkę "getemp >/dev/null 2>&1 &" i tworzymy skrypt /bin/getemp o następującej zawartości:

#!/bin/bash

for (( ; ; )) ; do
    t="85.00"
    c=0
    while [ $t = "85.00" ] ; do
       t=`digitemp -c /tmp/digitemp -t0 -q -o"%.2C"`
    c=$(($c+1))
    done
    echo $t "count:" $c>/tmp/temp
    sleep 10
done

Zadaniem skryptu jest sczytywanie temperatury co 10 sekund i umieszczanie jej w pliku /tmp/temp. Zauważyłem, że przy użyciu dłuższego kabla czasami odczytana temperatura wynosi 85.00 co jest błędem. Skrypt w takiej sytuacji podejmuje kolejne próby odczytania temperatury, a ilość prób również zostaje zapisana do pliku /tmp/temp po słowie count.

Sterowanie ogrzewaniem

Na dnie mojego terrarium znajduje się silikonowy przewód grzewczy. Jest on podłączony przez moduł wykonawczy LPT do pinu 1. Chcąc utrzymać temperaturę na poziomie 25 stopni napisałem kolejny skrypt. Do /etc/rc.d/rc.local dopisujemy linijkę "heatemp >/dev/null 2>&1 &" i tworzymy skrypt /bin/heatemp o następującej zawartości:

#!/bin/bash

for (( ; ; )) ; do
    t=`cat /tmp/temp | cut -d. -f1`

    if [ $t = 25 ] ; then o="nop"; fi
    if [ $t -lt 25 ] ; then o="on"; fi
    if [ $t -gt 25 ] ; then o="off"; fi

    while ! [ -f /tmp/lptready ]; do sleep 0.1; done
    rm -f /tmp/lptready

    i=`lpt getbit 1`

    touch /tmp/lptready

    change="nop"
    if [ $i = 1 ] ; then
       if [ $o = "off" ] ; then change="off"; fi
    fi
    if [ $i = 0 ] ; then
       if [ $o = "on" ] ; then change="on"; fi
    fi

    if [ $change = "on" ] ; then
       while ! [ -f /tmp/lptready ]; do sleep 0.1; done
       rm -f /tmp/lptready
       lpt setbit 1
       touch /tmp/lptready
    fi
    if [ $change = "off" ] ; then
       while ! [ -f /tmp/lptready ]; do sleep 0.1; done
       rm -f /tmp/lptready
       lpt clrbit 1
       touch /tmp/lptready
    fi

    sleep 60
done

Skrypt co minutę pobiera temperaturę z pliku /tmp/temp i na jej podstawie steruje ogrzewaniem.

Na górę
Autor:

image
int

Kontakt:
facebook.com/int84
int281184@gmail.com
GG 5317390

Licznik:
27000

Valid HTML 4.01 Strict Valid CSS

Strona stworzona przy użyciu PageBreeze, Notepad++, oraz pakietu XAMPP dla sustemu Windows, a także aplikacji KSWEB i DroidEdit Pro dla systemu Android.