Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19

PWM Fan Controller

Het Idee
Ik had een aantal PWM (4 draads) fans die ik graag op een PWM fan controller aan wilde sluiten. Nou daar zijn er dus niet veel van, de enigste die ik kan vinden kost een kleine 120 euro. Dit moet goedkoper kunnen, nu had ik ook net mijn eerste arduino ontvangen dus waarom dit niet samen voegen. Toen ben ik aan de slag gegaan met wat hulp vanuit het arduino topic. Om dat topic wat te ontlasten hier verder gegaan. De voortgang zal ik in de OP bijhouden.
Voortgang
Afbeeldingslocatie: http://puu.sh/8WIua.png
Zwart: GND
Rood: 12V
Bruin: LCD data
Geel: RPM
Blauw: PWM
Grijs: Button
Groen: LCD backlight

Zo ziet het hardware plaatje er tot nu toe uit.
Hardware:
- Arduino UNO (wordt wss vervangen door een Pro Mini)
- 1602 LCD
- Breadboard (straks hopelijk een eigen bordje 8))
- 3 momentary switches
- Instel pod

Voor de aansturing heb ik het volgende uitgedacht:
Afbeeldingslocatie: http://puu.sh/8WHq2.png

Afbeeldingslocatie: http://puu.sh/8XTl8.png
Laatste volgt nog :)

Code voor het uitlezen van de RPM's via de analoge pinnen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int pin = A0;
unsigned long duration;
unsigned int rpm;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  //X is the max rpm of your fan (12V)
  //Y is the average outcome of duration at 12V (first two outcomes/2)
  rpm = (( X L* Y )/duration);
  //Z is the printed duration as rpm when the fan has stopped.
  if (rpm == Z){
    Serial.println("0");
  if (rpm <Z){
    Serial.println(rpm);
  }
}


Deze code vereist wel enige calibratie:

Wat je als eerste doet is dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int pin = A0;
unsigned long duration;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  Serial.println(duration);
}

Dan krijg je in de serial monitor een hele waslijst aan getallen.
Dan even automatisch scrollen uitzetten en het gemiddelde nemen van de eerste paar getallen.

Vervolgens ga je de gemiddelde duration samen met je max rpm (alles gemeten op 12V) invullen.
X = max rpm
Y = gem duration
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int pin = A0;
unsigned long duration;
unsigned int rpm;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  rpm = (( 2200L*6550 )/duration);
  Serial.println(rpm);
  }
}

De 'L' blijft staan omdat anders het cijfer niet goed wordt weergegeven.
Dan ga je kijken of de rpm keurig wordt weergegeven, zo ja dan stop je de fan met de hand en kijk je welk getal in de seriele monitor verschijnt. Dit is je 'Z'.

Zo nee dan heb je iets van de 'X' en de 'Y' niet goed ingevuld.

[ Voor 78% gewijzigd door ProAce op 26-05-2014 09:10 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

top _/-\o_

overigens kan je in Fritzing zelf ook komponenten toevoegen of ontwerpen met een editor.
dus als je even googled vind je vast een PC fannetje die je aan je parts library toe kan voegen ;)

[ Voor 93% gewijzigd door Anoniem: 187449 op 16-05-2014 10:22 ]


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 17:44

Damic

Tijd voor Jasmijn thee

4 analoge uit en 4 interrupt in :) of de ingang via een shift register doen.

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • BlueFireGaming
  • Registratie: April 2013
  • Laatst online: 04-05 11:53
Dit ziet er heel interessant uit. Zat er zelf aan te denken om een dergelijks iets te doen via de Raspberry Pi en er dan eventueel een web interface bij te maken. Zal dit topic nog eens in de gaten houden.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Ik heb eens dit opgebouwd, zit knoppenmenu aan vast:
YouTube: Example 13.1
http://tronixstuff.com/20...arduino-chapter-thirteen/
Wellicht dat je daar een voorbeeld in kunt vinden maar kan goed zijn dat er meer specifieks daarover ergens anders te vinden valt. Ik zal eens rondneuzen.
Over de hardware attachinterrupt; op de ATM328 kan je daar 2 pinnen voor gebruiken, pin 2 en 3. Dat zit zo in die chip ingebakken en is dus niet genoeg voor 4 fans.
Ik zie ook niet zo gauw hoe je dit met een shifter moet oplossen en of dat uberhaupt wel kan. Misschien dat Damic dat iets kan toelichten voor je ?
Supp\
Dit is meer specifiek : http://arduino.cc/en/Tutorial/ButtonStateChange
Trefwoord was Arduino-Pushbutton-Menu
https://www.google.nl/sea...=chrome&es_sm=93&ie=UTF-8
Ik bedoel daar niet mee "ga googlen" , maar ik bedoel ermee dat daar misschien nog meer handige links staan op dat gebied.
Sup2\
Over de interrupt, Borroz heeft een goede link gegeven om dit software te regelen Anoniem: 187449 in "[Discussie] Arduino-topic" en hier heb ik er nog 1 gevonden http://www.gammon.com.au/forum/?id=11488
Die laatste is een hele studie op zich dus niet goed doorgespit. De vraag bij allebei is of je dan niet de hele sketch die je nu al hebt moet gaan omgooien en zo ja, of het niet makkelijker kan.
Misschien is het makkelijker om per Mini 2 fans te plaatsen. :D
Is echter niet de goedkoopste oplossing.
Sup3\
Hier iemand met ongeveer zelfde vraagstuk http://forum.arduino.cc/index.php?topic=104233.0 wat weer doorverwijst naar een bestaande lib.

[ Voor 49% gewijzigd door kitao op 16-05-2014 18:44 . Reden: Supp\ Videoafb. verwijderd ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Gezien de tussenliggende posttijden geen edit vorige post.

Om te beginnen mis ik iets in de OP, hoe wordt het toerental gemeten op de fan ? Sommige fans hebben een hall-sensor ingebouwd en versturen via een geel draadje een signaal http://themakersworkbench...eading-pc-fan-rpm-arduino
Ten tweede mis ik de bronnen waar je jouw opstelling en sketch vandaan hebt. Aangezien dit topic op aanraden is verplaatst uit het Arduino-topic weet ik dat, maar anderen niet. De bron was dit http://playground.arduino.cc/Main/ReadingRPM en in een link daaronder wordt gebruik gemaakt van een IR-setje dat een interrupt opwekt. Hoe zit het bij jou want het Fritzing-schema geeft daar geen duidelijkheid over ?

En even vooraf, ik heb geenszins de intentie te gaan kapen, ik kijk mee omdat ik er zelf van leer en wat ik tegenkom en wat me van toepassing lijkt wil ik best delen. Aan de andere kant, ik heb er geen praktische toepassing voor en ben ook niet van plan het na te bouwen dus echt diep in de materie duiken en dan vooral met name in het programmeergedeelte doe ik niet. In hoeverre je het volgende kunt toepassen kan ik daarom moeilijk beoordelen, zeker omdat je zelf aangaf nog niet veel ervaring te hebben met programmeren.

Dit gezegd hebbende terug naar waar het om draait :)
Ik kwam dit tegen : http://www.gammon.com.au/...wpost.php?id=10945&page=1
De MCP23017 port-expander waar veel info over is te vinden. Dat artikel heeft 3 pagina's vol over 16 knoppen die via een interrupt kunnen worden uitgelezen en het bijbehorende programma laat dan zien welke knop is ingedrukt. Met 4 fans zou dan waarschijnlijk zoiets na aanpassing sketch ook mogelijk zijn hoewel die erg snel draaien. Voordeel is dat je in geval IR-detectie toepast weinig last van bouncing zult hebben.
De code staat in de OP van dat artikel. Eerste wat ik altijd doe is kijken of het compileert want dat kun je beter vooraf weten als achteraf als je alles heb opgebouwd. De sketch compileert niet maar dat is een kwestie van find-replace toepassen voor wire.send en -receive.
De port-expander wordt bestuurd d.m.v. I2C, een duidelijke twee-delige tutorial kun je hier vinden als je er interesse in hebt http://tronixstuff.com/20...-arduino-and-the-i2c-bus/
Afbeelding MCP23017
Afbeeldingslocatie: http://www.gammon.com.au/images/Keyboard_Wiring.png

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Ik maak gebruik van de opstelling zoals in het fritzling plaatje.
Dus geen ir maar gewoon de sensor draad uitlezen.
Dit omdat de fans straks verdeelt zijn over de kast, dan is dat niet makkelijk met ir.
Ga even je tekst doorspitten..

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Neem je tijd, heb het zelf ook niet in 5 minuten gedaan. ;)
Over de fan, die heeft maar 2 draadjes in jouw schema, zit het zo ?
Afbeeldingslocatie: http://themakersworkbench.com/sites/default/files/images/Fan_RPM_Arduino_0.jpg
De draadjes kun je makkelijk kleur geven door er rechts op te klikken. Zit sketch bij dat verschilt van die jij hebt.
http://themakersworkbench...eading-pc-fan-rpm-arduino

[ Voor 1% gewijzigd door kitao op 17-05-2014 08:49 . Reden: foto resize ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Je kunt ook denken aan een optie waarbij je niet de hele tijd allevier de fans uitleest maar ze gewoon om de beurt checkt. Dat zou je kunnen doen met een 7408 chip (AND) door het als volgt te doen:

Op elke AND een FAN en een willekeurige pen van je arduino op de ingang, de outputs allemaal op jouw interruptpin.

Je schakelt 1 van de vier pinnen op je Arduino in en je meet op je ingang dan de juiste fan :)

In de software zet je dan even je interrupt uit, je start een nieuwe meting en je sluit de juiste RPMpin aan.

Acties:
  • 0 Henk 'm!

  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 18:02
sebastius schreef op vrijdag 16 mei 2014 @ 21:28:
...een optie waarbij je niet de hele tijd allevier de fans uitleest...
Dat. Pak een input multiplexer 74HC-nogwat en gebruik je input capture unit op je 16 bit timer.
(zie datasheet)
Je wilt geen asynchrone >20 KHz interrupts, nergens niet.

Of je koopt een ARM Cortex-Mx welke wel meer dan genoeg input-capture/pwm timer channels heeft.

[ Voor 9% gewijzigd door jeroen3 op 16-05-2014 21:48 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

http://datasheets.maximintegrated.com/en/ds/MAX31785.pdf < wat denk je van deze, en dan via I2C op de Arduino? Lekker simpel. Maar wel heel moeilijk solderen ;)

http://www.ti.com/lit/ds/sbas386c/sbas386c.pdf < deze lijkt me meer geschikt. Via SMbus/I2C ook weer aanstuurbaar, met adres-pinnen zodat je er meer op 1 bus kan zetten, tot 9 devices!

Leverbaar via Farnell: http://nl.farnell.com/tex...fanctrl-16qsop/dp/1754744

[ Voor 14% gewijzigd door sebastius op 16-05-2014 22:21 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Topic kan dicht, is opgelost :+

Afbeeldingslocatie: http://img.auctiva.com/imgdata/1/5/4/8/3/9/5/webimg/482543896_o.jpg
http://www.ebay.com/itm/5...ain_0&hash=item2c6311d190

Btt, ik heb een 3-draads fannetje thuis, deze. Overal lees ik dat die 3e draad een bloksignaal geeft voor de rpm's, hier bijvoorbeeld http://www.analog.com/lib...ives/38-02/fan_speed.html. Ik heb er een scoop en een LA op gezet maar het enige wat ik meet op de gele draad is of er wel of geen spanning opstaat, niks mooi blokgolfje.
Zoals hiervoor slim werd bedacht om niet constant 4 rpm's te meten maar omstebeurt probeerde ik ook buiten het hokje te gaan denken ; is een interrupt eigenlijk wel nodig ?
Artikeltje gevonden en stonden paar puntjes in, zoals een F/V converter of een teller die volloopt en dan bij stackoverflow een signaal stuurt naar de micro bijvoorbeeld. Die teller leek me wel wat vandaar dat ik op de fan ben gaan meten, maar helaas, dat gaat dus niet door.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Om dat signaal te meten moet er wel 5v op dat draadje staan ;)
Vandaar mijn opstelling.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
"Vandaar mijn opstelling".

Mogge,
Dat was toch deze opstelling waar ik al eerder naar vroeg ?

Afbeeldingslocatie: http://themakersworkbench.com/sites/default/files/images/Fan_RPM_Arduino_0.jpg

Zo heb ik de fan gemeten maar dan ipv dat gele draadje op pin2 van de uno heb ik daar de scoop op gezet vanaf GND. Dit krijg ik in beeld, net weer geprobeerd:

Afbeeldingslocatie: http://s24.postimg.org/u1l2l2rmp/Fan.jpg klik

Blauw is de meetlijn, de andere twee zijn zgn. cursorlijnen, die kan ik zelf plaatsen. Blauw is een mooie 5 Volts flatliner. :-(

Mwa, geeft niet. Ben je al iets wijzer geworden na de diverse tips welke kant je nu opgaat of is het nog te vroeg om daarnaar te vragen ?

[ Voor 0% gewijzigd door kitao op 17-05-2014 10:55 . Reden: foto resize ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

@Kitao.. draait de fan wel ?

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Als een tiereliertje :)
Je weet welke regelbare voeding ik heb, bij circa 5V gaat het fannetje draaien en dan krik het op tot 12V voor full power. Maar geen blokgolf helaas. Maar geeft niet, ik heb maar 1 zo'n fan en meerdere opstellen om te kijken of het mogelijk is om dan de rpm's via 1 uno te meten gaat toch niet. Afgezien dat ik daar toch geen toepassing voor heb. Overigens heb ik eens op afbeeldingen rond zitten kijken; wat ik tegenkwam met 4 fans is een aan/uit regeling op een temp.sensor maar geen 4 rpm's op één uno. Wil niet zeggen dat het niet bestaat natuurlijk en er zijn wel eerder vragen over geweest wat in een vorige link is terug te vinden.
Sup\ Dat is deze http://forum.arduino.cc/index.php?topic=104233.0

Edit\ Even een vraagje, als je een 3-draads fan hebt dan zou dus in principe altijd dit gelden :
The difference between 2-wire fans and 3-wire fans is the availability of feedback from the fan for closed-loop speed control. The tach signal indicates whether the fan is running and its rate of speed.

http://www.analog.com/lib...ives/38-02/fan_speed.html
Kan zijn dat ik het gele draadje al eerder eens op 12V heb gezet als dat zo is. :/

[ Voor 28% gewijzigd door kitao op 17-05-2014 10:40 . Reden: Supp\ ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

ik ben het wel eens met jeroen3 en sebastius.

het basis schema wat ProAce gebruikt en de code gaat uit van 1 interruptroutine.. als je de poorten uit zou breiden om 4 interrupts mogelijk te maken, vb met de PinChangeInt library, dan loop je al snel tegen problemen aan.
- http://forum.arduino.cc/index.php?topic=87195.0

Wat Kitao voorstelde, die regeling van eBay is zo gek nog niet ;)

En anders wordt het echt een stukje hardware aan je arduino en tussen je fans zodat je 1 fan tegelijk meet en na 4 metingen je display (of regellus) ververst.
hoe dan ook .. het is geen simpel projectje.

[ Voor 19% gewijzigd door Anoniem: 187449 op 17-05-2014 10:51 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Zie OP.

[ Voor 99% gewijzigd door ProAce op 22-05-2014 19:26 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

* spit in rommelbak op zoek naar een werkende 3 wire fan :)

Afbeeldingslocatie: http://i.imgur.com/X6gJYkq.jpg
yep.. gevonden :9

- http://www.barnesian.com/...red-smart-fan-controller/
- http://www.formfactors.or...specs%5CREV1_2_Public.pdf
- http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf


er zijn natuurlijk ook voor die chip library's die het leven makkelijker maken.
de MCP 23017 16 bit I2C I/O expander kost € 2,25 incl. verzendkosten in NL !
* maar wellicht is die MCP 23017 toch minder geschikt om PWM te verwerken zonder een berg code

- http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf
- http://tronixstuff.com/20...g-your-arduinos-io-ports/
- http://raspi.tv/2013/usin...-16-new-gpio-ports-part-3

MCP23017 – 16 ports i2c based
MCP23S17 – 16 ports spi based
MCP23008 – 8 ports i2c based
MCP23S08 – 8 ports spi based
74×595 – 8 bit shift register

zou de TCC5940 evt. ook te mis gebruiken zijn :?

- http://www.ti.com/lit/ds/symlink/tlc5940.pdf
- http://playground.arduino.cc/Learning/TLC5940
- https://code.google.com/p/tlc5940arduino/

nee, DE eenvoudigte oplossing (qua code/hardware) is de AMC6821 chip die speciaal voor dit doel gemaakt is (tnx sebastius ;) )

[ Voor 168% gewijzigd door Anoniem: 187449 op 17-05-2014 14:57 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Het is niet alleen een kwestie van welke chips je gaat inzetten maar ook, hoe krijg je die aan de gang. Ik wil hier niets afdoen aan eerder gegeven tips -dat meen ik echt- maar het zou voor mij in ieder geval geen kattepis zijn om zo'n chip te programmeren zonder voorbeeld. Ik liet eerder een link zien over een port-expander.
Dit is een stukje uit het bijbehorende programma :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// MCP23017 registers (everything except direction defaults to 0)

#define IODIRA   0x00   // IO direction  (0 = output, 1 = input (Default))
#define IODIRB   0x01
#define IOPOLA   0x02   // IO polarity   (0 = normal, 1 = inverse)
#define IOPOLB   0x03
#define GPINTENA 0x04   // Interrupt on change (0 = disable, 1 = enable)
#define GPINTENB 0x05
#define DEFVALA  0x06   // Default comparison for interrupt on change (interrupts on opposite)
#define DEFVALB  0x07
#define INTCONA  0x08   // Interrupt control (0 = interrupt on change from previous, 1 = interrupt on change from DEFVAL)
#define INTCONB  0x09
#define OLLATB   0x15
[...............]...........etc

En bij een andere chip heb je weer andere commando's nodig. Ik heb dat laatst met een RFID eens proberen na te lopen maar als je niet goed ervaren bent in datasheets, zoals ik, dan kun je dat wel schudden om het zelf te schrijven. Of je moet veel geduld en inzet hebben. En een scherp koppie.
het basis schema wat ProAce gebruikt en de code gaat uit van 1 interruptroutine..
Denk je dat het op dezelfde manier met een extra interrupt op pin 3 wel zou kunnen lukken, dus met 2 fans ?
Er zijn natuurlijk ook voor die chip library's die het leven makkelijker maken
Ja, tnx. Maar zoiets schreef ik eerder, van die chip is veel te vinden, dit is bijvoorbeeld van de MCP23S17.
Is niet de chip uit de code maar een broertje ervan meen ik. http://playground.arduino.cc/Main/MCP23S17
Of dit dan bij andere IC's ook zo is heb ik eigenlijk niet nagezocht, maar is mss wel handig voordat iemand besluit om die in te zetten ? :/

[ Voor 36% gewijzigd door kitao op 17-05-2014 11:28 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
ProAce schreef op zaterdag 17 mei 2014 @ 10:55:
Ik denk dat het een stukje extra hardware wordt, alleen welke chip is nou het meeste geschikt.
Dat 1 voor 1 uitlezen is een goed plan en maakt het wat gemakkelijker.
Verder is het deze opstelling:
[afbeelding]
Het uitstekende draadje gaat naar de tacho draad van de fan.
Ik heb geprobeerd met pulseIn() te kijken naar wat er dan uitkomt aan gegevens: Sketch:
code:
1
2
3
4
5
6
7
8
9
10
11
12
int pin = A0;
unsigned long duration;
void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}
void loop()
{
  duration = pulseIn(pin, HIGH);
  Serial.println(duration);
}

Uitkomst:
code:
1
2
3
4
5
6742
7172
6727
7159
6727

Dat is op 12V 2200 rpm.
Verder ben ik nog niks verder gekomen.
Als je het door 3 deelt zit je aardig in de buurt. Vind dat je al best ver bent gekomen. Over welke chip het meest geschikt is heb ik geen antwoord op. Een reden daarvoor is al aangegeven, over het programmeren, en over de port-expander, dat voorbeeld was met knopjes en niet met 2200 rpm's

[ Voor 11% gewijzigd door kitao op 17-05-2014 11:48 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

kitao schreef op zaterdag 17 mei 2014 @ 11:02:
Het is niet alleen een kwestie van welke chips je gaat inzetten maar ook, hoe krijg je die aan de gang. Ik wil hier niets afdoen aan eerder gegeven tips -dat meen ik echt- maar het zou voor mij in ieder geval geen kattepis zijn om zo'n chip te programmeren zonder voorbeeld. Ik liet eerder een link zien over een port-expander.
[..]
Sorry hoor maar je slaat echt de plank mis. Overigens: Waarom blijf je over een IO expander doormodderen terwijl de TS daar helemaal NIKS aan heeft?

Terug naar het doel, de PWM controller:

Twee dingen lezen, de I2C informatie bij de Arduino Reference en de datasheet van een eerder aangegeven PWM-Fancontroller-chip en het zit zo in elkaar.

Voorbeeld:

Ik sluit een AMC6821 aan met A0=gnd en A1=gnd. Het adres van de chip is dus 00110000 (binair), 48 dec of 30 hex. Ik wil een hoge PWM-frequentie, de PWM_mode pin knoop ik aan de GND.

Dan moet je als je een register wilt uitlezen het volgende doen:

Je stuurt naar het adres van de chip (in dit geval 30hex) 1 byte met het uit te lezen adres van het register
Daarna ontvang je 1 byte uit dat register.

Als je een byte wilt schrijven naar het register van de chip dan doe je dat zo:

Je stuurt het adres van de chip (in dit geval 30hex) 1 byte met het register-adres en 1 byite met de data die er in moet.

Als ik de fan op 25khz wil laten draaien, met een spinuptijd van 2sec dan moet ik het volgende doen:

schrijf naar 0x30 (hex) het registeradres 0x20 (hex) en de byte 00011101

Op een Arduino ziet dat er zo uit:

code:
1
2
3
4
Wire.beginTransmission(0x30);
Wire.write(0x20);
Wire.write(0x1D);
Wire.endTransmission();

Valt mee toch?

En als ik de actuele RPM's uit wil lezen dan werkt dat zo (ik sla even het aanzetten van de tachometer over)

Ik moet een register uitlezen, het TACH-DATA register en de volgende formule toepassen: RPM = (100000x60) / (waarde TACH DATA register).

Hoe lees je dat register uit? Het is een 2x 8bit register (high byte op adres 0x09 en low-byte op adres 0x08). Dat doe je zo:

code:
1
2
3
4
5
6
7
8
9
Wire.beginTransmission(0x30);
Wire.write(0x08);
Wire.endtransmission();
lowbyte = Wire.read();

Wire.beginTransmission(0x30);
Wire.write(0x09);
Wire.endtransmission();
highbyte = Wire.read();

Deze code is niet helemaal compleet of getest maar zo zou het moeten werken ongeveer.

Oftewel: met lezen en rustig begrijpen wat je leest kom je een heel eind.

[ Voor 7% gewijzigd door sebastius op 17-05-2014 13:01 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
sebastius schreef op zaterdag 17 mei 2014 @ 12:48:
Sorry hoor maar je slaat echt de plank mis. Overigens: Waarom blijf je over een IO expander doormodderen terwijl de TS daar helemaal NIKS aan heeft?
Terug naar het doel, de PWM controller:
Ik meen duidelijk al 2x te hebben geschreven dat het expander-voorbeeld gebaseerd is op interrupts opgewekt door het indrukken van knopjes, niet voor 2200 rpm's wat een ander verhaal is. En dat die expander geschikt is om meerdere interrupts te kunnen detecteren had je ook kunnen lezen als je die 3 pagina's had doorgelezen.
http://www.gammon.com.au/...wpost.php?id=10945&page=1

[ Voor 13% gewijzigd door kitao op 17-05-2014 20:16 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

kitao schreef op zaterdag 17 mei 2014 @ 13:24:
[...]

.. zonder krachttermen svp.
- krachttermen ?? stel je niet zo aan

wel een leuk chipje die AMC6821 .. maar daar heb je er dan 4 van nodig ?

[ Voor 26% gewijzigd door Anoniem: 187449 op 17-05-2014 13:44 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Anoniem: 187449 schreef op zaterdag 17 mei 2014 @ 13:40:
[...]


- krachttermen ?? stel je niet zo aan

wel een leuk chipje die AMC6821 .. maar daar heb je er dan 4 van nodig ?
4 fans die kennelijk afzonderlijk geregeld moeten worden, dus 4 chips :)

Acties:
  • 0 Henk 'm!

Anoniem: 187449

sebastius schreef op zaterdag 17 mei 2014 @ 13:48:
[...]

4 fans die kennelijk afzonderlijk geregeld moeten worden, dus 4 chips :)
wat kost dat >:)

* 10 - 99 € 1,88

[ Voor 32% gewijzigd door Anoniem: 187449 op 17-05-2014 22:50 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

€ 3,32 ex btw, incl verzenden via Farnell.

Overigens: die kant en klare fancontroller die Kitao postte lijkt mij persoonlijk de beste oplossing eigenlijk. Voor dat geld kun je het niet zelf bouwen.

[ Voor 65% gewijzigd door sebastius op 17-05-2014 13:57 ]


Acties:
  • +1 Henk 'm!

Anoniem: 187449

he.. dat is handig

Afbeeldingslocatie: http://blog.tecsmith.com.au/assets/4/2013/08/IMG_0188.jpg

[ Voor 80% gewijzigd door Anoniem: 187449 op 17-05-2014 14:15 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Anoniem: 187449 schreef op zaterdag 17 mei 2014 @ 13:58:
he.. dat is handig

* eens.. voor dat geld krijg je het zelf nooit voor elkaar en zeker niet zo mooi
Kijk, het hele project is al meteen voorzien van een Arduino-Shield layout en 4 kanalen. Kant en klaar :o

Acties:
  • 0 Henk 'm!

Anoniem: 187449

nou, hebben we wel een biertje verdiend.. :)

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Wow bedankt voor alle input :)
Het gaat geen kant en klare fan controller, want dat neemt het leuke van dit project weg.

Verder heb ik bijna de manier klaar om de rpm uit te lezen via de A0 t/m A5 pin *O*
Dan blijft alleen de aansturing en de pwm over als probleem.
Ga even al jullie posts doorspitten :P

Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Eventueel knoop je twee Arduino's aan elkaar, zodat je de taken een beetje verdeeld :)

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Das opzich wel een goede :P
Pro Mini kost toch niet zoveel :P

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Er blaast hier een lekker PWM-briesje op dat flesje heineken
Beetje basic, maar toch
Afbeeldingslocatie: http://s27.postimg.org/tl11svar3/FAN2.jpg klik
code:
1
2
3
4
5
6
7
8
9
int TPin = 3;      
void setup()
{
  pinMode(TPin, OUTPUT);   
}
void loop()
{
  analogWrite(TPin, 250);
}

Proost :Y)
Sup\ Ik zal er paar bronnetjes bij geven.
http://www.albertopasca.i...eed-control-dc-motor-pot/
De TIP120 heb ik niet dus maar een andere ergens gepakt en dat was deze, een D882 : http://alltransistors.com...p?doc=2sd882.pdf&dire=_st
Regeling kan ik eigenlijk alleen aanpassen door 250 te veranderen in de sketch en opnieuw uploaden, waardoor de fan uitvalt. Maar dat is te verhelpen met klein uurtje programmeren.
In feite als je de pwm weet, die je met een knop of serial.read invoert heb je gelijk al een maat voor de snelheid. Valt niet in jouw project, dat besef ik. Nog een aardige link
http://forum.arduino.cc/index.php/topic,53281.0.html#top

[ Voor 51% gewijzigd door kitao op 17-05-2014 20:40 . Reden: Supplement ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Basic? Dit voldoet uitstekend :)

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Was even zoeken naar de juiste basisweerstand, te groot of te klein en dan heb je amper nog regelgebied en hoeveel stroom er nu door de basisweerstand gaat heb ik niet gemeten. Transistor blijft koud, dat scheelt.
Edit/ is wel na te rekenen. BE is 0.6V | PWM=250 = 5V | R=2000 ==>> 4.2 / 2000 = 0.0021 A = 2.1 mA

[ Voor 21% gewijzigd door kitao op 17-05-2014 20:54 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

kitao schreef op zaterdag 17 mei 2014 @ 20:42:
Was even zoeken naar de juiste basisweerstand, te groot of te klein en dan heb je amper nog regelgebied en hoeveel stroom er nu door de basisweerstand gaat heb ik niet gemeten. Transistor blijft koud, dat scheelt.
Edit/ is wel na te rekenen. BE is 0.6V | PWM=250 = 5V | R=2000 ==>> 4.2 / 2000 A.
dat schemaatje stuurt alleen een 12 V fan PWM aan.. daar lees je geen tach mee.

moet dan er toch nog een AMC6821 tussen en dat maal 4, kan je met 1 arduino alles aansturen/inlezen via 1 bus.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Ik ben nu (bijna) zover dat ik rpm uit kan lezen via de analoge pinnen.
Dus als rpm aangestuurd kan worden door verhoogde frequentie arduino pinnen hoeft alleen het menu nog te worden ingesteld :)

Acties:
  • 0 Henk 'm!

Anoniem: 187449

nou ben benieuwd hoe je dat allemaal tegelijk gaat doen.
we zien de code wel verschijnen :)

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Anoniem: 187449 schreef op zaterdag 17 mei 2014 @ 20:55:
dat schemaatje stuurt alleen een 12 V fan PWM aan.. daar lees je geen tach mee.
moet dan er toch nog een AMC6821 tussen en dat maal 4, kan je met 1 arduino alles aansturen/inlezen via 1 bus.
Ik snap wat je bedoelt Borroz.
Het beste zou zijn als je 4 draads fan hebt, 2 voor voeding, 1 voor tach en 1 voor toerenregeling, en dat maal 4.
Helaas heb ik maar 1 met 2 draadjes, die nog versleten zijn ook dus ik zit hier met kroko's.
Het was maar een voorbeeld, is niet uitgewerkt. ;)

Edit\ En hoe zit het eigenlijk met jouw stapel fans ? Draaide dat nog ?

Edit2\ Ik heb hier nog een menusketch, is ook vrij rudimentair maar wel eigen werkje. :7
C++:
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
/*Programma om mbv een motorshield een modelauto te besturen met 
2 DC motortjes, één voor aandrijving, de ander voor stuurwiel.
Upload programma en ga naar seriële monitor. 
Kies "s" voor slow, "m" voor medium en "f" voor fast.
Als er niet vooraf een snelheid wordt gekozen gebeurt er niets.
"8"=vooruit, "2"=achteruit. "."=stop.
"4"=west,"6"=oost,"+"=stuur loslaten.
Alles bevestigen met "enter" 
Na veranderen snelheid ("s","m","f") nogmaals voor/achteruit 
enteren.
Iedere andere toets buiten deze genoemde zal alles stoppen.
Toegepast shield: SKU:DRI0009 ; DFRobots
Toegepast mC, Arduino Uno rev.3
*/

int E1=5;
int M1=4;
int E2=6;
int M2=7;
int Steerspeed=100;
int value=0;


void setup() {
  Serial.begin(9600);
  
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
}
void loop(){  
  if(Serial.available()>0){
    int inByte=Serial.read();
     
    switch(inByte){
      case 's': // snelheid instellen op slow
      value=120;
      break;
      case 'm': // snelheid instellen op medium
      value=175;
      break;
      case 'f': // snelheid instellen op fast
      value=255;
      break;
      case '2':  // ga achteruit 
      digitalWrite (M1,HIGH);
      analogWrite (E1,value); // PWM Speed control reverse      
      break;
      case '.': // stop
      analogWrite (E1,0); // Motor stop
      break;
      case '8': // ga vooruit
      digitalWrite (M1,LOW);
      analogWrite (E1,value); // PWM Speedcontrol vooruit
      break;
      case '4': // ga west
      digitalWrite(M2,HIGH);
      analogWrite(E2,Steerspeed); // snelheid van stuurmotor
      break;
      case '6': // ga oost
      digitalWrite(M2,LOW);
      analogWrite(E2,Steerspeed); // snelheid van stuurmotor
      break;
      case '+': // stuur "loslaten"
      analogWrite(E2,0); //spanning stuurmotor eraf
      break;
      default: // iedere andere toets dan genoemde stopt alles
      analogWrite (E1,0);
      analogWrite(E2,0);
    }
  }
}

[ Voor 59% gewijzigd door kitao op 17-05-2014 21:20 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

kitao schreef op zaterdag 17 mei 2014 @ 21:05:
[...]

Ik snap wat je bedoelt Borroz.
Het beste zou zijn als je 4 draads fan hebt, 2 voor voeding, 1 voor tach en 1 voor toerenregeling, en dat maal 4.
Helaas heb ik maar 1 met 2 draadjes, die nog versleten zijn ook dus ik zit hier met kroko's.
Het was maar een voorbeeld, is niet uitgewerkt. ;)

Edit\ En hoe zit het eigenlijk met jouw stapel fans ? Draaide dat nog ?
een 4 draads is een mogelijkheid.

wat betreft die fans.. ik heb ze gevonden :*) en ik heb zelf wat chipjes in bestelling staan, want ik vind het wel interessant project.. 4 PC fans tacho lezen en regelen met 1 arduino en weergeven.
met name de regellus en het menu is prima oefenmateriaal om te coden.
waar we het nog niet over hebben gehad is de temperatuurmeting en feedback in regellus.


* update 4 wire fans is 'the way to go' natuurlijk maar ik zie dat je die ook hebt.

[ Voor 14% gewijzigd door Anoniem: 187449 op 17-05-2014 21:22 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Ik heb 5 4 pins pwm fans :) Had 6 maar eentje begaf het :(

Acties:
  • 0 Henk 'm!

Anoniem: 187449

als je in de achtergrond een klein progje kan laten draaien op je PC (die start bij boot) en die vb temp waarden ect. kan communiceren met je permanent aanwezige arduino + display.. kan je nog veel meer monitoren.

- http://blog.workingsi.com...or-for-pc-case-bling.html

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Anoniem: 187449 schreef op zaterdag 17 mei 2014 @ 21:15:
met name de regellus en het menu is prima oefenmateriaal om te coden.
waar we het nog niet over hebben gehad is de temperatuurmeting en feedback in regellus.[/small]
* update 4 wire fans is 'the way to go' natuurlijk maar ik zie dat je die ook hebt.
Over code oefenen gesproken, zoals je misschien weet ben ik bezig met uitgebreide oefeningen C++. Ben al twee dagen bezig met hoofdstukje over pointers, gelukkig kan ik met visual studio regel voor regel debuggen waarmee de variabelenwaarden in beeld komen. Kortom, ik kan geen code meer zien vandaag.
Gaat niet om mij natuurlijk, maar dat terzijde.
Over de regeling, daar heeft ProAce het niet over gehad in de OP. Heb wel een paar linkjes daarover gezien en af en toe wat gebookmarked maar weet niet of die er bij zit. (als het uberhaupt al gewenst is door Pro ?)

Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Anoniem: 187449 schreef op zaterdag 17 mei 2014 @ 21:30:
als je in de achtergrond een klein progje kan laten draaien op je PC (die start bij boot) en die vb temp waarden ect. kan communiceren met je permanent aanweizge arduino + display.. kan je nog veel meer monitoren.

- http://blog.workingsi.com...or-for-pc-case-bling.html
Leuk idee, kan nog beter. Gewoon direct de SMbus aftappen van je moederbord en het direct doen ;)

Acties:
  • 0 Henk 'm!

Anoniem: 187449

kitao schreef op zaterdag 17 mei 2014 @ 21:34:
[...]

Gaat niet om mij natuurlijk
klopt ;)

het gaat ook om de structuur, de flow van de code.
ook daar is een bepaalde creativiteit/logica voor nodig.
en die leren ze je meestal niet.
die flowcharts mis ik ook in bijna alle arduino boeken.

dus ProAce.. als je alle hardware componenten zo'n beetje bij elkaar hebt maak dan ook is een flowchart van wat de code nu precies moet gaan doen.
Door daar bewust over na te gaan denken wordt het feitenlijke programmeren gemakkelijker en voorkom je een hoop ellende later.
Ook is dan in 1 oogopslag zichtbaar waar je uitbreidingen cq aanpassingen het beste kan plaatsen.
- http://www.smartdraw.com/...MCjxNzcs74CFaXHtAodEkAAHQ

[ Voor 45% gewijzigd door Anoniem: 187449 op 17-05-2014 22:23 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Flowcharts!

Nou weet ik zeker dat we met oude mannen te maken hebben ;)

(nee geintje, eigenlijk is een flowchart essentieel voor goed programmeren).

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Aansturing hoeft niet temp based te zijn.
De aansturing zal gaan dmv knopjes en een menu.
Zal straks even een flow chart maken :)

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
In die tutorial maken ze het juist zo unflowable mogelijk heb ik het idee.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// pointers as arguments:
#include <iostream>
using namespace std;
void increment_all (int* start, int* stop) {
  int * current = start;
  while (current != stop) {
    ++(*current);  // increment value pointed
    ++current;     // increment pointer  
 } }
void print_all (const int* start, const int* stop) {
  const int * current = start;
  while (current != stop) {
    cout << *current << '\n';
    ++current;     // increment pointer  
 } }
int main () {
  int numbers[] = {10,20,30};
  increment_all (numbers,numbers+3);
  print_all (numbers,numbers+3);
  return 0; }

Zonder debug kan ik dit echt niet volgen. Maar goed, we dwalen af, dalijk is het hier even groot rommeltje als in de ard.topic. BTT. Ik heb die regeling toch gebookmarked gisteren. Voor de liefhebbers :)
Afbeeldingslocatie: http://emc2arduino.files.wordpress.com/2013/02/4chfancontrolleruno_bb.png?w=300&h=201
http://emc2arduino.wordpr...automatic-fan-controller/
ProAce schreef op zaterdag 17 mei 2014 @ 21:53:
Aansturing hoeft niet temp based te zijn.
De aansturing zal gaan dmv knopjes en een menu.
Zal straks even een flow chart maken :)
Dat dacht ik al. Gisteren las ik stukje op arduino forum, de TS vroeg om niet-interrupt rpm-lezing. En iedereen begon maar, ja waarom geen interrupt, dit dat. Die kerel sprong uit z'n vel op een gegeven moment. :F
Hier, lachen is dit http://forum.arduino.cc/i...22684.msg171525#msg171525 maar heeft wel beetje gelijk vind ik.

[ Voor 21% gewijzigd door kitao op 17-05-2014 22:07 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

sebastius schreef op zaterdag 17 mei 2014 @ 21:51:
Flowcharts!

Nou weet ik zeker dat we met oude mannen te maken hebben ;)

(nee geintje, eigenlijk is een flowchart essentieel voor goed programmeren).
LOL... maar om in het heden te blijven

ik ontdek net een online flowchart teken programma.. :9

[ Voor 66% gewijzigd door Anoniem: 187449 op 17-05-2014 22:28 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Ik heb deze nog
Afbeeldingslocatie: http://77.222.80.122/imgsrv/products/VNKZ0408.jpg/sjabloon-linex-1175s-computer.jpg :/

Acties:
  • 0 Henk 'm!

Anoniem: 187449

:D ja zo ging dat in de vorige eeuw

Acties:
  • 0 Henk 'm!

  • AlexanderB
  • Registratie: Maart 2007
  • Laatst online: 09-05 19:05

AlexanderB

7800 rpm

Flowchart, State Machine Diagram, Programma Structuur Diagram (PSD), het kan allemaal. :)
Zolang je maar voor jezelf overzichtelijk hebt wat het programma precies doet, en wanneer/onder welke voorwaarden. :) maakt het programmeren erg erg eenvoudig.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Vaak kom je toch weer terug op de inkt-ganzeveer. Voorbeeldje, nu we het toch over programs hebben, ik heb een IDE Visual 2013. Om de flow te volgen kan ik zo instellen dat die regel voor regel de nieuwe waardes geeft van de variabelen. Maarrrrrr, ga je dan regeltje verder, zie je die niet meer natuurlijk. Dussss, pen en papier.
Nou zitten er wel veel functies in dat programma die ik niet ken maar vooralsnog aangewezen op notities.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Zie OP.

Verder is de hardware nu wel bekend, alleen wil ik de pwm freqeuntie hoger hebben.
Dit ivm vervelende tikken in de fan bij lage freqeunties?
Is hier een makkelijke oplossing voor?

Ps. Dit is mijn best lopende topic tot nu toe :D

[ Voor 14% gewijzigd door ProAce op 22-05-2014 19:26 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Zover ik weet loopt Analog.Write van 0 tot 255 en dat komt dan overeen met 0 tot 5 V.
Analog.Read van 0 tot 1024 ook van 0 tot 5 V.
Dus hoe je dat zonder externe dingen kan verhogen, ...... , geen idee.
PS, Ik weet niet hoe je de fan aanstuurt, maar ik merkte het ook in mijn opstelling met de transistor. Als je meer regelspeling wil hebben kun je proberen een andere waarde voor de basisweerstand te nemen, dat kan lager of juist hoger zijn. In trilgebied geef je dan gewoon meer of minder gas. Maak die weerstand echter niet te klein anders smelt de boel.

[ Voor 48% gewijzigd door kitao op 17-05-2014 23:38 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

ProAce schreef op zaterdag 17 mei 2014 @ 23:25:
[afbeelding]
Menu structuur.
Verder is de hardware nu wel bekend, alleen wil ik de pwm freqeuntie hoger hebben.
Dit ivm vervelende tikken in de fan bij lage freqeunties?
Is hier een makkelijke oplossing voor?

Ps. Dit is mijn best lopende topic tot nu toe :D
nee.. zo doe je dat niet

uit de flowchart moet duidelijk worden hoe eea funtioneert mbt je menu , knopjes interactie, je display verversen, je instellingen , je tacho inlezen ect.

[ Voor 15% gewijzigd door Anoniem: 187449 op 17-05-2014 23:38 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Sorry borroz, ver voor mijn tijd :9
Maar het legt het idee wel uit

Acties:
  • 0 Henk 'm!

Anoniem: 187449

nee hoor.. je hebt die theorie alleen nog niet gehad/ voldoende bestudeerd
morgen weer een dag :).

vb bij de start van je pc/programma zullen de fans een 'start waarde moeten krijgen'
dus komt er een 'blokje' set startwaarde fans
als je zo alle 'blokjes' hebt omschreven en doordacht, dan ga je pas de werkelijke code invullen

hier (verder geen verband met jou project) een voorbeeld

Afbeeldingslocatie: http://lh3.ggpht.com/_nIdWbHnIIXQ/TOy90Ao2uPI/AAAAAAAAAHY/KDdMeIl3JfE/s800/alarm_clock_flowchart.png.jpg

1 van de zaken die erin MOET komen is vb 'keypress' wat moet er gaan gebeuren als je een bepaald knopje indrukt / aan draait ;)

[ Voor 90% gewijzigd door Anoniem: 187449 op 17-05-2014 23:52 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Anoniem: 187449 schreef op zaterdag 17 mei 2014 @ 23:40:
nee hoor.. je hebt die theorie alleen nog niet gehad/ voldoende bestudeerd
morgen weer een dag :).

vb bij de start van je pc/programma zullen de fans een 'start waarde moeten krijgen'
dus komt er een 'blokje' set startwaarde fans
Ja, snap wat je bedoeld.
Morgen als ik weer bij me pc kan :P
Ipad is hier niet goed in, was te verwachten..

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Andere optie anti-trillingen stond in mijn vorige link *zucht* :+
Please note: The 2-Ohm resistors and the 1000mf capacitors are optional, but they really do help a LOT to make PWM’d fans quiet.
http://emc2arduino.wordpr...automatic-fan-controller/
Maar zolang jij niet aangeeft hoe jouw schakeling is , blijft het gissen wat precies eventueel door anderen verbeterd zou kunnen worden :O
Laters

[ Voor 3% gewijzigd door kitao op 17-05-2014 23:50 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Ik heb in de beginpost al de schakeling laten zien :X
Deze is tot nu toenog nietveranderd.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Mogge,
Dat is niet helemaal waar ProAce, tenzij ik wat gemist heb. In de OP had je 2 draadjes, in deze post werden het er drie en in deze vier. Dit is jouw laatste tekening:
Afbeeldingslocatie: http://puu.sh/8PxXn.png
"Het uitstekende draadje gaat naar de tacho draad van de fan".

Is die pull-up weerstand werkelijk 220 ? Zou namelijk hoger moeten zijn, 10K zag ik in ander voorbeeld.
Maar samenvattend, en laten we het display buiten beschouwing laten, je heb dus een fan met 4 draden en kijkend naar deze quote :
In addition to the power, ground, and tach signal, 4-wire fans have a PWM input, which is used to control the speed of the fan. Instead of switching the power to the entire fan on and off, only the power to the drive coils is switched, making the tach information available continuously. Switching the coils on and off generates some commutation noise. Driving the coils at rates greater than 20 kHz moves the noise outside of the audible range, so typical PWM fan-drive signals use a rather high frequency (>20 kHz). Another advantage of 4-wire fans is that the fan speed can be controlled at speeds as low as 10% of the fan’s full speed. Figure 2 shows the differences between 3-wire and 4-wire fan circuits:
Dan zal jouw opstelling met misschien een ander pinnetje ongeveer hier op uit komen ?
Afbeeldingslocatie: http://i.imgur.com/5lv7XWBl.png
Is namelijk van belang om te weten want zoals je zag kan je ook met een transistor (pwm-)snelheid regelen, maar dan opgesteld tussen fan en ground. En als je dan vragen over trillingen hebt dan krijg je te maken met andere situaties.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Zal zo even alles uittekenen.
Moet idd een 10k zijn maar die staat niet in fritzling :P
Ik weet het, die kun je zelf toevoegen maar daar had ik even geen zin in

Acties:
  • 0 Henk 'm!

  • ResuCigam
  • Registratie: Maart 2005
  • Laatst online: 19-05 08:00

ResuCigam

BOFH

ProAce schreef op zondag 18 mei 2014 @ 09:35:
Moet idd een 10k zijn maar die staat niet in fritzling :P
Ik weet het, die kun je zelf toevoegen maar daar had ik even geen zin in
Nee je kunt na het plaatsen van je weerstand rechtsonder de waarde aanpassen.

We do what we must because we can.


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Fijn, bedankt.
Voor weerstanden kijk in inspector-veldje. Ik had Fritz open staan maar vond het achteraf makkelijker om de bestaande afbeelding via Paint te wijzigen.
Afbeeldingslocatie: http://s30.postimg.org/wpd4tn9h9/Fan4.jpg

Hé, ResuCigam, tijdje geleden alweer. :)
Hoe is t met de volumeregeling ? Ik kreeg pas zo'n chipje binnen maar niks mee gedaan nog.

[ Voor 19% gewijzigd door kitao op 18-05-2014 09:48 ]


Acties:
  • 0 Henk 'm!

  • sebastius
  • Registratie: September 2000
  • Laatst online: 13:02

sebastius

Laten we lekker link gaan doen

Overigens, je gebruikt nu een externe pull-up, dat kan natuurlijk ook met een interne pull-up :)

code:
1
pinMode(pinnummer,INPUT_PULLUP);

Acties:
  • 0 Henk 'm!

Anoniem: 187449

ProAce schreef op zondag 18 mei 2014 @ 09:35:
Zal zo even alles uittekenen.
Moet idd een 10k zijn maar die staat niet in fritzling :P
Ik weet het, die kun je zelf toevoegen maar daar had ik even geen zin in
niet 'even' maar doordacht en met alle componenten die je wil gaan gebruiken.
met name de 4 wire fans , .. dit voorkomt een hoop onduidelijkheid en ongevraagd advies ;)

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
nou ik dacht dat ik het had, maar nee dus :(

Zie OP.

[ Voor 94% gewijzigd door ProAce op 22-05-2014 19:27 ]


Acties:
  • 0 Henk 'm!

Anoniem: 187449

- ik zie 3 wire fans
- ga is op zoek naar fritzing fans.. ze bestaan
- gebruik kleurtjes voor je bedrading (rood/zwart voor voedingslijnen)
- ik zie geen drukknopjes waarmee je het menu cq instellingen kan aanpassen
- ik mis een gnd verbinding tussen de 12 en 5 (verbinding tussen -5 en -12)

verder al heel netjes :)

wat betreft de bediening.
kom ik weer terug op die flow chart.
schrijf is uit hoe dat zou moeten gaan verlopen zo'n instelling van een fan (nog geen code)
geeft de buttons een nr. vb S1 / S2 / S3 zodat je er naar kan verwijzen in je code / flowchart
en hoe gaan ze werken.. ga je ze 'pollen' in een loop.. of ga je interrupt gebruiken.

en met welke knop kom je in het menu ?
hoe ziet dat menu eruit dan .. selekteer je eerst een fan en dan klik je 'set' of 'enter' en met welke knop dan
het kan wel allemaal met 2 knopjes (moet je 1 langere tijd ingedrukt houden om in het menu te komen) maar 3 is een stukje makkelijker qua code.

verder ben ik van mening (in tegenstelling tot Kitao hieronder) dat het juist wel van belang is dat je eea zo volledig mogelijk uittekend / uitwerkt en niet een belangrijk component (zoals vb het display) weglaat |:(

maar nogmaals, je kan je heel veel ellende en frustratie besparen door 4 van deze chipjes te gaan gebruiken a 1,88 stuk .. (er is zelfs een printontwerpje)
die zitten dan alle 4 op de I2C bus en op die manier kan je ze individueel aanspreken zoals sebastius al heeft uitgelegd.. puur softwarematig alles willen regelen kom je heel snel in de problemen

zo was onderweg naar de ijskast.. later 8)

[ Voor 122% gewijzigd door Anoniem: 187449 op 18-05-2014 16:05 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Alles aangepast op punt 5 na, geen idee wat je daarmee bedoeld :P
Nu even verdiepen in de flowchart :)

Zie OP.

[ Voor 67% gewijzigd door ProAce op 22-05-2014 19:27 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
ProAce schreef op zondag 18 mei 2014 @ 10:48:
nou ik dacht dat ik het had, maar nee dus :(

Deze sketch:
code:
1
#include <LiquidCrystal.h>


en deze opstelling:
[afbeelding]
De blokjes onderin zijn de fans die voeding krijgen van een aparte powerplug.
Dat zou de opstelling moeten worden, alleen wil het dus nog niet werken met de analoge pinnen.
Allereerst, waanzinnig !! d:)b
Heel netjes gemaakt en overzichtelijk. Display en knopjes had evt. weg kunnen blijven, maar het stoort ook niet.
En er zou met een tekstveldje in de tekening een toelichting gegeven kunnen worden wat je nu in een aparte post plaatst. Verder vind ik persoonlijk een apart zelf gecreëerd symbooltje voor een fan niet zo van belang, dit is duidelijk genoeg. (uiteraard is dat wel een leuke oefening, iets waar ik zelf nog niet naar om heb gekeken.)
In feite had het al volstaan als je 1 fanblokje had getekend maar je bent er echt voor gegaan zie ik.

Maar terug naar de hoofdzaak, het werkt dus niet en om dat te verhelpen is dit topic geopend. Nu heb ik momenteel een Pointers-punthoofd maar ik kijk toch even naar je sketch.
Die lijkt me niet compleet, waar is die uit de OP gebleven of ben je van de Interrupt afgestapt ? :?
En nog een tip, probeer eerst 1 fan te laten draaien, houd je sketch zo simpel mogelijk, evt via ser.mon alleen getallen en als dat goed werkt verder uitbreiden naar volgende fan en display. En dan pas die knopjes.
Tenminste, dat ging bij mij het beste maar kan bij jou anders liggen. :)
Soms als ik met zoiets dergelijks bezig ben heb ik een stuk of 7 programma's. Zeg maar fan 1 t/m 7.
Steeds tussendoor opslaan, wijzigen, opnieuw "opslaan-als" totdat er iets nuttigs uitkomt. Als je zelfde programma blijft wijzigen dan heb je kans dat bepaalde stukken die eerst wel goed werkten het na modificatie niet meer doen. Of kan ook dat je iets wist (schrapt) en dan ben je dat stuk kwijt.

[ Voor 42% gewijzigd door kitao op 18-05-2014 15:52 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Ik ben van de interupt afgestapt idd, dit omdat ik zo (dacht ik) 1 tot 6 fans kan meten ipv 2 ;)
Ga nu weer even een tijdje progammeren op mijn o zo warme kamer :P

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Ik kom er nog op terug, ik wil eerst weten wat anderen denken over die zelf-geïmplementeerde wijziging :/

Enne, take it easy, het is geen huiswerk. Hoeft niet vandaag af, sommige projecten lopen maanden. :)

[ Voor 32% gewijzigd door kitao op 18-05-2014 16:02 ]


Acties:
  • 0 Henk 'm!

  • l4mb1k
  • Registratie: Augustus 2008
  • Laatst online: 31-03 19:42
Ik heb al heel lang niet meer met arduino gespeeld maar probeer dit eens?
Je zette steeds een spatie op positie 0 maar denk dat je die wilde zetten op de positie van het eerste getal van de desbetreffende rpm als die kleiner is dan 1000. Toch?

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
#include <LiquidCrystal.h>


LiquidCrystal lcd (12,11,7,6,2,4);
int pin = A0;
int pin1 = A1;
int pin2 = A2;
int pin3 = A4;
unsigned long duration;
unsigned long duration1;
unsigned long duration2;
unsigned long duration3;
unsigned int rpm;
unsigned int rpm1;
unsigned int rpm2;
unsigned int rpm3;


void setup()
{
  pinMode(pin, INPUT);
  pinMode(pin1,INPUT);
  pinMode(pin2,INPUT);
  pinMode(pin3,INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  duration2 = pulseIn(pin2,HIGH);
  duration3 = pulseIn(pin3,HIGH);
  rpm = ((2200*14000)/duration);
  rpm1 = ((2200*14000)/duration1);
  rpm2 = ((2200*14000)/duration2);
  rpm3 = ((2200*14000)/duration3);
   if (rpm >1000){
      lcd.setCursor(0,0);
      lcd.print(rpm,DEC);
    }
    if (rpm <1000){
      lcd.setCursor(1,0);
      lcd.print(rpm,DEC);
      lcd.setCursor(0,0);
      lcd.print(" ");
    }
    if (rpm1 >1000){
      lcd.setCursor(3,0);
      lcd.print(rpm1,DEC);
    }
    if (rpm1 <1000){
      lcd.setCursor(4,0);
      lcd.print(rpm1,DEC);
      lcd.setCursor(3,0);
      lcd.print(" ");
    }
    if (rpm2 >1000){
      lcd.setCursor(7,0);
      lcd.print(rpm2,DEC);
    }
    if (rpm2 <1000){
      lcd.setCursor(8,0);
      lcd.print(rpm2,DEC);
      lcd.setCursor(7,0);
      lcd.print(" ");
    }
     if (rpm3 >1000){
      lcd.setCursor(11,0);
      lcd.print(rpm3,DEC);
    }
    if (rpm3 <1000){
      lcd.setCursor(12,0);
      lcd.print(rpm3,DEC);
      lcd.setCursor(11,0);
      lcd.print(" ");
    }
}

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Anoniem: 187449 schreef op zondag 18 mei 2014 @ 11:14:
verder ben ik van mening (in tegenstelling tot Kitao hieronder) dat het juist wel van belang is dat je eea zo volledig mogelijk uittekend / uitwerkt en niet een belangrijk component (zoals vb het display) weglaat |:(
Allereerst, het volgende is bedoeld als uitwisseling van opinie en niet als dispuut. Het is niet verkeerd om alles netjes uit te tekenen, maar het heeft weinig zin een display neer te zetten als je nog geen goede waardes hebt om te laten printen. Bovendien, zo'n display zit altijd zelfde aangesloten, enkel pinnetje kan verschillen. Bovendien, in ontwerpfase, ga dan eerst naar de ser.mon en houd het overzichtelijk. En over die knopjes, je gaf zelf aan dat je met een flowchart zaken kon toevoegen, waarom nu al, terwijl die fan nog niet draait ?
Ik vind het leuk te tekenen en heb dit binnen 15 minuten geflanst, met de geposte tekening o.a. als voorbeeld, dat wel. Valt nu dan gelijk op dat ProAce arduino ground niet met fan-ground heeft verbonden.
Afbeeldingslocatie: http://s11.postimg.org/mai6fd41r/FANSketch.jpg ....klik
Maar nogmaals, je kan je heel veel ellende en frustratie besparen door 4 van deze chipjes te gaan gebruiken a 1,88 stuk .. (er is zelfs een printontwerpje)
die zitten dan alle 4 op de I2C bus en op die manier kan je ze individueel aanspreken zoals sebastius al heeft uitgelegd.. puur softwarematig alles willen regelen kom je heel snel in de problemen

zo was onderweg naar de ijskast.. later 8)
[....]
Nu loop ik beetje op kolen, maar dat IC is er nog niet. Lijkt mij dat met die interrupt tenminste 1 fan draaiend gekregen kan worden ? Anyway, dat is niet aan mij en net als jij vind ik dit leuk project. Zit eraan te denken om een 4-draadfannetje te bestellen, en dan hoop ik wel dat die draadjes iets doen en niet dat ze in Azie een doelloos draadje eraan hangen zonder functie. :-(

PS In mijn tekening zit trouwens een fout. De voedingslijnen op een breadboard zijn halverwege door midden gehakt. Daar moet ook een verbinding.

PS2 Ik zou nog terug komen op mijn vorige post over het verwijderen van de interrupt. Hoewel ik dat getekend heb op A0 - het schema van P.A. volgend- gaat dit volgens mij niet zo lukken. De RPM-meting werkt - zover ik heb begrepen - als een blokgolf, het aantal pulsen daarvan wordt geteld met interrupts op pin2, zie OP-sketch.
Dat dan op een A0 zetten .... als het zo simpel was dan hadden ze dat gelijk al gedaan vermoed ik. :/

[ Voor 12% gewijzigd door kitao op 18-05-2014 17:48 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Het is me al gelukt ;)
Alleen nog niet om hem op het lcd te krijgen.
Maar via de seriele monitor krijg ik nu keurig de rpm.
Je moet alleen wel de fan in het begin kalibreren door de eerste twee outputs te pakken op 12v.
Hier het gemiddelde van nemen.
Dit gemiddelde x de max rpm van je fan en dat dan delen door de duration

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
So!
Ik wou dat ik op die leeftijd zo slim was of ik ben juist dommer geworden, kan ook.
Graag zou ik de eindsketch willen ontvangen, evt via DM
Tnx !

Acties:
  • 0 Henk 'm!

Anoniem: 187449

kitao schreef op zondag 18 mei 2014 @ 17:20:
[...]

Allereerst, het volgende is bedoeld als uitwisseling van opinie en niet als dispuut. Het is niet verkeerd om alles netjes uit te tekenen, maar het heeft weinig zin een display neer te zetten als je nog geen goede waardes hebt om te laten printen. Bovendien, zo'n display zit altijd zelfde aangesloten, enkel pinnetje kan verschillen. Bovendien, in ontwerpfase, ga dan eerst naar de ser.mon en houd het overzichtelijk. En over die knopjes, je gaf zelf aan dat je met een flowchart zaken kon toevoegen, waarom nu al, terwijl die fan nog niet draait ?
nee, hier ga ik maar niet op reageren.. :D

Acties:
  • 0 Henk 'm!

  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 18:02
Je kunt met een simpele transistor* en een RC filter het bloksignaal naar een analoge waarde omzetten.
Zo kun je ook een PWM DAC maken.
Dus het idee van de analoge pinnen is zo gek niet.

*om de kalibratie (V/Hz) van je schakeling niet afhankelijk te maken van de open-drain in de fan

[ Voor 7% gewijzigd door jeroen3 op 18-05-2014 18:29 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Anoniem: 187449 schreef op zondag 18 mei 2014 @ 18:26:

nee, hier ga ik maar niet op reageren.. :D
Dus met andere woorden, je lacht me uit of mis ik iets ? :?
jeroen3 schreef op zondag 18 mei 2014 @ 18:27:
Je kunt met een simpele transistor* en een RC filter het bloksignaal naar een analoge waarde omzetten.
Zo kun je ook een PWM DAC maken.
Dus het idee van de analoge pinnen is zo gek niet.
*om de kalibratie (V/Hz) van je schakeling niet afhankelijk te maken van de open-drain in de fan
Bedankt voor de link. Ik vraag me alleen af hoe iemand die zegt nog leerplichtig te zijn en die drie dagen geleden nog dit in z'n sketch had staan ....
C:
1
2
if (x=1) ;
Serial>print("Hello world);


... nu over calibreren van dc-motors begint, over gemiddelde durations en blijkbaar jouw link ook ergens heeft gevonden en weten toe te passen. Ik vind dat erg knap.
Ik zeg niet dat het onmogelijk is, er zijn wel meer jeugdigen die miljonair zijn geworden door een App. te schrijven, maar ik vind dit verschil wel erg groot.

[ Voor 69% gewijzigd door kitao op 18-05-2014 18:46 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Kitao, mss is dat iets voor een ander topic?
Laten we het hier niet te veel vervuilen aub :)

Verder de code voor het uitlezen op de analoge pinnen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int pin = A0;
unsigned long duration;
unsigned int rpm;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  //X is the max rpm of your fan (12V)
  //Y is the average outcome of duration at 12V (first two outcomes/2)
  rpm = (( X L* Y )/duration);
  //Z is the printed duration as rpm when the fan has stopped.
  if (rpm == Z){
    Serial.println("0");
  if (rpm <Z){
    Serial.println(rpm);
  }
}

En dit werkt prima, vereist alleen wel enige calibratie.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
ProAce schreef op zondag 18 mei 2014 @ 21:09:
Verder de code voor het uitlezen op de analoge pinnen:
code:
1
int pin = A0;

En dit werkt prima, vereist alleen wel enige calibratie.
Ok BTT. Het leuke aan een project-topic is dat er info wordt uitgewisseld waar je kan zien welke stappen een ieder neemt om tot een resultaat te komen. Zo ben jij bijvoorbeeld van Interrupts overgestapt naar Pulses en een manier gevonden om de DC-motor te calibreren. Hoe heb je dat gedaan ?
Ik heb pulseIn opgezocht, nog nooit gebruikt eigenlijk. Een mooi voorbeeld staat in het Cookbook
12.3. More Precisely Measuring the Duration of a Pulse
Een ideaal tach-signaal ziet er zo uit:
Afbeeldingslocatie: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTS7ZuacHg7VCjhpvmVgz1ojKnqn06KvzzqipT6fCf6OWbvB7rH
http://www.delta-fan.com/Support/ApplicationNotes.htm
Het idee om daarvan de pulsbreedte op te meten lijkt me goed gevonden. Meer info daarover is o.a. hier en hier te vinden, ook over een niet-ideaal signaal.
Wat betreft jouw sketch, variabelen dienen eerst "ge-initïalizeerd" te worden zoals je bij pin A0 hebt gedaan. X,Y L en Z compileren op deze manier niet. Deze error krijg ik :

sketch_may19a.ino: In function 'void loop()':
sketch_may19a:16: error: 'X' was not declared in this scope
sketch_may19a:16: error: expected `)' before 'L'
sketch_may19a:16: error: expected `)' before ';' token
sketch_may19a:18: error: 'Z' was not declared in this scope
sketch_may19a:23: error: expected `}' at end of input

En tussen X en L ontbreekt een * ?
Zo compileert het wel en ik vraag me af, hoe heeft het kunnen draaien of ben je stukje vergeten met kopieëren ?
C++:
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
int pin = A0;
unsigned long duration;
unsigned int rpm;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  int X=0;
  int Y=0;
  int L=0;
  int Z=0;
  //X is the max rpm of your fan (12V)
  //Y is the average outcome of duration at 12V (first two outcomes/2)
  rpm = (( X* L* Y )/duration);
  //Z is the printed duration as rpm when the fan has stopped.
  if (rpm == Z){
    Serial.println("0");
  if (rpm <Z){
    Serial.println(rpm);
  }
}
}

Dit is trouwens een willekeurige opstelling, ik zeg niet dat hiermee de code geschikt is voor jouw meting.
Het ging om het declareren.
Ps, een PulseIn hoeft niet persé via een A-pin, mag iedere pin zijn zover ik heb begrepen.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Zal het even uitleggen, was niet duidelijk idd.
Wat je als eerste doet is dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int pin = A0;
unsigned long duration;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  Serial.println(duration);
}

Dan krijg je in de serial monitor een hele waslijst aan getallen.
Dan even automatisch scrollen uitzetten en het gemiddelde nemen van de eerste paar getallen.

Vervolgens ga je de gemiddelde duration samen met je max rpm (alles gemeten op 12V) invullen.
X = max rpm
Y = gem duration
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int pin = A0;
unsigned long duration;
unsigned int rpm;

void setup()
{
  pinMode(pin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  duration = pulseIn(pin, HIGH);
  rpm = (( 2200L*6550 )/duration);
  Serial.println(rpm);
  }
}

De 'L' blijft staan omdat anders het cijfer niet goed wordt weergegeven.
Dan ga je kijken of de rpm keurig wordt weergegeven, zo ja dan stop je de fan met de hand en kijk je welk getal in de seriele monitor verschijnt. Dit is je 'Z'.

Zo nee dan heb je iets van de 'X' en de 'Y' niet goed ingevuld.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Ok, bedankt, dat is dus hoe je het gecalibreerd hebt. Kan van pas komen, ik heb gisteren deze besteld, 2x.
Afbeeldingslocatie: http://thumbs2.ebaystatic.com/d/l180/pict/310954890633_1.jpg
http://www.ebay.com/itm/3..._trksid=p3984.m1439.l2649
Is 4-draads maar zoals altijd kan wel even duren.

Acties:
  • 0 Henk 'm!

Anoniem: 187449

@ ProAce,

ziet er goed uit, je ben wel met veel dingen tegelijk bezig.
En dan ook nog in een paar weken de Arduino goed bestuderen en begrijpen (in tegenstelling tot mensen die het nooit zullen leren) .. lekker bezig.

Sorry dat ik je niet terug geDM heb vanmiddag mbt code flow.. kwam onverwachts bezoek.
Kom er morgen (wat zeg ik.. straks) even op terug 8)

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Dat is nog maar een klein deel waar ik tegelijk mee bezig ben :P
Ben ook nog bezig met het renoven van mijn kamer en het designen en maken van een eigen bureau, en een eigen 'bedrijfje' aan het opzetten. En natiurlijk nog school 8)

Maar dat even ter zijde.
Zal kijken of ik dan iig vandaag de fritzing tekening en de flowchart compleet kan maken.
Dan kunnen we weer verder :)

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Hier de eerste flowchart, deze post hou ik bij met de extra flowcharts.
Heb nu beetje weinig tijd vandaar :)

Afbeeldingslocatie: http://puu.sh/8WHq2.png
Dit is de hoofd flow, zoals je ziet moeten er nog 2 flows worden ingevuld, deze komen eraan :)

Verder is dit de fritzing zoals hij blijft (als het goed is):
Afbeeldingslocatie: http://puu.sh/8WIua.png


Verder de OP even bijgewerkt :)

[ Voor 21% gewijzigd door ProAce op 22-05-2014 21:04 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Knap gedaan.
Houd er echter rekening mee dat op deze manier in de praktijk o.a. het display geen voeding krijgt.
In het midden van het breadboard zijn de voedingslijnen meestal van elkaar gescheiden, ik heb zelfs BB's met drie scheidingen erop.
Op de nieuwe beta-versie van Fritz is er geen scheiding op het BB, maar op de oude versie nog wel. Je kunt het zien aan de groene stipjes.

Afbeeldingslocatie: http://i.imgur.com/StIAv1al.png

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Mijn breadboard en die van fritzing hebben dat niet

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Dat kan, hoewel ik nog geen breadboard tegen ben gekomen met een lengte van circa 65 contactpunten die dat niet heeft.
Ik had beter kunnen schrijven : "dat op deze manier misschien in de praktijk o.a. het display geen voeding krijgt".
Excuus als ik de indruk gaf van : "Zo gaat dat niet werken !"
Dat was geenszins de opzet, nogmaals, ik vind dat je het netjes hebt opgesteld.
En over die onderbreking, het lijkt triviaal of juist overduidelijk, maar gebeurt nog steeds dat dat addertje mij te grazen neemt. En dan komt het voor dat ik op heel andere plekken ga zoeken en mogelijke storingen ga verzinnen terwijl het simpel aan de voeding ligt. Bovenvoedingslijnen vergeten te verbinden met de onderste had ik vorige week nog. Een nieuw breadboard fluit ik altijd meteen door, was maar goed, want vorige keer had ik een breadboard, bleek geen strip onder te zitten onder een bepaalde strook. Met stift markeer ik de onderbrekingen.
Het eerste breadboard wat ik toepaste snapte ik niks van en heb toen de onderkant eruit gesloopt.
Het is niet deze maar zo ziet het er ongeveer uit; deze heeft drie onderbrekingen:
Afbeeldingslocatie: http://i.imgur.com/FGcnwQ1l.png

[ Voor 10% gewijzigd door kitao op 22-05-2014 23:22 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
En de volgende flowchart is af:

Afbeeldingslocatie: http://puu.sh/8XTl8.png

Laatste komt er aan :P

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Mijn bestelde 4-draads fans zijn er nog niet, dus ik dacht, ik pak de 2-draads die ik wel heb en zet er een lichtsluis voor zoals dit : http://www.pyroelectro.co...pm_arduino/schematic.html
Alles opgebouwd, zie breadboard links
Afbeeldingslocatie: http://s30.postimg.org/tnj6fh0st/FAN_IR_032.jpg
kijk ik beter naar het schema, blijkt dat ik helemaal geen fototransistor heb.
Ik heb een PNA4601M IR-receiver maar die werkt enkel op 38.5 kHz.
Geen probleem, net als op de basicstamp (groen,rechts) laat ik de arduino (midden) een 38.5kHz freq uitzenden.
*Kuch*, dat viel niet mee.
Deze gevonden: http://playground.arduino.cc/Main/PanasonicIrSensor
Werkt niet.
BasicStamp aangesloten op zelfde wijze en met dit programmaatje werkt perfect.
SQL:
1
2
3
4
5
6
7
8
9
' {$STAMP BS2}
' {$PBASIC 2.5}
irDetectLeft VAR Bit
DO
 FREQOUT 8, 1, 38500
 irDetectLeft = IN9
 DEBUG HOME, "irDetectLeft = ", BIN1 irDetectLeft
 PAUSE 100
LOOP


Dus al met al, dit was een grote fail om dat met deze componenten met een arduino voor elkaar te krijgen. Nog afgezien als dat arduino programma wel had gedraaid dan had ik die nog even moeten combineren met het interrupt programma van Pyroelectro ; wat mss/wrs niet gelukt zou zijn.
Inmiddels paar fototransistors besteld 940nm. Ik neem aan dat daar ook een 940nm IR-led bij hoort anders werkt het weer niet.

Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Heeft niks met dit project te maken, dus waarom niet in het arduino topic?
Hou het hier aub ontopic en als dat je niet lukt, reageer dan aub niet :)

Acties:
  • 0 Henk 'm!

Anoniem: 187449

ProAce schreef op dinsdag 27 mei 2014 @ 14:21:
Heeft niks met dit project te maken, dus waarom niet in het arduino topic?
Hou het hier aub ontopic en als dat je niet lukt, reageer dan aub niet :)
8)

[ Voor 35% gewijzigd door Anoniem: 187449 op 30-05-2014 16:32 ]


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
.

[ Voor 101% gewijzigd door kitao op 29-05-2014 14:02 ]


Acties:
  • 0 Henk 'm!

  • ProAce
  • Registratie: Januari 2014
  • Laatst online: 15:19
Beste allemaal,

Hierbij een voor dit project wat minder leuk bericht.

Hij gaat de ijskast in.

Waarom?
Nou omdat ik het op het moment een "beetje" druk heb...
Zit nu midden in een hele grondige verbouwing van mijn kamer, ben druk met school, mijn eigen website/bedrijfje aan het opbouwen (www.proace.org) en druk met mijn casemod en dit project.
Volgorde van belangrijkheid komende tijd:
- school
- kamer
- casemod
- site/bedrijfje
En dan pas dit project, jullie zullen wel begrijpen dat het even kan voordat ik hier weer mee bezig kan.

Tot dan!

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 16:02
Begrijpelijk en sterkte ermee, ik wens je veel succes en bedankt voor het doorgeven.
Mijn twee stuks bestelde 4-draads fans zitten nog in het plastic alhoewel ik die volgens de eerste opzet van dit topic allebei tegelijk met interrupts wilde gaan aansturen. Net als bij jou heb ik echter (tijdelijk?) mijn belangstelling verplaatst.
De onderdelen lopen niet weg natuurlijk, zal mettertijd hopelijk weer boven komen drijven :)

Acties:
  • 0 Henk 'm!

  • _ferry_
  • Registratie: Januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Waren jullie er al uit hoe je het zoemende geluid van de fans weg kon krijgen? Dat is namelijk makkelijk op te lossen door de PWM frequentie aan te passen. Gebruik ik zelf ook voor een arduino die een fan harder laat draaien naarmate de temperatuur hoger is. Gevolg is wel dat je delays ook in tijdsduur veranderen. Wellicht heb je er nog wat aan als het project nog weer verder gaat.
Pagina: 1 2 Laatste