Używamy plików cookies (tzw. ciasteczka) by spersonalizować treść i ogłoszenia oraz by analizować ruch na stronie.  W sposób automatyczny dzielimy się informacjami o Twoim użyciu tego portalu z dostawcami ogłoszeń, którzy mogą połączyć te informacje z informacjami, które im udzieliłaś/łeś lub, które sami zebrali. Korzystanie z witryny bez zmiany ustawień dotyczących cookies oznacza, że będą one zamieszczane w Państwa urządzeniu końcowym.  Możecie Państwo dokonać w każdym czasie zmiany ustawień dotyczących cookies zmieniając opcje przeglądarki.

Wzmacnianie 1-Wire (DS2482)

Podłączenie czujników 1-wire bezpośrednio do RPi pozwala, co prawda, testować różne koncepcje, nie nadaje się jednak do zastosowania w automatyce domowej. Przyczyny są dwie:

  • Podłączenie czujników bezpośrednio do pinów jest ryzykowne - w przypadku zwarć lub przepięć uszkodzeniu może ulec całe RPi,
  • RPi nie dysponuje dostateczną mocą, by zapewnić komunikację w rozległej sieci kabli i przy dużej liczbie czujników.

Aby sprawdzić, czy rozwiązanie oparte o RPi nadawać się będzie do mojej rozległej sieci domowej, zbudowałem 2 testowe moduły w oparciu o chipy Maxim’a DS2382-100 i DS2382-800.

DS2482-100 board DS2482-800 board

Wszystko, co tu widzicie, jest efektem przetworzenia przykładów znalezionych w sieci. Podczas pracy wielokrotnie stwierdzałem, że nie mam zielonego pojęcia o tym, co tak naprawdę robię. Koniec końców jednak, udało mi się zaprojektować i wytrawić płytkę, przylutować elementy i skutecznie uruchomić oba moduły. Miejcie się jednak na baczności i w przypadku znalezienia błędów w sztuce – alarmujcie.


Pierwszym krokiem było zaprojektowanie płytek. Na forum www.temperatur.nu znalazłem obraz przykładowego rozszerzenia do RPi. Gotową płytkę lub zestaw do samodzielnego montażu można kupić na www.m.nu. Dzięki zdjęciom i dokładnej liście użytych elementów udało mi się objąć neofickim umysłem, co z czym i do czego. Znalazłem też schemat podobnego obwodu na www.abelectronics.co.uk. Ostatecznie schematy moich płytek wyglądają następująco:

DS2482-100 schemeDS2482-800 scheme

W przypadku płytki z DS2482-100 zdecydowałem się na zamontowanie PINów (tu – SV1) umożliwiających zmianę adresu. Da to możliwość – jeśli byłaby taka potrzeba – użycia kilku modułów równocześnie.

Dużo myślałem nad tym, jak podłączać poszczególne kable. Czy zasilanie powinno być wtyczką microUSB, czy przewody z I2C powinny być łączone po RJ… Ostatecznie zdecydowałem się na zaciski śrubowe i piny - jako że tak łączona jest większość modułów w mojej szafie.

Oto obrazy płytek:

DS2482-100_board_layoutDS2482-800_board_layout

Płytki, których zdjęcia zamieściłem na początku, różnią się one nieco od zamieszczonych powyżej rysunków.  W międzyczasie dokonałem kilku korekt. Przykładowo – dioda P6KE6.8A zastąpiona jest SMBJ6.0A, której w czasie robienia płytek po prostu nie miałem…

Płytki w obudowach na szynę DIN wyglądają tak:

DS2482-100 board in case DS2482-800 board in case

 

Wszyscy, którzy dotychczas – tak jak ja – bali się lutownicy, powinni wiedzieć, że wykonanie własnej płytki jest banalnie proste i… niezwykle satysfakcjonujące. Powyższe płytki są pierwszymi w moim życiu. Cienki drut cynowy, pożyczona lutownica, 1/2h spędzona na oglądaniu tutoriali na EEVBlog i… to wszystko. Okazuje się, że rzecz nie jest trudna... a radość z wkroczenia na niedostępny dotychczas teren elektroniki (nawet jeśli bez pełnego zrozumienia rzeczy) jest olbrzymia.


Powyższe moduły zasilane są z odrębnego źródła 5VDC, kanał 1-wire i GND zabezpieczone są układami DS9503P. Przewód 5VDC zasilający sieć 1-Wire: zabezpieczenie przed przeciążeniem – bezpiecznik (np. 1206L050YR), przed przepięciami dioda transil (np. SMBJ6.0A).


Aby przetestować ich pełne możliwości muszę jeszcze poumieszczać w całym domu czujniki temperatury… czyli przygotować rozległą sieć.


DS2482 (w wersji -100 lub -800), są „mostami” pomiędzy sieciami I2C i 1-Wire. Po stronie RPi wykorzystuję piny 1 (3.3VDC), 3 i 5 (SDA i SCL portu I2C) i 6 (GND). Konieczne jest też doinstalowanie aplikacji związanych z obsługą I2C i przekonfigurowania samego RPi, które – zamiast samodzielnie kontrolować komunikację po 1-Wire (GPIO 4), powinno teraz zająć się komunikacją po I2C.


Trzeba więc wpisać komendę:

nano /etc/modprobe.d/raspi-blacklist.conf


i dodać znak „#” przed „blacklist i2c-bcm2708”, następnie komendę:


nano /etc/modules


i dodać na samym dole „i2c-dev”. Potem doinstalować narzędzia do obsługi i2c:


apt-get install i2c-tools


po restarcie RPi I wpisaniu:


i2cdetect -y 1


powinna pojawić się ‘tabela’ wykazująca znalezienie urządzenia korzystającego z magistrali i2c.


Aby OWFS obsługiwał czujniki podłączone do DS2482, trzeba:

 

  • Zainstalować OWFS np. komendą apt-get install owfs ow-shell,
  • Stworzyć katalog komendą mkdir /mnt/1wire,
  • Sprawdzić, czy w /etc/fuse.conf linia „user_allow_other” pozbawiona jest znaku „#” z przodu,
  • Uruchomić OWFS z obsługą i2c komendą:


/opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/

(owfs może zainstalować się do innego katalogu, np: /usr/bin/owfs

Wykryte DS2482 (zgłaszane jako BUS.0, BUS.1 itd.) oraz czujniki znaleźć można w katalogu /mnt/1-wire.

Całkiem dobry opis powyższych kroków znalazłem na http://wiki.temperatur.nu.

Konieczne też było przebudowanie skryptów PHP odczytujących wskazania czujników:

<?php
if ($MainDir = opendir('/mnt/1wire/bus.0')) {
	while (false !==($MainDirItem = readdir($MainDir))){
		if (preg_match('/[0-9]{2}./', $MainDirItem)) {
			$TempFile = fopen("/mnt/1wire/$MainDirItem/temperature", "r");
			if (!$TempFile) {
				echo "...some problems with temp. file opening...";
			}
			else {
				$Temperature = fgets($TempFile);
				echo "Temperature of ".$MainDirItem." = ";
				echo $Temperature."°C";
			}
		}
	}
}

Tyle na teraz. Zainteresowanych tym, jak zrobić własną płytkę zapraszam do Dodatek 1 – Robimy własną płytkę PCB.