Anemometr
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

AnemometrAnemometr

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

Anemometr

Google       Google       17. 10. 2007       43 459×

Možná jste si jen někdy chtěli změřit rychlost větru, možná jste meteorologický nadšenec a možná vás prostě přestavování starých věcí na něco užitečnějšího vzrušuje stejně jako mě. Každopádně vám ukážu, jak si sestavit jednoduchý anemometr. Předem se však omlouvám všem uživatelům Windows, kteří si budou muset naprogramovat vlastní řešení „tahání“ dat.

Reklama
Reklama

Kdyby snad někdo nevěděl, co to takový „anemometr“ je, můžu mu důvěrně prozradit, že než jsem ho začal vyrábět, neveděl jsem to taky… Jedná se o přístroj na měření rychlosti větru. Existuje nepřeberné množství anemometrů, nejjednodušší je ovšem ten mechanický, který je k vidění úplně všude. Jedná se většinou o odpornou krabici s větrným „mlýnkem“ navrchu.

Při výrobě jsem zdevastoval:

  • sériovou myš od Microsoftu
  • krabičku od Ramy
  • 20 cm hliněné trubičky
  • nefunkční Walkman
  • 5 × 5 cm kartonu
  • trochu lepidla do tavné pistole

Konstrukce je opravdu jednoduchá – stačí z myši odstranit kuličku a šikovně ji nahradit hřídelí s pingpongovými míčky na koncích. Moje hračka (prozatím bez těch „pingpongáčů“), celá zabalená ve stylové krabičce, vypadá takhle:

Po připojení k počítači musíte zavést ovladač, což provedete přibližně takto:

Nejprve si otevřete xorg.conf

sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak
sudo gedit /etc/X11/xorg.conf

a připište

Section       "InputDevice"
Identifier    "anemometer"
Driver        "mouse"
Option        "CorePointer"
Option        "Device"           "/dev/ttyS[X]"
Option        "Protocol"         "microsoft"
Option        "ZAxisMapping"     "4 5"
EndSection

[X] nahraďte číslem portu: 0 pro první port, 1 pro druhý atd.

Do sekce "ServerLayout" přidejte následující řádek,

InputDevice    "anemometer"

uložte xorg.conf a restartujte počítač.

Jestli chcete zkontrolovat, zda se vám těch několik předchozích úkonů povedlo, zadejte

cat /dev/ttyS[X]

a foukněte na svůj anemometr. Mělo by se vypsat pár nesmyslných znaků.

Podařilo se? Vrhneme se na programování.

Vytvoříme si třídu Anemometer s metodou data, která bude vracet počet otáček za určitý časový interval.

anemometer.h
#ifndef ANEMOMETER_H
#define ANEMOMETER_H

#include <cstdio>
#include <ctime>

class Anemometer
{
	private:
	    FILE *input;
	    int ret;
	    unsigned int interval;
	    time_t endwait;
	    char a, b, c;
	    bool PSHR;
	
	public:
	    int error;
	    Anemometer(char *filename, bool PSHR=true, int interval=1);
	    ~Anemometer();
	    int data();
	
	
};

#endif

Konstruktor má tři parametry. První je vstup, tedy /dev/ttyS[X]. Druhý, nepovinný, udává, zda se hřídel točí po či proti směru hodinových ručiček. Třetí je potom interval v sekundách, defaultně nastavený na 1.

Pokusíme se otevřít vstup a zkontrolujeme, zda se jedná o anemometr. MS myš by se měla ohlásit znakem M. V případě, že se tak nestane, nemá cenu pokračovat, jelikož existuje několik „myších“ protokolů a náš program by se tak pravděpodobně s zařízením nedomluvil.

Anemometer::Anemometer(char *filename, bool PSHR, int interval){
	
	this->PSHR = PSHR;
        this->interval = interval;

	error = 0;
 	input = fopen(filename, "r");
	
        if(input == NULL){
                error = 1;
                return;
        }

	fread(&a, 1, 1, input);
	if(a != 'M'){
		error = 2;
	}
	
}

Destruktor pouze zavře vstup (pokud se ho někdy podařilo otevřít).

Anemometer::~Anemometer(){
	
	if(error != 1){
	    fclose(input);
	}
	
}

A teď už ona kouzelná metoda data. V každé iteraci se načtou tři byty do proměnných a, b a c, které mají následující strukturu:

1 0 1 LB RB Y8 Y7 X8 X7
2 0 0 X6 X5 X4 X3 X2 X1
3 0 0 Y6 Y5 Y4 Y3 Y2 Y1

Jelikož anemometr (tedy alespoň ten můj) používá osu X, bude nás zajímat hlavně první a druhý byte. Abychom vycucli sedmý a osmý bit z a, provedeme bitový součin s maskou 0000 0011 – v šestnáctkové soustavě 0x03. Výsledné bity posuneme o 6 míst doleva a sečteme s b. Takto bychom měli dostat počet „otoček“ hřídele (Ono se samozřejmě nejedná o otočky ve smyslu 360 ° – to nám ale může být jedno. Důležité je, že dostaneme číslo udávající, jak moc se hřídel otočila, ať už ve stupních, otočkách, pixelech či počtu světelných signálů „přijatých“ fototranzistorem).

int Anemometer::data(){
	
	ret = 0;
	a = 0;
	b = 0;
	c = 0;
	endwait = time(NULL) + interval;
	
	while(time(NULL) < endwait){
		
		fread(&a, 1, 1, input);
		fread(&b, 1, 1, input);
		fread(&c, 1, 1, input);
		
                a &= 0x03;
		a <<= 6;
		b |= a;
		
	        if(b>0 && PSHR){
		  ret += b;
		} else if(b<0 && !PSHR){
		  ret -= b;
		}
		
	}
	
	return ret;
	
}

Výsledný soubor anemometer.cc bude tedy vypadat takto:

#include <anemometer.h>


Anemometer::Anemometer(char *filename, bool PSHR, int interval){
	
	this->PSHR = PSHR;
        this->interval = interval;

	error = 0;
 	input = fopen(filename, "r");
	
        if(input == NULL){
                error = 1;
                return;
        }

	fread(&a, 1, 1, input);
	if(a != 'M'){
		error = 2;
	}
	
}


Anemometer::~Anemometer(){
	
	if(error != 1){
	    fclose(input);
	}
	
}


int Anemometer::data(){
	
	ret = 0;
	a = 0;
	b = 0;
	c = 0;
	endwait = time(NULL) + interval;
	
	while(time(NULL) < endwait){
		
		fread(&a, 1, 1, input);
		fread(&b, 1, 1, input);
		fread(&c, 1, 1, input);
		
                a &= 0x03;
		a <<= 6;
		b |= a;
		
	        if(b>0 && PSHR){
		  ret += b;
		} else if(b<0 && !PSHR){
		  ret -= b;
		}
		
	}
	
	return ret;
	
}

A nakonec úplně jednoduchý příklad využití této třídy, který nebude dělat nic jiného, než jednou za vteřinu vypisovat pracně získaná data.

#include <iostream>
#include "anemometer.h"

#define INPUT "/dev/ttyS0"

int main(){
	
	Anemometer a(INPUT);
	if(a.error > 0){
		return a.error;
	}
	
	int data;
	while(1){
		data = a.data();
		std::cout << data << "\n";
	}
	
	return 0;
}

Možná vás teď napadá, jak byste mohli svůj anemometr vylepšit. Můžete například druhou osu použít na určování směru větru. Záleží to jen na vaší fantazii!

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor obstojně ovládá PHP a C/C++, zajímají ho operační systémy, umělá inteligence, hry a počítačová bezpečnost. Miluje dobré jídlo, pití a dostatek spánku. Mezi jeho další koníčky patří psychologie, hra na klavír či létání.

Nové články

Obrázek ke článku Generace Z: Proč je pro ně důležité, kolik mají follow?

Generace Z: Proč je pro ně důležité, kolik mají follow?

Životem jdou vybaveni chytrým telefonem v ruce a nedokáží si představit, že by to bylo jinak. Narodili se okolo přelomu tisíciletí a nikdy nezažili nic jiného než digitalizovaný svět. Dotykové obrazovky měli poprvé v rukou na základní škole, ti mladší možná už ve školce. Proto mají na svět jiný pohled než jejich předci. První zástupci této generace začínají dospívat a my brzy uvidíme, jestli je to s nimi tak zlé, jak o nich mnohdy tvrdí jejich rodiče.

Reklama
Reklama
Obrázek ke článku Proč mají absolventi v IT přemrštěné očekávání, a je vůbec přemrštěné?

Proč mají absolventi v IT přemrštěné očekávání, a je vůbec přemrštěné?

Poměrně nedávno zveřejnil portál Platy.cz zajímavé statistiky, kde mladí počítačoví experti nastupují do firem s průměrnou mzdou cca 36 000 Kč, hned v závěsu je bankovní sektor se svými cca 31 000 Kč. Pro srovnání – v ostatních oborech se průměrná nástupní mzda pohybuje okolo 28 000 Kč. Nástupní platy jsou samozřejmě ovlivněny i lokalitou zaměstnavatele

Obrázek ke článku Zpětné sledování sportovních přenosů využívá v létě řada lidí.

Zpětné sledování sportovních přenosů využívá v létě řada lidí.

Červenec a srpen představují měsíce, kdy Češi nejčastěji jezdí na vícedenní dovolené. V této době však rovněž probíhá řada důležitých sportovních událostí, jako jsou olympijské hry nebo například právě odehrané fotbalové mistrovství světa. Míra promeškaných sportovních přenosů však klesá díky moderních technologiím a službám. 

Obrázek ke článku Průzkum JetBrains: JavaScript mezi programátory vede, Kotlin získává na popularitě

Průzkum JetBrains: JavaScript mezi programátory vede, Kotlin získává na popularitě

Společnost JetBrains, přední tvůrce softwarových nástrojů pro profesionální vývojáře s centrálou v Praze, představila výsledky průzkumu, který pomáhá lépe porozumět a získat vhled do pracovních návyků programátorů. Zjištění mohou být nápomocná nejen pro zvýšení efektivity, ale také pro vytvoření ideálního pracovního prostředí pro programátory.  

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý