Termometr z wyświetlaczem LCD na Arduino

720px-Arduino_Logo.svg

Tworzymy termometr z wyświetlaczem LCD a to wszystko w oparciu o Arduino UNO.

Potrzebne nam będą następujące rzeczy i trochę czasu na zmontowanie wszystkiego:

  • Arduino (oprogramowanie oraz dowolny klon płytki)
  • układ DS18B20
  • wyświetlacz LCD HD44780
  • płytka stykowa, przewody
  • biblioteka OneWire 
  • biblioteka LiquidCrystal

Podłączamy wyświetlacz do arduino:

Opis pinów na wyświetlaczu:

wyswietlacz

Jak już wiemy co oznaczają poszczególne piny na naszym wyświetlaczu zabieramy się za podłączenie odpowiednich pinów. Ja użyłem pinów (12, 11, 5, 4, 3, 2) na arduino i zastosowałem potencjometr (10k) na pinie 3 wyświetlacza w celu regulacji kontrastu.

arduino-hd44780

Czujnik temperatury:

sensor_ds18b20

Podłączamy następująco:

  • GND (pin1) oraz VDD (pin3) podłączone do GND,
  • DQ (pin2) podłączony do pinu 8 na arduino,
  • rezystor 1k pomiędzy DQ (pin2) oraz 5V

Wgrywamy program:

// LCD TERMOMETR
// blog.bauerpawel.eu

#include
#include

// Connections:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire ds(8); // ds18b20 pin #2 (middle pin) to Arduino pin 8
void setup(void) {
lcd.begin(16, 2);}
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

int HighByte, LowByte, SignBit, Whole, Fract, TReading, Tc_100, FWhole;

void loop(void) {

if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}

if (OneWire::crc8(addr, 7) != addr[7]) {

return;
}
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:

type_s = 1;
break;
case 0x28:

type_s = 0;
break;
case 0x22:

type_s = 0;
break;
default:

return;
}

ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end

delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();

}

// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an „int16_t” type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// „count remain” gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 – data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let’s zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(„Temperatura: „);
lcd.setCursor(2,1);

if (SignBit) {
lcd.print(„-„);
}
lcd.print(celsius);
lcd.print(” C „);
delay(5000); //Czeka 5 sekund i odswierza
}

/////

Kod do pobrania:
https://dl.dropboxusercontent.com/u/38897001/temperatura_lcd/temperatura_lcd.ino
https://github.com/bauerpawel/Arduino-DS18B20-hd44780

Ściągamy i wklejamy do katalogu Arduino w moich dokumentach lub jako kod bezpośrednio do programu, kompilujemy i wgrywamy do arduino. Program powinien od razu zacząć działać i wyświetlić aktualną temperaturę.

Jeśli użyliście innych pinów to zmian dokonujecie w następującym miejscu w kodzie:

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2); – są to piny użyte do podłączenia wyświetlacza
OneWire  ds(8); – jest to pin od czujnika temperatury

 

Hetzner – instalacja własnego windowsa

hetzner logo

Już dawno nic nie zamieszczałem a temat jaki dziś wam przedstawię uważam za ciekawy. Sam sporo czasu poświęciłem na poszukanie informacji i wdrożenie własnej wersji Windowsa na serwerze w hetzner. Po co płacić jak ma się własną licencje 🙂

Istnieją trzy wersje instalacji własnego Windowsa na serwerze, może to być wersja kliencka jak i serwerowa.

Pierwsza metoda polega na odtworzeniu obrazu dysku na serwerze przy wykorzystaniu trybu instalacyjnego z jakim dostajemy serwer.

Druga metoda polega na skopiowaniu plików z płyty i uruchomieniu instalatora tą metodę można użyć jeśli mamy możliwość uruchomienia systemu z Windowsem np. winpe lub jakiś live cd Windowsa przez ipmi lub coś podobnego. Tej metody użyłem w przypadku serwera z http://oneprovider.com/dedicated-servers/paris-france Opiszę ją może kiedyś.

Trzecia metoda to instalacja systemu Windows na wirtualnej maszynie np. ESXI w OVH można tak było nie wiem czy aktualnie dają ip z adresem MAC dodatkowo do każdego serwera za opłatą. W tej metodzie mamy troszkę mniejszą wydajność spowodowaną wirtualizacją i mniej o 1-2 GB ramu które przeznaczamy na system gospodarza który zapewnia nam wirtualizację. Nie będę tego opisywał każdy kto choć raz używał vmware workstation powinien sobie poradzić z instalacją takiego systemu. Ustawiamy tylko adres MAC w opcjach karty sieciowej na taki jaki został nam przydzielony.

Ja osobiście użyłem metody pierwszej z serwerem w HETZNER i ją tutaj opiszę.

Opis instalacji sposobem pierwszym:

Wykorzystałem virtualboxa uruchomionego na serwerze  z systemem Ubuntu 13.04 x64 z dużą ilością wolnego miejsca na dysku i panelem www (phpvirtualbox) do instalacji czystego Windowsa 7 x64.  Więc polecenia podane niżej będą się odnosić do systemu Ubuntu. Można dać mniejszy dysk bo będziemy potrzebować prawie dwa razy wielkość dysku virtualnego na zrobienie obrazu raw, a program nie pozwoli zrobić tego jak nie mamy wystarczającej ilości wolnego miejsca!

Po normalnej instalacji i utworzeniu użytkownika z hasłem i włączeniu opcji pulpitu zdalnego, plus odblokowaniu portu na firewallu na sieci publicznej można zamknąć system.

Teraz będziemy konwertować wirtualny dysk na obraz dysku raw do wykorzystania podczas odtwarzania przez linuksowy program dd.

Konwertujemy dysk z virtualboxa format VDI na format akceptowalny przez dd:

VBoxManage clonehd win7.vdi win7.raw --format RAW | gzip > win7.gz

Musimy mieć tyle miejsca wolnego ile wynosi nasz dysk wirtualny. Spakujemy co by pustych danych nie przenosić.

Musimy jeszcze na serwerze w hetzner sformatować dysk sdb i zamontować go. Użyjemy do tego fajnego konsolowego programu prawie graficznego cfdisk. Tworzymy partycję a następnie po zapisaniu formatujemy ją i montujemy:

mkfs.ext3 /dev/sdb1
mount /dev/sdb1 /mnt

Teraz kopiujemy nasz obraz dysku na serwer w hetzner przez ftp. Zaletą systemu instalacyjnego z jakim dostajemy serwer to to że możemy instalować na nim co tylko chcemy więc doinstalowanie serwera ftp nie stanowi problemu i możemy zacząć wgrywać plik na dysk sdb (zamontowany w: /mnt) bo na sda będziemy przywracać obraz.

Po wgraniu obrazu możemy przystąpić do odtwarzania obrazu:

gzip -dc /mnt/win7.gz | dd of=/dev/sda

Po restarcie powinien się uruchomić bez problemu system Windows 🙂

Doinstalowujemy aktualizacje i sterowniki, przeważnie jest to serwer firmy DELL więc na stronie producenta można dać opcje znajdź service tag i dociągnąć sterowniki. W zarządzaniu komputerem w opcji zarządzanie dyskami powiększamy partycje z systemem do maksymalnej wielkości dysku pierwszego a dysk drugi formatujemy i montujemy.

Strumyk live czyli Nginx + rtmp module

nginx logo

Dziś zajmiemy się postawieniem serwera do strumieniowania filmów, obrazu z kamery czy dekodera tv.

Do celów testowych ja użyłem wirtualnej maszyny postawionej na serwerze dedykowanym w hetzner, ale może też być vps lub najtańszy cloud np. od e24cloud lub oktawave. System jaki użyłem to ubuntu server 13.04 64bit i do tego systemy będą opisy, może też być debian 7, albo inny na którym pracujecie i umiecie skompilować aplikację.

A więc zaczynamy:

Instalujemy potrzebne aplikacje:

apt-get update  
 apt-get install curl build-essential libpcre3-dev libpcre++-dev zlib1g-dev libcurl4-openssl-dev libssl-dev git-core

Ściągamy potrzebne aplikacje i moduł do nginx:


wget http://nginx.org/download/nginx-1.5.3.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
tar -zxvf nginx-1.5.3.tar.gz
cd nginx-1.5.3

Dodajemy moduł do nginx i kompilujemy a potem instalujemy:


./configure --add-module=../nginx-rtmp-module-master
make
sudo make install

Teraz pozostaje mam tylko ustawić configa i odpalić swój pierwszy stream 🙂 Wystarczy w pliku /usr/local/nginx/conf/nginx.conf dodać:


    rtmp {
        server {
            listen 1935;

            application stream {
                live on;
                allow publish all;
                allow play all;
            }
        }
    }

Do testu powinno wystarczyć choć do celów komercyjnych potrzebujemy ograniczyć możliwość nadawania z konkretnego ip. Wtedy kod do dodania będzie wyglądał następująco gdzie X.X.X.X należy podać ip z którego będziemy nadawać.


    rtmp {
        server {
            listen 1935;

            application stream {
                live on;
                allow publish X.X.X.X;
                deny publish all;
                allow play all;
            }
        }
    }

Pierwsza linia wyłącza a druga włącza nginx:


sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

Mamy więc już działający serwer www bo przecież niem jest nginx możemy tam serwować stronę z odtwarzaczem.
Ja użyłem http://www.longtailvideo.com/jw-player/ mają wersje hostowaną u siebie na serwerach cdn więc jest to fajne bo odciąża nasz serwer.

Jak nadawać? Ja użyłem ffmpeg do plików avi jak i obrazu kamery się nadaje. Można też nadawać z raspberry pi obraz.


ffmpeg -threads 2 -y -i FILM.avi -acodec libmp3lame -ab 192000 -ar 44100 -ac 2 -vcodec libx264 -vb 800000 -f flv rtmp://X.X.X.X/stream/test

przełacznik -threads 2 oznacza że ma użyć 2 rdzenie procesora jak damy z 0 to sam wykrywa optymalna ilość rdzeni do użycia
dalej to kodek audio mp3, bitrate audio, sample rate, kanały audio, kodek video x264, bitrate video, format wyjściowy i adres serwera gdzie nadajemy z nazwa streamu u mnie to test

To tyle w tym wpisie w następnym opiszę stream z raspberry pi pliku avi jak i z kamery którą chce nabyć.
Polecam zapoznanie się z wpisem na http://www.megiteam.pl/blog/2012/11/27/streaming-operacji-serca

Panel web do autopilota

shoutcast

Witam,

Przedstawiam wam mój działający i spełniający moje wymagania i potrzeby panelik do sterowania sc_trans – transkodera shoutcast i generowania playlist. Korzystam z wersji  sc_trans_posix_040 która potrafi nadawać mp3 bo najnowsze wydanie nadaje tylko w AAC+ a do mp3 potrzeba zakupu licencji.

Po sciagnięciu edytujemy 3 pliki: autopilot.php, sc_trans.conf i make_playlist zmieniamy w nich tylko ścieżki do katalogów. Zmieniamy też uprawnienia na wykonywanie i modyfikowanie plików.

Testowane na serwerze z directadminem i php 5.3.10 , żeby wgrywać mp3 bezpośrednio do katalogu z muzyką można dodać dodatkowe konto ftp.

Do pobrania na github: https://github.com/bauerpawel/autopilot

Link do pobrania sc_trans_posix_040: https://dl.dropboxusercontent.com/u/38897001/sc_trans_posix_040.tgz

OpenELEC kompilujemy własny obraz dla raspberry pi

Kompilujemy OpenELEC dla Raspberry Pi

Witam,

Dzisiaj przygotujemy obraz systemu z repozytorium github.

Sprzęt użyty przeze mnie do kompilacji to wirtualna maszyna z ubuntu 13.04 wersja 64bit postawiona na hyper-v, posiada 4GB ram, dysk 40GB postawiony na dysku sas. Druga konfiguracja to laptop z core2duo, 4GB ram dysk sata. Czas kompilacji na tych konfiguracjach sprzętowych wynosi około 3 godzin, na szybkość ma też wpływ połączenie internetowe bo w czasie kompilacji są pobierane pakiety programów.

Można też użyć chmury np.

Koszt takiej chmury to parę zł na czas kompilacji.

Przygotowanie ubuntu do pracy

Musimy dointalować brakujące pakiety oprogramowania:

 

sudo apt-get install g++ nasm flex bison gawk gperf autoconf automake m4 cvs libtool byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev zip autopoint xfonts-utils libxml-parser-perl

 

Może się okazać że czegoś może brakować ale ubuntu poda nam informacje co doinstalować 🙂

Pobieramy z githuba najnowsze wydanie:

git clone git://github.com/OpenELEC/OpenELEC.tv.git

Przechodzimy do katalogu gdzie się pobrał openelec:

cd OpenELEC.tv

Możemy też zmienić opcje dotyczące systemu np. dodać obsługę sterownika wifi którego nie ma w domyślnej konfiguracji czy zmienić nazwę hostname czy hasło root. W katalogu projects\RPi jest plik opctions edytujemy go jakimś edytorem tekstu np. nano i zmieniamy wedle uznania.

Kompilujemy:

PROJECT=RPi ARCH=arm make release

Gotowy obraz znajdziemy w katalogu target wystarczy pobrać plik OpenELEC-RPi.arm-devel-20130607055706-r14591.tar.bz2 nazwa może być inna ale bardzo zbliżona. Po pobraniu na komputer rozpakowujemy archiwum, a pliki z katalogu target kopiujemy na naszą maline gdzie jest odpalona starsza wersja openelec, przez otoczenie sieciowe wchodzimy do katalogu updane na malinie i wgrywamy tam pliki z katalogu target. Restartujemy, proces aktualizacji przebiega automatycznie.
Cieszymy się swoim własnym systemem 😀