Computer thuis programmeren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Hallo Tweakers,

Omdat ik al meerdere keren dit idee gehad heb en er weinig over weet vraag ik het hier.
Ik wil eigenlijk een beetje leren programmeren van hardware etc. software programmeren ben ik ook beetje bekend in en websites (php etc. al helemaal (dagelijks werk)). Ook programmeer ik wel eens met AutoIT (soort Visual Basic)

Ik had als idee een computer te maken die nader hand bijvoorbeeld in de meterkast word geplaatst. En die in principe 24/7 aanstaat (misschien dat hij 's avonds vanzelf in slaapstand kan gaan). En hierop word een monitor aangesloten het uiteindelijke idee is echt dat je op die monitor kan aangeven van rolluiken open en de rolluiken gaan open.
Ook wil ik op die pc Apache draaien zodat ik bijvoorbeeld op school ook verbinding met deze pc kan maken.

Dit is zeg maar een idee wat ik graag zou willen maar ik wil uiteraard simpel beginnen, dit maak je namelijk niet zo 1,2,3.
Nu had ik al een beetje gelezen over PIC en over de MiniBee. Echter is dit echt onbekend terrein voor mij.

Ook zit ik te twijfelen of ik op die pc dan eventueel Windows of Linux ga runnen.
Mijn eerste idee is om een pc te maken, en iets elektrisch te maken had het volgende idee:
Een of andere temperatuur sensor op een of andere manier op de pc aansluiten, deze leest de temperatuur op de kamer. Deze stuurt deze op een of andere manier naar het internet (denk naar Apache of anders?).
Als ik nu op school inlog op het ip adres van de computer krijg ik de temperatuur thuis te zien.
Ook moet de temperatuur gewoon af te lezen zijn op de monitor die op de pc is aangesloten.

Wie kan mij helpen met uitleg, links, tutorials. (liefst Nederlands anders Engels).

Alvast super bedankt. :)

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Kijk eens in het arduino topic hier in EL, of kijk eens op www.arduino.cc
Heel veel voorbeelden, is redelijk simpel en kan communiceren met zowel windows als linux.

(hoewel... niet altijd zo simpel.... maar toch :-) )

mookie


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Mm, super bedankt ga het eens doorlezen maar is dat niet ongeveer het zelfde als de MiniBee?

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Ongeveer wel ja, alleen is de arduino iets goedkoper en bevat meer functionaliteit en is redelijk vrij te programmeren/aan te passen.
En een hele grote userbase dus er is altijd wel iemand die iets gemaakt heeft wat jij zoekt, of hier zitten altijd wel mensen die je kunnen helpen.

De arduino uno koop je voor ongeveer 22 euro en de mega voor 46 euro.
Daar kun je dan nog niet veel echt mee aansturen maar om dat uit te breiden is euro werk.

Die minibee is b.v. enkel 14 outputs tot 50v (kan niet eens vinden hoeveel ampere) en 50 volt is meer dan 5 volt maar nog steeds niet veel. En die kost 28 pond, dus zo'n 33 euro.
Voor 11 euro sleutel je ook iets in elkaar voor de arduino zodat je 14 keer 50 volt kunt schakelen.

Die digibee lijkt er al wat meer op, 16 input en 16 output maar is nog steeds helemaal digitaal.
De digibee+ heeft er dan 4 analoge poorten op (om b.v. temperatuur/luchtvochtigheid etc etc te meten) maar die kost al 38 pond, 45 euro.
Voor dat geld heb je op de arduino mega die ook analoog in en PWM uit heeft, 4 seriele poorten, ICSP, en handige standaard printjes voor ethernet aansluiting, wifi aansluiting, GPS, SD kaarten etc etc.

Daarnaast kan de arduino op zichzelf draaien.
Het is een mini computertje. Niet super krachtig maar goed genoeg voor de meeste amateur toepassingen.
Voor zover ik kan ontcijferen is die minibee/digibee/etc dat niet en moet je hem continue met je computer aansturen.

Stel dat je 's avonds om 17:00, voordat je thuisbent, de rolluiken wilt laten sluiten.
Op die arduino hang je dan een klok (RTC), wat driver IC's die kunnen sinken, een paar relais en dat ding werkt dan volledig automatisch.
Het verbruikt dan echter maar b.v. 2,5 watt in al die tijd dat hij niets hoeft te doen.
Als je je PC tot die tijd aan laat staan verbruikt hij toch al snel minimaal 40 watt als je een laptop processor gebruikt, of al snel 80 watt of meer als je een normale processor gebruikt.

Op de arduino kun je ook mooie LCD's en knoppen hangen, of als je wilt kun je nog steeds als je thuis aankomt je PC aanzetten en de status van een Arduino op je PC uitlezen...

De arduino is dus een mini computer die zelfstandig werkt en heel weinig stroom verbruikt.
Dat zou in dit geval toch wel een van de grootste voordelen zijn.

Zelf gebruik ik hem thuis om b.v. de verwarming te regelen, en met een ethernet kaart erop kan ik op mijn werk via internet de verwarming inschakelen zodat het lekker warm is als ik thuis kom omdat ik nogal wisselende werktijden heb.

mookie


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Ja super bedankt voor je informatie ja ik zag dat hij te koop stond bij EZtronics, op gebied van elektronica ben ik echt een beginner. Ik heb echt gekozen voor de richting van ICT maar het lijkt me toch leuk ICT en elektra te combineren.

Als ik mag vragen welk product raad je me hier dan precies aan om te kopen?
Het programmeren van het dingetje zal ik zo onder de knie hebben alleen het elektra gedeelte moet ik dus echt gaan leren. Ik heb wel eens gewerkt in kabel boom van scooter etc. maar dat is ook maar simpel + en - kabels maar als het echt om volt en watts etc. gaat dat is erg nieuw voor mij.

Ja om het apparaatje los te draaien of aan een pc daar zit ik juist tussen te twijfelen. De pc die ik wilde bouwen word zo wie zo een pc met een Mini-ITX moederbord. Wenslijst is dat wat dan?

Edit:
Het apparaatje op een pc is ook wel leuk, maar ik lees zo net als je het uitbreidt met een lan kit kan je er zelf ook http requests naar doen klopt dit? Dan kan ik ook op mijn webhosting een script maken wat een request doet naar het apparaat en vervolgens mijn webhosting het werk laat doen.

Ik denk dat ik eerst het apparaatje zo op mijn eigen pc ga programmeren, wij thuis hebben rolluiken die je met afstandsbediening omhoog en omlaag kunt laten. Welk signaal is dit en kun je ook met de Arduino dit signaal na bootsen dat je zo de rolluiken dicht en open kunt laten gaan? Lijkt me wel leuk projectje om eens mee te beginnen.

[ Voor 25% gewijzigd door Dw1-nl op 08-12-2010 20:40 ]


Acties:
  • 0 Henk 'm!

  • jeronimo
  • Registratie: September 2003
  • Laatst online: 18:14
Deze persoon is vrij ver gegaan met huisautomatisering en op zijn site vind je ook diverse interessante links.
http://www.bwired.nl/

[ Voor 27% gewijzigd door jeronimo op 08-12-2010 23:21 ]


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Ja ik heb me het Airduino december aanbieding gekocht zal hem morgen wel in huis hebben. Maar ik heb nog nergens een uitbreiding gezien met wireless lan bestaat dit wel ervoor want anders moet ik best een lange lan kabel gaan trekken.

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Die wifi bestaat wel ja, alhoewel ik zelf alleen de ethernet shield heb gebruikt.
Kijk anders ook eens hier:
http://www.antratek.nl/Arduino.html

daar staan zo'n beetje alle arduino's op.

De Uno is de opvolger van de Duemilanove. Praktisch hetzelfde....
En de grote broer is de Arduino Mega 2560, welke de opvolger is van de Arduino Mega.
(Ook hetzelfde, alleen heeft de mega 2560 2 keer zoveel programma geheugen dan de oude mega).

De Uno zou wel eens te weinig poorten kunnen hebben, dan zou je de mega kunnen nemen die veel meer poorten heeft.
Het precieze aantal vind je terug op www.arduino.cc onder het kopje "hardware".

Ga op die site van antratek eens helemaal naar onderen, daar zie je alle shields.
Op de shields pagina zie je b.v. het "WiFly Shield" (wel duur shieldje) voor 115 euro
Daarom pak ik die ethernet shield, die is "maar" 38 euro en ik houd zowiezo meer van kabel dan van draadloos... veel stabieler...

Ik bezit ook die tellymate shield.
Dan kun je gegevens altijd op 1 van de scart aanslutingen van je TV laten zien.
Dat shieldje werkt ook echt supermakkelijk.

Als je temperaturen wilt meten, koop dan een LM35.
Ding kost nog geen euro en geeft heel makkelijk de temperatuur door aan een analoge input van de arduino.

Als je vermogen wilt gaan schakelen (om b.v. rolluik omhoog/omlaag te laten gaan) dan kun je beter hier even rondvragen want dat is wel andere koek dan dit laagspanning/laagstroom geprul.
De vermogens die rolluik motoren kunnen trekken (met name met het inschakelen) kunnen nogal hoog zijn...

mookie


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
mookie schreef op donderdag 09 december 2010 @ 13:55:
Die wifi bestaat wel ja, alhoewel ik zelf alleen de ethernet shield heb gebruikt.
Kijk anders ook eens hier:
http://www.antratek.nl/Arduino.html

daar staan zo'n beetje alle arduino's op.

De Uno is de opvolger van de Duemilanove. Praktisch hetzelfde....
En de grote broer is de Arduino Mega 2560, welke de opvolger is van de Arduino Mega.
(Ook hetzelfde, alleen heeft de mega 2560 2 keer zoveel programma geheugen dan de oude mega).

De Uno zou wel eens te weinig poorten kunnen hebben, dan zou je de mega kunnen nemen die veel meer poorten heeft.
Het precieze aantal vind je terug op www.arduino.cc onder het kopje "hardware".

Ga op die site van antratek eens helemaal naar onderen, daar zie je alle shields.
Op de shields pagina zie je b.v. het "WiFly Shield" (wel duur shieldje) voor 115 euro
Daarom pak ik die ethernet shield, die is "maar" 38 euro en ik houd zowiezo meer van kabel dan van draadloos... veel stabieler...

Ik bezit ook die tellymate shield.
Dan kun je gegevens altijd op 1 van de scart aanslutingen van je TV laten zien.
Dat shieldje werkt ook echt supermakkelijk.

Als je temperaturen wilt meten, koop dan een LM35.
Ding kost nog geen euro en geeft heel makkelijk de temperatuur door aan een analoge input van de arduino.

Als je vermogen wilt gaan schakelen (om b.v. rolluik omhoog/omlaag te laten gaan) dan kun je beter hier even rondvragen want dat is wel andere koek dan dit laagspanning/laagstroom geprul.
De vermogens die rolluik motoren kunnen trekken (met name met het inschakelen) kunnen nogal hoog zijn...
Waar kan ik precies dan de LM35 kopen? Het voordeel is bij mij om de hoek ligt de webshop www.elektronica-online.nl Als je op hun site zoekt naar LM35 dan het eerste resultaat kopen?

Ja over het schakelen van het rolluik dat gaat nu via een afstandsbediening als ik dat signaal daarvan nabootst werkt het dan niet? En trouwens het klik-aan-klik uit systeem is toch ook handig om lampen etc. aan te zetten?

Ik zal morgen de Uno binnenkrijgen en ga ik er mee eens aan de slag.

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Er zijn inderdaad meerdere versies van de LM35.
De LM35CZ gaat van -40 tot +110, maar is nogal duur.
Ik gebruik altijd de LM35DZ, die gaat van 0 tot 100 en elke graad is 10mV.

Dus 20 graden celsius dan geeft hij 200mV uit.

De LM35DZ is dus de 2de die opkomt, als je zoekt op LM35.
Dat ding van €2,40

Die zou ik kopen.
En als je wilt kun je er meteen 2 kopen, dan zie je het verschil.
Ik heb er hier een stuk of 8, en er zit er 1 bij die het ineens goed doet.
De anderen hebben allemaal tot max 1,5 graad afwijking.
(Maar dat is op te vangen in je software, zodra je hebt gekeken wat het echte verschil is).


Als je hem op de arduino aan wilt sluiten, de + en - kun je zo van je arduino aftappen.
De middelste pin van de LM35 zet je dan op een analoge poort.
Kijk hier ook maar eens:
http://pscmpf.blogspot.com/2008/12/arduino-lm35-sensor.html

mookie


Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

En van je rolluik weet ik niet hoe die AB werkt, maar voor klik-aan-klik-uit en ook X10 zijn ook veel spulletjes te verkrijgen.
Varierend van het openbreken van een AB en draadjes erop solderen, tot gewoon modules die je ergens aan de 220 hangt om zodoende meteen commando's vanuit je arduino naar die apparaten door te geven.

Zoek maar eens op arduino X10

mookie


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Ik ben nu al 2 dagen leuk bezig met de Uno best veel geleerd alleen de dingen die ik gekregen heb weet niet wat alles is heb ook 3x een zwart dingetje met 3 pinnen lijkt veel op die LM35 maar geen idee wat het is. Weet namelijk niet zo veel van elektronica.

Maar als ik bijvoorbeeld bij de deur een sensor wil met pincode en in de woonkamer als die pincode goed is de rolluiken omhoog gaan moet ik dan in huis 2x een Uno plaatsen die geprogrammeerd is en die tussen elkaar laten communiceren of hoe moet ik dat precies zien?

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Ik weet zo niet wat die zwarte dingen zijn maar meestal staat er wel iets op.
Aan de hand van die code kun je op google zo opzoeken wat het zou zijn.

Als je arduino uno genoeg pinnen heeft kun je het natuurlijk ook met slechts 1 arduino af.
Je gebruikt dan een paar pinnen en een codeslot met wat lange kabel tussen het codeslot en de arduino.
Voor je rolluiken ligt het eraan hoe je ze wilt bedienen... als je dat met die afstands bediening wilt doen zul je er 1tje moeten "slopen" om een toetsdruk te simuleren met je arduino.
Of wellicht gewoon met een relais waarmee je stroom op de motor van je rolluik zet.

Rolluik motoren zijn in principe vrij simpel.
Er komen 4 draden uit de motor.
1 is aarde, de geel/groene
1 is blauw, de nul
2 zijn zwart of bruin, 1 voor omhoog, 1 voor omlaag.
Als je de 2 zwarte/bruine beide tegelijkertijd van prik voorziet kun je denk ik vuurwerk verwachten.
Verders zijn die motoren vaak wel geprogrammeerd voor een bepaalde looptijd.
Als je er dus een uur lang stroom op zet dan zal hij niet proberen dat rolluik de grond in te boren, maar zal gewoon op tijd stoppen.
Desalniettemin blijft het 240volt dus pas ermee op.
Houd er ook rekening mee dat de motor net in het begin best wel wat vermogen kan trekken totdat hij op gang is.

Heb je al een codeslot/keypad gevonden?
De meeste hebben een matrix zodat je met een paar lijnen toch veel toetsen kunt lezen, ondanks dat het nog steeds best wel veel lijnen kost...
Kijk hier ook maar eens:
http://www.arduino.cc/playground/Main/KeypadTutorial

En hoe wilde je je rolluik gaan bedienen?

mookie


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Ja het was meer een idee vraag ik denk dat ik binnenkort een internet uitbreiding voor koop is toch wat leuker. Maar stel je voor ik heb de Uno verbonden met het netwerk en er zit een temp. sensor op.

Simpel iets:
Ik wil weten op school hoe warm het thuis binnen is. Ik heb al webhosting dus kan mooi met cronjobs werken maar wat kan ik dan het beste doen de Uno bijv. om het half uur de temp sturen naar server of als ik vraag hoe warm het is een request doen naar de Uno?

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Van het wifly shield weet ik niets, maar van die ethernet versie wel.
Er zit een client en een server in.
De server kan maximaal 4 verbindingen tegelijkertijd onderhouden.
Er zijn dus 2 mogelijkheden om dit aan te pakken.

Je kunt een webserver simuleren op de arduino (of een telnetserver, vind ikzelf makkelijker) of je kunt met de arduino een website bezoeken waar je je data dumpt.

Voor de ethernet versie kijk eens op:
http://arduino.cc/en/Tutorial/HomePage
Daar staan wel wat voorbeelden, toevallig eentje en die heet "webserver" en nog toevalliger laat die al waardes van je analoge inputs zien.

Of je kunt een webclient in de arduino zetten volgens het voorbeeld van "webclient".
Daarin staat deze regel:
code:
1
2
byte server[] = { 173,194,33,104 }; // Google
client.println("GET /search?q=arduino HTTP/1.0");

Die kun je vervangen door:
code:
1
2
byte server[] = { x,x,x,x }; // je eigen server
client.println("GET /mijnphpscriptje?a=parameter1&b=parameter2 HTTP/1.0");


De webserver draait dan een script wat de waardes opslaat in b.v. een database.

Of als je een lange periode bij wilt houden kun je ook gewoon pachube gebruiken, daar is ook een voorbeeld van beschikbaar.

Ikzelf ga altijd voor telnet, dat werkt veel stabieler en veel sneller.
Kijk eerst maar eens naar het chatserver voorbeeld.
Je kunt zo met telnet inloggen op de arduino en commando's doorgeven...

mookie


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Mookie super bedankt, een request doen naar de Arduino die een html pagina laat zien is een oplossing of de Arduino de data naar de server versturen, wat is dan precies de telnetserver?

En nog een paar vraagjes ik krijg de arduino niet samen aan de praat met processing @windows gebruik het ledje aan/uit voorbeeld :S.

Ik ga binnenkort echt de ethernet shield kopen voor de Arduino als ik die aansluit op een router moet ik ook de poort in de router ervoor open zetten he?

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Geen dank.

De telnet server is het "chatserver" voorbeeld.
Als je die code bekijkt moet je het volgende even aanpassen:
code:
1
2
3
4
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 177 };
byte gateway[] = { 192,168,1, 1 };
byte subnet[] = { 255, 255, 0, 0 };


Als je die ethernet shield hebt zul je aan de onderkant een sticker met het MAC adres vinden.
Dat vul je archter mac[] in.
Een vast IP adres uit je eigen range die niet in je DHCP scope van je router zit.
gateway en subnet zul je ook wel snappen...

Als je hem dan van buitenaf wilt bereiken kun je in je router inderdaad een port forwarding instellen.

Als je in windows een command prompt opent dan kun je met "telnet 192.168.1.177" of welk adres je ook ingevuld hebt verbinding maken.
Als je het een beetje veiliger wilt doen kun je b.v. een andere poort pakken, bijvoorbeeld 3456 (alles tussen 1024 en 65535 is goed).
Verders als je eenmaal wat met je shieldje hebt gespeeld zul je zelf iets van een wachtwoord invoer kunnen maken zodat niet iedereen erin kan.

Ik heb een stukje uit een bestaand project in de post hieronder gezet.
Als het goed is kun je hem zo laden in je arduino uno, maar ikzelf kan het alleen op een Mega testen en die heb ik nu niet bij de hand.

Het is nogal wat tekst maar als je het even bestudeerd zul je er veel uit kunnen halen om je eigen project te maken indien je gebruikt wilt maken van telnet.

mookie


Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
/*
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 * Note that A0 and A1 are used by the ethernet shield for the SD card detection + SD card write-protect detection
 

TELNET SPECIFICS
server.write(thisChar); -> this will write to all the connected clients right away.
client.write(thisChar); -> this will write to only the current client.
use write to write raw data (bytes)
use print for formatted data / strings

server.write(30); -> this will output strange characters
server.print(30); -> this will output 30

in telnet, client.print(CHAR_ESC "[1;0H"); (row 1 column 0) is the top left side of the screen.
client.print(CHAR_ESC "[25;80H"); goes to the right bottom of the screen
To avoid strange shifting, it's better to go only up to row 24
That way any characters entered by the user appear on row 25 without causing a windows shift
*/

#include <SPI.h>
#include <Ethernet.h>
#include <EEPROM.h>

#define CHAR_ESC "\x1B"    // \x means "hexadecimal notation"  and 1B in hex equals 27 which is the escape character
#define CHAR_NORMAL "\x1B[0m"
#define CHAR_BOLD "\x1B[1m"
#define CHAR_UNDERLINE "\x1B[4m"
#define CHAR_REVERSE "\x1B[7m" //letters turn black and background white
#define CHAR_BLINK "\x1B[5m" //like reverse but background is grey. Also this doesn't work in microsoft telnet and most other clients unless specifically enabled
#define CHAR_80COLUMN "\x1B[?3l" //normal screen, better stay with this for compatability
#define CHAR_132COLUMN "\x1B[?3h" //wide screen :O
#define CHAR_CLS "\x1B[2J" //clear the screen and go to the top left corner

// MAC address is written on the back of the ethernet shield, gateway and subnet are optional.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,177 };
byte gateway[] = { 192,168,1,1 };
byte subnet[] = { 255, 255, 0, 0 };

//These arrays will keep the last 5 readings on 1-5 and the average temp on position 0
//After each read, 1 is replaced with 2, 2 is replaced with 3, etc, 5 becomes the new reading and after that
//the average of the 5 readings is stored on position 0
float Tbuiten[6] = { 20,20,20,20,20,20};
float Tbinnen[6] = { 20,20,20,20,20,20};


//telnet defaults to port 23
Server server(23);

unsigned long time=0, overflow=0;

void readtemps()
{
 //    Tbuiten[i]=(5.0 * analogRead(i+8) * 100.0)/1024.0; //the old function with 5v ref for ADC, not so accurate
 //    Tbuiten[i]= analogRead(i+8) / 9.31; //the new function, with 1.1v ref for ADC, quite accurate.

 //We use this analogReference because it makes the range of the ADC go from 0 to 1.1 volts.
 //The LM35 will output 10mV per degree Celsius
 //so 20 degrees means 200mV, 100 degrees means 1000mV (which is 1V)
 //With the normal analogReference of 5v we would use only 0 to 1 volts which is only 20% of the entire range
 //By setting the analogReference to 1.1volt we are using roughly 90% of the range
 //However: the max reading is now 100 degrees and if you go over it you go over the max input of the ADC, and you will burn it down so pay attention here.
 //Also see: http://www.arduino.cc/playground/Main/LM35HigherResolution
 //Note that it's INTERNAL1V1 for the mega, but INTERNAL for ATmega168, ATmega328, ATmega8 etc. checkout: http://arduino.cc/en/Reference/AnalogReference
 analogReference(INTERNAL); 
 delay(500); //giving the ADC some time to switch to the new reference voltage

 for (int i=1; i <= 4; i++){Tbuiten[i]=Tbuiten[i+1];}
 Tbuiten[5]=(analogRead(4) / 9.31);
 Tbuiten[0]= (Tbuiten[1]+Tbuiten[2]+Tbuiten[3]+Tbuiten[4]+Tbuiten[5])/5;

 for (int i=1; i <= 4; i++){Tbinnen[i]=Tbinnen[i+1];}
 Tbinnen[5]=(analogRead(5) / 9.31);
 Tbinnen[0]= (Tbinnen[1]+Tbinnen[2]+Tbinnen[3]+Tbinnen[4]+Tbinnen[5])/5;

 analogReference(DEFAULT); //setting it back to the 5v ref for the ADC, assuming we're not using a 3.3v arduino
}

void diags (Client client)
{  
  //one overflow has 49:17:2:47 d:h:m:s
  int days=0, hours=0, minutes=0, secs=0;
  client.print(CHAR_CLS); //clear the screen
  days=(time/86400000)+(overflow*49);
  hours=((time%86400000)/3600000)+(overflow*17);
  minutes=(((time%86400000)%3600000)/60000)+(overflow*2);
  secs=((((time%86400000)%3600000)%60000)/1000)+(overflow*47);
  client.print("running time (days:hours:minutes:seconds) : ");client.print(days);client.print(":");client.print(hours);client.print(":");client.print(minutes);client.print(":");client.println(secs);
  client.println(" ");
}


//simple function to move around the screen.
//build this cause it seems impossible to just print text along with variables at the same time with print or println
//welcome to the 21st century!
void TNmove( Client client , int row , int col )
{ 
// example: client.print(CHAR_ESC "[1;0H");
 client.print(CHAR_ESC "[");
 client.print(row);
 client.print(";");
 client.print(col);
 client.print("H");
}

//this just draws basic things that are always there like lines and stuff
void draw_mainscreen( Client client )
{ 
 client.print(CHAR_CLS); //clear the screen
  
 TNmove(client,1,0);
 client.write(201);
 for (int i=2; i <= 16; i++){client.write(205);}
 client.write(209);
 for (int i=18; i <= 79; i++){client.write(205);}
 client.write(187);

 TNmove(client,2,0);client.write(186);
 TNmove(client,2,2);
 client.print("iets: ");
 client.write(179);
 client.print(" nog iets ");
 TNmove(client,2,80);client.write(186);

 TNmove(client,3,0);client.write(199);
 for (int i=2; i <= 16; i++){client.write(196);}
 client.write(193);
 for (int i=18; i <= 79; i++){client.write(196);}
 client.write(182);

 for (int i=4; i <= 21; i++){TNmove(client,i,0);client.write(186);TNmove(client,i,80);client.write(186);}

 TNmove(client,22,0);client.write(199);
 for (int i=2; i <= 14; i++){client.write(196);}
 client.write(194);
 for (int i=16; i <= 29; i++){client.write(196);}
 client.write(194);
 for (int i=31; i <= 44; i++){client.write(196);}
 client.write(194);
 for (int i=46; i <= 59; i++){client.write(196);}
 client.write(194);
 for (int i=61; i <= 74; i++){client.write(196);}
 client.write(194);
 for (int i=76; i <= 79; i++){client.write(196);}
 client.write(182);
  
 TNmove(client,23,80);client.write(186);
 TNmove(client,23,1);client.write(186); TNmove(client,23,15);client.write(179); TNmove(client,23,30);client.write(179);
 TNmove(client,23,45);client.write(179); TNmove(client,23,60);client.write(179); TNmove(client,23,75);client.write(179);

 TNmove(client,24,0);client.write(200);
 for (int i=2; i <= 14; i++){client.write(205);}
 client.write(207);
 for (int i=16; i <= 29; i++){client.write(205);}
 client.write(207);
 for (int i=31; i <= 44; i++){client.write(205);}
 client.write(207);
 for (int i=46; i <= 59; i++){client.write(205);}
 client.write(207);
 for (int i=61; i <= 74; i++){client.write(205);}
 client.write(207);
 for (int i=76; i <= 79; i++){client.write(205);}
 client.write(188);
 TNmove(client,25,0); //park the cursor on the lowest row of the screen
}

//this fills in the basic screen with details about the LBK's
//this is a seperate procedure so that refreshing the data on the screen doesn't need to update the whole screen including all lines and makeup
void draw_tempsscreen( Client client )
{ 
 
 TNmove(client,4,17);  client.print("Meting");
 TNmove(client,6,3);   client.print("Buiten: ");client.print(Tbuiten[0]);client.write(167);
 TNmove(client,7,3);   client.print("binnen: ");client.print(Tbinnen[0]);client.write(167);

 //printing the menu
 TNmove(client,23,2); client.print("R: Refresh");
 TNmove(client,23,16); client.print("");
 TNmove(client,23,31); client.print("");
 TNmove(client,23,46); client.print("");
 TNmove(client,23,61); client.print("5: diagnostic");

 TNmove(client,25,0); //park the cursor on the lowest row of the screen
}

//simply checks if a client is connected or not
//will return 1 for connected, or 0 for not connected
//client is always 0, 1, 2 or 3 as there are 4 maximum sessions
int client_connected( Client client )
{ 
  return client.connected();
}

void setup() {
  // initialize the ethernet device
  Ethernet.begin(mac, ip, gateway, subnet);
  // start listening for clients
  server.begin();
  // open the serial port
  Serial.begin(9600);
}

void loop() 
{
 //let's see if there's any data awaiting for us from the ethernet interface
 Client client = server.available();
 //got work to do... server.available() just gave back a number higher then 0 so we got data from a telnet client
 if (client) {
  char thisChar = client.read();
  client.print(thisChar, DEC);
  client.print(" ");

  //processing keys received via ethernet
 switch (thisChar) {
  case 'r':    
    draw_tempsscreen(client);
    break;
  case '5':    
    diags(client);
    break;
  case 'q':
  { client.print("You pressed the q button, so goodbye....");    
    client.stop(); }
    break;
  default:
    draw_mainscreen(client);
    draw_tempsscreen(client);
    break;
  }// end of "switch (thisChar)"  
 }// end of "if (client)" so basically end of receiving data and acting upon it
 
 //here we got an overflow of the millis() function which happens roughly every 50 days
 //after the overflow, time will be higher then millis() and thus millis()-time always result in a negative number
 //a negative number is never >5000 so we never go in our loop again.
 //Therefore we reset time to 0 after an overflow so that we go back into our nice loop below.
 if (millis() < time){
  overflow=+1;
  time=0;
 }
 //Because our Arduino is so incredibly fast (*cough*) we want to do some things only every once in a while.
 //Consider that it takes some time to change the ref voltage for the ADC, to read the pins etc etc and we need some delays for that
 //If we do that stuff every cycle then the network access would be superslow
 //Therefore we do the slow part (things that do not need direct attention like reading these pins) only every once in while
 //By doing that we let the loop go fast the rest of the time to process user input like from the telnet session.
 if (millis() - time > 5000){
   time=millis();
   readtemps();
 }
}

mookie


Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

en qua processing... dat gebruik ikzelf niet... dus daar zou ik je zo 123 niet mee kunnen helpen...

mookie


Acties:
  • 0 Henk 'm!

  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 01:32

F.West98

Alweer 16 jaar hier

in [Discussie] Arduino-topic kunnen mensen je ook goed helpen, vaak beter dan hier. Ik zou dit ook daar plaatsen en de discussie daar verder gaan :D

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


Acties:
  • 0 Henk 'm!

  • Dw1-nl
  • Registratie: Maart 2008
  • Laatst online: 10:35

Dw1-nl

Webontwikkelaar

Topicstarter
Mookie bedankt voor je code als ik het goed begrijp heb je buiten ook een sensor? Zit die wel in een doosje of dergelijke? En als ik nu een sensor bij de deur wil dan komt er wel een kabel van zoon 5 meter is dat niet spanningsverlies met 5Volt? En als ik een pc ventilator wil gaan sturen van 12 volt aan/uit gaat dat ook met de arduino?

Volgende vragen zal ik plaatsen in het arduino topic :)

Acties:
  • 0 Henk 'm!

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06 08:37

mookie

Heerlijk Helder

Hij zit niet in een doosje, anders kan hij de buitentemp niet zo goed meten... :)

Wel zit hij in een beetje krimpkous.
Ik heb gewoon een UTP kabel gepakt, daar van ieders paar 1 draad gepakt, vervolgens goed afstrippen en elk draadje apart een krimpkous geven, en daarna het geheel nog eens in een krimpkous stoppen zodat het zwarte kopje van de LM35 nog half open is.

Dus vanaf +/- de helft van het zwarte kopje tot aan de mantel van de kabel zit een grote dikke krimpkous.
En tussen de draadjes afzonderlijk zodat er geen sluiting komt en ze geen ruis van elkaar kunnen oppakken.

Een kabel heeft inderdaad ook een weerstand, dus je verliest een deel van het voltage...
Hoe je die uitrekent kun je her en der wel op internet vinden, maar ga er maar vanuit dan in het geval van de tempsensor het bijna geen gevolgen heeft.
Daarnaast is het zo dat die LM35 ieder een afzonderlijke afwijking hebben.
Je zult dus met een echte thermometer de temp moeten meten, kijken wat je LM35 aangeeft (nadat hij een tijdje in de juiste omgeving aanwezig is, b.v. een minuut minimaal) en vervolgens in je code het verschil moeten aanpassen.

Ik heb LM35 die gewoon 2 graden meer of minder aangeven dan wat het moet zijn.
Dat vang ik dan gewoon af met b.v.
code:
1
Tbuiten[5]=(analogRead(4) / 9.31);

veranderen in:
code:
1
Tbuiten[5]=(analogRead(4) / 9.31)+1.5;

in het geval hij 1,5 graden te weinig aangeeft.

Voor het schakelen van vermogen gebruik ikzelf altijd een velleman kaartje.
Je kunt het ook zelf bouwen, scheelt je waarschijnlijk een tientje maar het is nogal moeilijk om op een gewone eilanden printplaat degelijke verbindingen te maken.

http://www.velleman.eu/distributor/products/view/?id=345892

Je kunt de draadbruggen weglaten en er 2 ULN2803A ic's in plaatsen.
Dan kun je hem meteen met de arduino aansturen.
Het voordeel van deze print is dat de sporen die vermogen moeten geleiden redelijk dik zijn, en er zit al een trafo op om de relais te voeden.
Handige lampjes om te zien of een relais ingeschakeld is, of de voeding het doet en de print is voorbereid voor onstorings netwerken voor zowel inductie (motor) als weerstand (lamp).

Om deze kaart met je arduino aan te sturen hang je de GND van de arduino aan de GND van de kaart.
Vervolgens een draadje van een arduino digitale poort naar een 1 van de connectors voor de relais en je kunt zo 8 of 16 relais schakelen.
Maar die ULN2803A en de IC voetjes moet je wel zelf los ergens bestellen.

In het geval van een 12 volt ventilator zou je zelfs 12 volt uit de voeding van die kaart kunnen halen.
Let erop dat die voeding van die kaart niet eindeloos is...
Die voeding is 2 ampere maar ik zou een beetje lager gaan zitten en als alle relais bekrachtigd zijn.
De relais schijnen zo'n 35mA te trekken dus bij 16 is dat al een half ampere.

Die simpele ventilatoren (50CFM) trekken meestal maar 200mA maar een echte ventilator die zo'n 150CFM lucht kunnen verplaatsen trekken makkelijk 1A.

mookie

Pagina: 1