Windrichting

Door PietrKempy op vrijdag 5 juni 2009 22:20 - Reacties (7)
Categorie: -, Views: 4.479

Het bepalen van de windrichting is tamelijk makkelijk zou je denken tot dat er hier een elektronische waarde aan gekoppeld moet worden. en zeker als je deze dan nog eens wilt weergeven ook.

Toen ik begon aan mijn eindwerk had ik 3 ideeėn:
* werken met een pot-meter
* werken met reed-contacten
* werken met een optisch gescheiden schakeling

Het werken met een pot-meter is eigenlijk je windvaan aansluiten op 2 pot-meters, aangezien pot-meters altijd een dood punt hebben . Door de weerstand van de pot-meters te bepalen kan men via een µC een programma schrijven waarbij beide waarden ingelezen worden en men zo de richting kan bepalen. Nadeel hierbij is dat het analoog inlezen van signalen met µC zeer moeilijk is

Het werken met reed-contacten is dan weer niet gebruikt omdat er ten eerste met een permanente magneet gewerkt moet worden en men evenveel ingangssignalen als richtingen nodig heeft wat een dus zeer zware beperking is.

Ik heb dus met een optische scheiding gewerkt hierbij draait een doorzichtige schijf rond die in bepaalde sectoren niet doorzichtig is. boven de schijf bevinden zich 4 leds er onder 4 fototransistors wanneer de schijf onder 1 van de leds niet doorzichtig is laat de transistor geen stroom meer door, zo ontstaan er in mijn geval 4 ingangssignalen wat dus wil zeggen 16 richtingen. (tekening om toch iets duidelijker te maken :p )
http://i291.photobucket.com/albums/ll305/PietrKempy/windrichting.jpg

Er is gewerkt met fototransistors omdat die een beter bereik hadden dan fotodiodes.
en nu mijn programmatjes :)


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
DEVICE 18F4450                  ;De gebruikte µC is een PIC18F4450
CLOCK_ON
ALL_DIGITAL TRUE    ;Al de gebruikte signalen zijn digitaal: de snelheid door de led-driver en de richting door de fototransistors



SYMBOL  I_R1            = PORTA.0   ;Poort A.1 heeft nu de naam I_R1                    = pin 19
SYMBOL  I_R2            = PORTA.1   ;pin 20
SYMBOL  I_R3            = PORTA.2   ;pin 21
SYMBOL  I_R4            = PORTA.3   ;pin 22
SYMBOL  I_R5            = PORTA.4   ;pin 23
SYMBOL  I_R6            = PORTA.5   ;pin 24
SYMBOL  I_R7            = PORTE.0   ;pin 25
SYMBOL  I-R8            = PORTE.1   ;pin 26
SYMBOL  I_S         = PORTE.2   ;pin 27
SYMBOL  O_R1            = PORTB.0   ;pin 8
SYMBOL  O_R2            = PORTB.1   ;pin 9
SYMBOL  O-R3            = PORTB.2   ;pin 10
SYMBOL  O_R4            = PORTB.3   ;pin 11
SYMBOL  O_R5            = PORTB.4   ;pin 14
SYMBOL  O_R6            = PORTB.5   ;pin 15
SYMBOL  O_R7            = PORTB.6   ;pin 16
SYMBOL  O_R8            = PORTB.7   ;pin 17
SYMBOL  O_R9            = PORTC.0   ;pin 32
SYMBOL  O_R10       = PORTC.1   ;pin 35
SYMBOL  O_R11       = PORTC.2   ;pin 36
SYMBOL  O_R12       = PORTD.1   ;pin 39
SYMBOL  O_R13       = PORTC.4   ;pin 42
SYMBOL  O_R14       = PORTC.5   ;pin 43
SYMBOL  O_R15       = PORTC.6   ;pin 44
SYMBOL  O_R16       = PORTC.7   ;pin 1
SYMBOL  O_MOTP      = PORTD.0   ;pin 38
SYMBOL  O_MOTN      = PORTD.2   ;pin 40
SYMBOL  ON          = 1
SYMBOL  OFF         = 0


  PORTA=%00000000
  PORTB=%00000000
  PORTC=%00000000
  PORTD=%00000000
  PORTE=%00000000
  TRISA=%00111111
  TRISB=%00000000
  TRISC=%00000000
  TRISD=%00000000
  TRISE=%00000111
  

START:  ;Label is Start, hier naar moet iedere keer op het einde van het programma terug gekeerd worden
WHILE 1=1
CLEAR   ;Hierdoor word het werkgeheugen volledig gewist


    IF I_R1 = ON THEN
     IF I_R2 = ON THEN
        IF I_R3 = ON THEN
           IF I_R4 = ON THEN
              O_R16 = OFF
          O_R1 = ON
          O_R2 = OFF
           ELSEIF I_R4 = OFF THEN
              O_R1 = OFF
              O_R2 = ON
              O_R3 = OFF
           ENDIF
        ELSEIF I_R3 = OFF THEN
       IF I_R4 = ON THEN
          O_R2 = OFF
              O_R3 = ON
              O_R4 = OFF
           ELSEIF I_R4 = OFF THEN
              O_R3 = OFF
              O_R4 = ON
          O_R5 = OFF
           ENDIF
        ENDIF
     ELSEIF I_R2 = OFF
        IF I_R3 = ON THEN
           IF I_R4 = ON THEN
          O_R4 = OFF
              O_R5 = ON
          O_R6 = OFF
           ELSEIF I_R4 = OFF THEN
          O_R5 = OFF
              O_R6 = ON
          O_R7 = OFF
           ENDIF
        ELSEIF I_R3 = OFF THEN
       IF I_R4 = ON THEN
          O_R6 = OFF
              O_R7 = ON
          O_R8 = OFF
           ELSEIF I_R4 = ON THEN
              O_R7 = OFF
              O_R8 = ON
          O_R9 = OFF
           ENDIF
        ENDIF
     ENDIF
  ELSEIF I_R1 = OFF THEN
     IF I_R2 = ON THEN
        IF I_R3 = ON THEN
           IF I_R4 = ON THEN
          O_R8 = OFF
              O_R9 = ON
          O_R10 = OFF
           ELSEIF I_R4 = OFF THEN
              O_R9 = OFF
              O_R10 = ON
          O_R11 = OFF
           ENDIF
        ELSEIF I_R3 = OFF THEN
       IF I_R4 = ON THEN
          O_R10 = OFF
              O_R11 = ON
          O_R12 = OFF
           ELSEIF I_R4 = OFF THEN
              O_R11 = OFF
              O_R12 = ON
          O_R13 = OFF
           ENDIF
        ENDIF
     ELSEIF I_R2 = OFF
        IF I_R3 = ON THEN
           IF I_R4 = ON THEN
          O_R12 = OFF
              O_R13 = ON
          O_R14 = OFF
           ELSEIF I_R4 = OFF THEN
              O_R13 = OFF
              O_R14 = ON
          O_R15 = OFF
           ENDIF
        ELSEIF I_R3 = OFF THEN
       IF I_R4 = ON THEN
          O_R14 = OFF
              O_R15 = ON 
          O_R16 = OFF
           ELSEIF I_R4 = OFF THEN
              O_R15 = OFF
              O_R16 = ON
          O_R1 = OFF
           ENDIF
        ENDIF
     ENDIF
  ENDIF 
WEND
END



Via dit programma worden dus 16 ledjes aangestuurd die in een cirkel staan. Dit programma is een deel van mijn uiteindelijke programma van mijn eindwerk maar hier over later meer.

Het programma is geschreven in Basic, Ook zijn er 8 ingangen omdat de windrichting t.o.v. de molen en t.o.v. de persoon bepaald moesten worden. DE strustuur van dit programma is tamelijk eenvoudig en men kan hier een zeer goede nauwkeurigheid mee behalen per extra ingang word het aantal richtingen vermenigvuldigd met 2.

Volgende: christian rock 06-'09 christian rock
Volgende: Voorstelling 06-'09 Voorstelling

Reacties


Door Tweakers user Skevdude, vrijdag 5 juni 2009 22:31

Ik denk misschien te simpel, maar waarom geen encoder?

Door Tweakers user PietrKempy, vrijdag 5 juni 2009 22:35

dacht dat een encoder enkel reageert bij een verdraaiing... wat voor een tamelijk moeilijk programma zou zorgen.

Door Tweakers user ArnieNFW, vrijdag 5 juni 2009 22:58

Ik herinner me een projectje van ???? (electuur of zoiets), waar ze probeerden een niet-mechanische windmeter te maken.
Als ik me het goed herinner hadden ze een warmte-draadje in het midden vertikaal staan, en eromheen liggend warmte sensoren.
Door warmte hoeveelheid te meten, konden ze de richting & snelheid achterhalen!
Het werkte, maar heb het nooit commercieel gezien.

Door Tweakers user PietrKempy, vrijdag 5 juni 2009 23:11

Kan ook m.b.v. hypersonische geluiden gemaakt worden. dan heb je helemaal geen bewegende onderdelenn.. http://www.fondriest.com/products/rmyoung_81000.htm
Maar dat was iets te moeilijk voor mij heb er wel de basis over op gezocht maar dan moet je ook al rekening houden met de temperatuur, ruisgeluid,...

[Reactie gewijzigd op vrijdag 5 juni 2009 23:17]


Door Baileys, vrijdag 5 juni 2009 23:21

Wat toevallig, op de hoge school in Gent had elektromechanica ( 2de jaar bachelor ) ook deze opdracht. Alleen moesten ze ook temperatuur, neerslag, windsnelheid, druk enz ook nog meten. Ik meende mij te herinneren dat sommige groepen hiervoor het zelfde principe hadden gebruikt.

De groep automatisatie ( mijn groep ) hadden de opdracht gekregen een brandweerwagen te besturen via afstand ( tcp/ip en bluetooth) die blokkeerde wanneer er een kaarsje was en alarm sloeg. De robot moest in een andere kamer bestuurd worden met behulp van het keybord en 3 sensoren die de zwarte lijn en de groene blokjes detecteerden. Leuke opdracht en we zijn er als beste groep uitgekomen ( 8 puzzelstukken ver :P ).

AD waarden uitlezen in een mircrocontroller (8051 familie) is eigenlijk best simpel, wij dachten dat dit ook moeilijk ging zijn en daardoor hebben we met comperators en deelspanningen opgelost. Later bleek toch via andere groepen dat AD waarden uitlezen veel makkelijker was dan gedacht ! Voor het programmeren had ik C gekozen terwijl de andere groep BASCOM gebruikte, dit is iets makkelijker dan C.

Door Tweakers user bracket, zaterdag 6 juni 2009 11:10

Leuke opdracht en een mooie oplossing, maar ik heb een bedenking bij die tekening van die windroos: wanneer je een niveau wilt verfijnen wordt de hoek waarover de roos bedekt/niet bedekt is gedeeld door 2 (eerst 180°, dan 90°, 45° ...). Jij doet dit van buiten naar binnen. Was het niet logischer om dit van binnen naar buiten te doen ? Lijkt me constructief een stuk eenvoudiger (zie maar hoe klein die vlakjes daar aan het centrum zijn) en je kan gemakkelijk een extra niveau toevoegen. Ok, dat kan ook nog in dit geval maar het is niet erg consistent dan :P Ik heb niet echt een idee hoe groot die roos is, maar je constructie moet toch al behoorlijk precies zijn om geen foutjes te maken daar in het centrum?

Door Tweakers user PietrKempy, zaterdag 6 juni 2009 12:43

@ Bracket
heb bij de uitwerking ook van binnen naar buiten uit gewerkt :) tekening is gewoon nog niet aangepast

Reageren is niet meer mogelijk