Go Down

Topic: hulp gevraagd voor arduino regelunit voor distilleer apparaat (Read 47371 times) previous topic - next topic

homedistiller

Oke dan ga ik eerst met de rest veder.
Ik kan even niet vooruit omdat ik nog steeds op de 10 turns potmeter zit te wachten.
Ben nu bezig om een simple code te vinden om mijn stappen motor aan te sturen.

Mas je zei dat je ook zo'n stappen motor hebt liggen.
Toevallig al een code voor gebruikt die voor mij ook handig is?

Ik ben nu bezig met het reinigings programma.
En nu wil ik dat er iets gebeurd als de timer is afgelopen na een ingestelde tijd.
Ik gebruik hier de volgende oplossing voor

Code: [Select]
if((Rmin==00)&&(Sec==00))
    {
      digitalWrite (relay,LOW);
    }



Ik wil dus als de min 00 is en de sec 00 is
Dat er een relay aangaat.
alleen is het nu zo als hij bij 01:01 is  dan gaat hij naar 00:00 en dan pas naar 00:59
dus dan gaat het relay al aal een minuut te vroeg aan.
Is hier een simple oplossing voor?


MAS3

Vast wel.
Maar om je dat antwoord aan te reiken, heb ik wel je huidige code nodig.

Vermoedelijk doe je iets op een verkeerd moment.
Want het kan niet mogelijk zijn dat je op nul minuten en nul seconden terecht komt na 1 minuten en nul seconden.
Als dat wel gebeurt, dan moet je tijdens het tellen eerst de secondes tellen en daarna pas de minuten (ik weet dus niet of je dat nu al doet).
Je moet ook niet tussen het tellen van de secondes en de minuten door, iets anders doen.
Dus als je eerst de minuten op nul zet, dan gaat kijken of je het relais al moet schakelen, en dan de secondes op 59 zet, dan gaat het dus ook fout.
Als dat allemaal niet helpt, kun je ook nog het idee van de checksum doen.
Dan tel je de minuten en de secondes bij elkaar op.
Als het resultaat nul is, dan laat je je relais schakelen.
Je moet er dan alleen wel rekening mee houden dat je bij de laatste teller die ik heb gezien, de minuten onder nul uit kunnen komen, en de gevolgen die dat kan hebben.

Maar nogmaals, hang je code er weer aan dan kan ik kijken of ik zie wat er mis gaat.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Oke hier komt hij

Code: [Select]
int Rmin=15;                                                        // Hier word Rmin aangemaakt met waarde 15 voor reinigings programma
int Sec=59;





Code: [Select]
if (mm ==112)                                                       // Zitten we in menu mode 112 ?

{                                                                   // 26; We gaan het menu afbeelden
sensors.requestTemperatures();                                      // Zend een commando om de temperatuuren te krijgen
   
    Tin = sensors.getTempC(Probe01);
    Tkw = sensors.getTempC(Probe02);
   
   
    digitalWrite (ssr, HIGH);                                       // Zet de uitgang van ssr op hoog. (verwarmings element in boiler gaat aan.)

    lcd.clear();                                                    // Maak het scherm leeg.
    lcd.setCursor(0,0);                                             // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("  REINIGEN ACTIEF");                                 // Zet de tekst neer: "REINIGEN ACTIEF"
    lcd.setCursor(0,1);                                             // Zet de cursor op de eerste regel op de eerste positie
    lcd.print("TEMP. BOILER:  ");                                     // Zet de tekst neer: "TEMP. BOILER:"
    lcd.print(Tin);
    lcd.setCursor(0,2);                                             // Zet de cursor op de derde regel op de eerste positie.                                                                         
    lcd.print("TEMP. KOELING: ");                                    // Zet de tekst neer: "TEMP. KOELING:"   
    lcd.print(Tkw);                                                 // Zet de variable Tkw neer
    lcd.setCursor(0,3);                                             // Zet de cursor op de vierde regel op de eerste positie
    lcd.print("<Esc>");                                             // Zet de tekst neer: "<Esc>"
 
                                                                    // We hebben het scherm gewist en het menu word al weergegeven, nu kunnen we naar de volgende menu modus schakelen waar de keuzes worden afgehandeld
  }                                                                 // Einde 26; het scherm voor menu mode 112 is gemaakt, en we hebben al doorgeschakeld naar mode 113
if ((mm==112)&&(key ==Esc))                                        // Waneer toets 3 "Esc" gedetecteerd werd en menu is 113
    {                                                               // 27   
       KeyDet = 0;
       mm = 20;                                                     // ga naar menu modus 20
       lcd.clear();                                                 // maak het lcd scherm leeg oftewel wis het vorige menu
    }                                                               // Einde 27
   
   
   
    if (Tin >=25) {
    Sec = Sec-1;
    if((Sec)== 00) Rmin=Rmin-1;
    if((Sec)== -1) Sec=59;
    if (Rmin>9){                                                     // Dit is nieuw
     lcd.setCursor(15,3);
     lcd.print(Rmin);
     lcd.print(":");
     lcd.print(Sec);
    }
    if(Rmin<10) {
     lcd.setCursor(15,3);
     lcd.print(0);
     lcd.setCursor(16,3);
     lcd.print(Rmin);
     lcd.print(":");
     lcd.print(Sec);
    }
    if(Sec<10) {
     lcd.setCursor(18,3);
     lcd.print(0);
     lcd.setCursor(19,3);
     lcd.print(Sec);
    }
    if((Rmin==00)&&(Sec==00))
    {
      digitalWrite (relay,LOW);
    }
     }                                                                 


Voor Rmin heb ik 15 minuten gekozen
sec staat op 59 ingesteld
ook de laatste code bijgevoegd

MAS3

Okee, dat maakt het inderdaad duidelijk, je telt verkeerd.
Laat die klok maar eens lopen, dan zie je dat je elke minuut een fout maakt.
Dit is het stukje met de fout:
Code: [Select]
   Sec = Sec-1;
   if((Sec)== 00) Rmin=Rmin-1;
   if((Sec)== -1) Sec=59;

Je telt hier dus af.
Als je op nul seconden bent, dan zet je op dat moment de minuut eentje lager.
Dan tel je dus in deze volgorde:
Quote from: ff telle
02:02
02:01
01:00
01:59
01:58
..
..
..
01:01
00:00
00:59

De secondes doe je dan weer wel goed.
Wat je eigenlijk wil doen, is dat wanneer je onder nul komt, de minuut verlagen.
Dus dit:
Code: [Select]
   Sec = Sec-1;
   if((Sec)== -1) {
   Sec=59;
   Rmin=Rmin-1;
   }

Dit is dus maar een kleine verandering, het antwoord zat eigenlijk al een beetje verstopt in de code die je al had.
Lijkt me inderdaad best een simpele oplossing, maar soms kijk je over dit soort dingen heen en heb je iemand anders' ogen nodig om dat te zien.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Daar heb je het weer.
Dat is precies wat ik nodig had.
Zie nu ook dat ik dit de vorige keer ook met de seconden had en zo had opgelost.
Maar dat komt ook dat je het bij de seconden veel vaker ziet gebeuren.
Dan bij de minuten.
Ik zag het ook echt niet meer.
Maar ben beginner en ben met heel veel dingen nu bezig.
Denk dat ik het daarom gemist had.

ben nu veel aan het lezen over stepper control.
En dat is ook weer erg veel nieuwe informatie.
Ondanks dat ik maar weinig hoef aan te sturen.

misschien de moeite waard om dat vast te delen wat ik daarmee wil:
opstarten van het programma naaldkraan eerst naar helemaal dicht.
Hier heb ik dus ook de feedback voor nodig.
Dan wil ik het totale bereik van de naaldkraan.
dus 3 en een halve slag verdelen in 30 stappen.
0 word dan naaldkraan dicht
15 word dan half open 1.75 slag,
en 30 word naaldkraan compleet open.
Hierbij komen dan de waardes van de potmeter dadelijk bij voor de controle.
het programma hoeft  dan alleen  dadelijk naar de voor ingestelde stappen te gaan.
Dit wil ik dan ook weer zo eenvoudig mogelijk doen.

morgen komt de 10 turns potmeter binnen en kan ik daar eerst mee stoeien om die
op de beste manier te koppelen aan de stappenmotor.

Weer bedankt en een fijne avond

homedistiller

Zo vandaag de potmeter binnen gekregen .
Gelijk maar een beugel gemaakt van rvs.
Morgen de print er nog netjes opmaken (driver)
En dan kan ik hiermee aan het stoeien met de arduino!!




MAS3

Quote from: homedistiller

opstarten van het programma naaldkraan eerst naar helemaal dicht.
Hier heb ik dus ook de feedback voor nodig.
Dan wil ik het totale bereik van de naaldkraan.
dus 3 en een halve slag verdelen in 30 stappen.
0 word dan naaldkraan dicht
15 word dan half open 1.75 slag,
en 30 word naaldkraan compleet open.
Hierbij komen dan de waardes van de potmeter dadelijk bij voor de controle.
het programma hoeft  dan alleen  dadelijk naar de voor ingestelde stappen te gaan.
Dit wil ik dan ook weer zo eenvoudig mogelijk doen.


Pas wel op met de termen die je gebruikt.
Je hebt het over 30 stappen, en je gaat een stappenmotor gebruiken.
Dat kan je in verwarring brengen op termijn, en daarom raad ik je aan om die 30 stappen anders te noemen.
Zoals 30 blokken ofzo.

Je stappenmotor zet dus per keer dat je 'm aanstuurt 1 enkel stapje.
In die motor zit een dikke vertraging, waardoor dat stapje maar een heel kleine verdraaiing zal opleveren.
Als je hier een aantal Engelstalige threads hebt gevonden, kun je daar uit opmaken dat het aantal stapper per omwenteling net geen 4096 stappen zijn.
Dan heb jij nog de overbrenging aan de motor, een extra vertraging dus omdat de motor meer omwentelingen zal moeten maken om de kraan te laten bewegen.
Ik hoop dat je de verhouding tussen de twee poelies weet.
In dat geval kun je namelijk precies uitrekenen hoe groot elk blok (noem ik m nu dus maar even) moet zijn, uit hoeveel stappen van de motor die zal moeten bestaan.
Het zijn er best wel veel in ieder geval, ik gok dat 1 blok ergens in de buurt van 1500 stappen zal uitkomen (poelies ongeveer 1:3).
Als je de verhouding niet precies weet, kun je dankzij de potmeter in ieder geval meten hoe ver je de kraan gedraaid hebt als je in de buurt van die 4096 stappen bent (het is overigens niet toevallig dat dat een getal is dat door 8 (en 16) deelbaar is, maar dat terzijde).

Mijn stappenmotortje heb ik alleen een paar weken geleden even getest.
Omdat ie wel wat stroom gebruikt en de voeding die ik had het daardoor merkbaar benauwd kreeg ben ik er niet verder mee gegaan.
Daarvoor heb ik een testsketch gebruikt die ik hier van het forum heb geplukt.
Die komt vermoedelijk uit deze thread, maar ik weet niet meer van welke pagina.
Deze stappenmotoren (er schijnen 12 en 5 volt motoren te zijn) worden veel verkocht, en er word ook redelijk veel over gediscussieerd hier op het forum.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

#187
May 15, 2014, 10:20 pm Last Edit: May 15, 2014, 10:49 pm by homedistiller Reason: 1
Ik ben bezig geweest met een simpele code te zoeken.
Deze heb ik iets aangepast was voorheen bedoeld om twee stappenmotors aan te sturen.

Code: [Select]
// Simple code voor de 28BYJ48

#include <AccelStepper.h>

#define FULLSTEP 4
#define HALFSTEP 8

//declare variables for the motor pins
int motorPin1 = 8; // Blauw   - 28BYJ48 pin 1
int motorPin2 = 9; // Roze    - 28BYJ48 pin 2
int motorPin3 = 10; // Geel    - 28BYJ48 pin 3
int motorPin4 = 11; // Oranje  - 28BYJ48 pin 4
                       // Rood    - 28BYJ48 pin 5 (VCC)
                       
// The sequence 1-3-2-4 required for proper sequencing of 28BYJ48

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
 //stepper1.setMaxSpeed(1000.0);
 stepper1.setAcceleration(600.0);
 stepper1.setSpeed(600);
 //stepper1.moveTo(-2048);  
}
void loop()
{
   //Change direction -
 stepper1.moveTo(-4096);
   // stepper1.moveTo(-4096);
 stepper1.run();
}


Als ik hem nu upload dan gaat hij linksom.
Een volledige ronde.
Haal ik de min weg voor:

Code: [Select]
stepper1.moveTo(-4096);

Dan gaat hij rechts om.

Nu nog kijken hoe ik de potmeter ga toevoegen.
Eerst maar eens opzoeken hoe ik deze moet aansluiten.

aansluiting 1 en 3 zit spoeltje tussen getekend en aansluiting 3 staat CW bij
het is 1k potmeter 10 turns
Zal eens kijken hoe ik hem op de analoge ingang moet aansluiten.
Zonder dat hij gaat roken haha.

Nog even terug te komen op je vorige reactie mas.
De verhouding is ongeveer 1 op 4
Maar de kleine poelie word aangedreven.
Dus hij moet 4x meer rond draaien om de naaldkraan 1 slag te laten maken.

Nu zit ik te denken hoe ik straks het makkelijks  kan gaan aansturen.

ow ow worden weer veel lange avonden.

Dat was niet zo heel ingewikkeld.

Code: [Select]
// Simple code voor de 28BYJ48
// Met uitlezing van 1K potmeter op ingang A1
// Kraan voledig dicht is 300
// Kraan voledig open is 660

#include <AccelStepper.h>

#define FULLSTEP 4
#define HALFSTEP 8

//declare variables for the motor pins
int motorPin1 = 8; // Blauw   - 28BYJ48 pin 1
int motorPin2 = 9; // Roze    - 28BYJ48 pin 2
int motorPin3 = 10; // Geel    - 28BYJ48 pin 3
int motorPin4 = 11; // Oranje  - 28BYJ48 pin 4
                        // Rood    - 28BYJ48 pin 5 (VCC)
                       
// The sequence 1-3-2-4 required for proper sequencing of 28BYJ48

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
 
  Serial.begin(9600);  // initialize serial communication at 9600 bits per second:
  stepper1.setMaxSpeed(1000.0);
  stepper1.setAcceleration(200.0);
  stepper1.setSpeed(500);
  //stepper1.moveTo(-2048);   
}
void loop()
{
  int sensorValue = analogRead(A1);
   // print out the value you read:
   Serial.println(sensorValue);
    //Change direction -
  stepper1.moveTo(-40960);
    // stepper1.moveTo(4096);
  stepper1.run();
}


homedistiller

Nou zit ik het volgende te denken.
Is het niet mogelijk om de stappenmotor naar de analoge waarde te sturen.
bv

Analoge ingang is normaal van 0 volt naar 5 volt
Dat gaat in stappen van 0 tot 1023
Stel dat ik deze omzet in een ander schaal bv 0 tot 30

Code: [Select]
val = analogRead(potpin);            // Leest dan de waarde van de potmeter tussen  0 en 1023)
val = map(val, 0, 1023, 0, 30);     // schaal de waarde naar 0 en 30 


Is het dan niet mogelijk om de stappen motor naar bv

Code: [Select]
stepper1.moveTo(Val=30);

te sturen
wat ik dus bedoel om niet naar de "stappen "te kijken.
Maar de stappen motor naar een bepaalde ingangswaarde te sturen van de potmeter?

MAS3

Okee, dus een verhouding van 4 op 1.
Wat je nog wel kunt doen om het heel goed te doen, is de test of je inderdaad 4096 stappen per omwenteling hebt, of eerder 4076 (of waar je dan ook op uit zal komen).
Je kunt dat vaststellen door tijdelijk een groter wiel (moet je wel hebben natuurlijk) op je motor te monteren, en die dan 1 rondje te laten draaien.
Op de wiel zet je dan een dun streepje dat je bij de start tegenover een andere vaste markering houd.
Als je na 4096 stappen een heel rondje hebt gedraaid, dan moeten de streepjes dus weer recht tegenover elkaar staan.
Je kunt dan kijken of je meer of minder stapjes moet zetten om wel goed uit te komen, en door te proberen kun je ook te weten komen hoeveel dan.
Wanneer je hier niet precies uitkomt, kun je ook 10 of meer rondjes laten draaien, je ziet dan duidelijker hoe groot de afwijking is (als die er echt is), want die is dan dus 10 of meer keer zo groot.

Om je naaldkraan te bewegen en wanneer je inderdaad 4096 stappen per omwenteling hebt, moet je dus 16384 stappen zetten.
Dat zijn er veel.
Zo veel dat je met je 10 slagen potmeter van 1K (ik zou en hogere waarde, zoals 10K  gekozen hebben), die je dus maar 3.5 slagen zal laten maken, niet erg nauwkeurig zal kunnen meten wat de verdraaiing is.
Daarmee kun je natuurlijk wel nog steeds zien dat waar je naaldkraan ergens staat, maar de stappen die je zet staan dus in geen werkbare verhouding tot wat je kunt meten met je potmeter.

Even proberen uit te rekenen wat je met de potmeter kunt meten.
De potmeter geeft een signaal af dat moet verlopen tussen 0 en 5 volt, en die 5 volt is verdeeld is 1024 stappen (van 0 tot en met 1023).
Maar je gaat geen 10 slagen maken, maar 3,5.
Dat betekent dat je 6,5 weggooit.
Dus van de 1024 stappen, gooi je er 666 (dat is afgerond naar boven) weg, en houd je er 358 over.
Als je dat dan weer deelt doof je 30 blokken, dan krijg je ongeveer 12 stappen per blok.
Dat is op zich dus prima meetbaar, maar dan moet je wel zorgen dat er geen al te grote afwijkingen in de 5 volt voorkomen.
Want daar hangt je meetwaarde ook van af.

Dat is een stukje theorie, want ik ben bang dat dit helaas niet zal lukken.
En dat komt omdat de 1 K wel wat weinig is.
Door die lage waarde, zou de weerstand wel eens warm kunnen worden (dus toch roken....), en er te veel stroom door de schakeling kunnen worden opgenomen.
Want de weerstand zet je namelijk tussen 5 volt en GND, en dan laat je de loper daarlangs bewegen.
Het dingetje wat je als spoel herkent, is de Amerikaanse tekenwijze van een weerstand dat er ongeveer zo uitziet:


Na het typen, zie ik dat je een nieuw bericht hebt getypt, waarin je niet het aantal stappen wil bijhouden, maar de warde van je potmeter.
Hierboven staat uitgelegd waarom dat niet zo zal werken als je in gedachten had, en ook hoe dan wel.
De map functie kun je niet gebruiken over de totale slag van de potmeter, want je maakt geen totale slag, maar slechts ongeveer een derde daarvan.
Dus op de wijze die je nu hebt voorgesteld lukt dat niet.
stepper1.moveTo kun je ook zo niet gebruiken want die functie stelt nog steeds het aantal stappen in.
Je kunt dat wel gebruiken maar niet door de gewenste potmeter waarde op te geven aan je stepper library.

Wat je kunt doen is een aantal stappen bedenken die je minimaal wil maken.
Dan controleer je of de potmeter op de juiste waarde staat.
Staat ie te hoog dan laat je de motor dat aantal stappen naar beneden zetten, te laag dan dat aantal stappen omhoog.
Daarna ga je weer controleren of je bent aangekomen waar je wilde zijn met de potmeter.
Deze aanpak zal alleen niet heel goed werken als je exacte waardes gaat gebruiken.
Want als je met het door jou gekozen aantal stappen niet precies uitkomt op de door jou gekozen waarde, dan zal je motor net zo lang heen en weer proberen te draaien tot die gewenste waarde wel behaald word (en dat is dan nooit...).
Daarom moet je dan controleren of je potmeter tussen twee gewenste waardes is uitgekomen.
Als het je nu ineens begint te duizelen, moet je dit laatste stukje even een paar keer lezen, misschien dat het dan duidelijker word.
Zo niet dan nog maar eens vragen.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Hoi mas

Ik snap wat je bedoeld met de waarde van de potmeter en dat hij dan gaat zoeken.
Vooral met zulke kleine waarde verschillen.
Het eerste wat ik eindelijk wil proberen is om de stappenmotor bij het opstarten van het programma.
Naar de begin positie laten gaan.
Dus kraan dicht.
De rest is niet zo belangrijk.
Omdat waneer de stroom is uitgevallen of door welke reden dan ook.
Moet je toch opnieuw beginnen met het programma
Als hij dan maar weer naar de begin positie gaat.
Daarna is het aansturen in aantal stappen eindelijk genoeg zonder feetback.
Heb je een klein idee of voorzetje hoe ik dit het best kan doen tips of linkje waar ik veder mee kan komen?
Heb al een paar avonden op internet gekeken
Alleen is er maar weinig te vinden over feetback met een potmeter.

gr Rolf

MAS3

Wat ik zou doen, is de kraan met de hand bedienen terwijl de potmeter er aan zit, maar de motor niet (borgboutjes losdraaien).
Dit terwijl je een sketch hebt geladen die je de gemeten waarde op het display laat zien.
Gewoon de kraan helemaal dicht.
Dan de kraan halverwege en dan helemaal open.
Telkens de waardes die je op je scherm ziet noteren.
Die waardes zijn dus wat je krijgt als je twee keer achter elkaar de analoge poort uitleest waarop je de potmeter hebt aangesloten.
Dat uitlezen doe je gewoon met
Code: [Select]
kraanStand=analogRead(A0);, als je de potmeter aan A0 hebt aangesloten.
Je doet dus een lcd.print van kraanStand zodat je kunt zien wat hoe ie er voor staat tijdens dat draaien.
Twee keer lezen, en alleen de tweede keer verwerken.
Dat is omdat er wat verhalen zijn dat een enkele keer lezen van een analoog signaal een niet helemaal correcte waarde kan worden behaald door restanten van de vorige keer toen er een analoog signaal werd binnen gehaald.
Een nog betere manier om dat er uit te krijgen is als je een analoge pin over hebt.
Die kun je dan aan GND knopen en eerst uitlezen.
Daardoor zorg je er voor dat de condensator die in de processor zit (die word voor alle analoge pins gebruikt) leeg gemaakt word voordat je een nieuwe waarde binnen haalt.
Verder kun je het best de waardes een aantal malen testen, onder verschillende omstandigheden.
Het kan namelijk zijn dat de omgevingstemperatuur van invloed is op de waarde die je registreert.

Als je eenmaal weet welke waarde de laagste is, dan controleer je in je hoofdprogramma of de waarde kleiner word dan die waarde plus 1.
Want dan staat de kraan dus dicht.

Overigens zou ik die kraan al voor loop() dichtzetten.
Je kunt dat doen tijdens setup().
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

#192
May 19, 2014, 03:08 pm Last Edit: May 19, 2014, 03:48 pm by homedistiller Reason: 1
Duidelijk het eerste gedeelte van je antwoord.
Ik heb hiervoor even een sketch gemaakt.
Wat ik nu het mooiste vind hieraan.
Is dat ik nu dus in staat ben door jou en het forum hier.
Om zo'n sketch binnen 5 min te maken en te kunnen gebruiken.
Dit had ik voor een jaar geleden dus niet gekund !!
Er kunnen altijd nog wel fouten in staat.
Maar door op die fouten gewezen te worden.
Daar leer je dan het meest door.
Hier de sketch voor de anderen die dit draadje ook volgen.

Code: [Select]
/*
Deze sketch kun je gebruiken om een potentiometer
uit te lezen.
Deze moet dan worden aangesloten op analoge ingang A1
De uitgangswaarde zet hij dan op het lcd scherm neer.
Rolf 19 mei 2014
*/

#include <LiquidCrystal.h>                                    

LiquidCrystal lcd(12, 11, 8, 5, 4, 3, 2);
int kraanStand;
void setup()
{                                                      

Serial.begin(9600);
 lcd.begin(20, 4);                                              
 lcd.clear();
}  

void loop() {
 kraanStand=analogRead(A1);  
 lcd.setCursor(0,0);    
 lcd.print("kraanStand: ");
 lcd.print(kraanStand);                                  
delay (100);                          

}      


Ik heb dit nu meerdere keren uitgelezen.
Ik kom dan op het volgende uit elke keer:
De waarde gaan hieronder dus iets afwijken ongeveer 3 stapjes met de potmeter verwarmd met een fohn
Zie de waarden hieronder met fohn en zonder

Kraan dicht is tussen 298 en 301

kraan halfdicht is tussen 476 en 478

Kraan helemaal open tussen 661 en 664




Je hebt het ook over dat de potmeter warm word op een gegeven moment.
Omdat ik voor een potmeter van 1K heb gekozen.
Kan ik dan niet beter een weerstand in serie tussen de twee poten van de potmeter zetten.
Niet de poot van de loper?

Ik krijg dan natuurlijk wel een andere waarde met uitlezen.

Kun je me uitleggen hoe ik de stappenmotor nu vertel dat hij eerst naar de nul positie gaat?
Dit wil ik inderdaad doen in de setup.
Dan staat de stappenmotor altijd netjes in de nulstand.
En kan het programma daarna werken met alleen de stappenmotor




MAS3

Nou, als je een weerstand tussen de twee andere poten zet, dan zet je die dus parallel aan de potmeter.
Daarmee word de weerstand over de potmeter (en die weerstand) dus veel kleiner.
Daarmee gooi je dan vermoedelijk de 5 volt overhoop, dus dat zeker niet doen.
Wat je kunt doen, is een weerstand voor en/of achter de potmeter zetten.
Dus tussen potmeter en GND of tussen potmeter en 5 volt.
Maar als je dat doet, worden de verschillen die je meet weer kleiner.

Overigens zei ik niet dat die weerstand zou opwarmen, maar dat dat kan gebeuren.
De stroom door de potmeter zal zo'n 5 m Ampère, en het vermogen zo'n 25 milliwatt zijn.
Das niet heel veel, maar kan wel wat machtig zijn voor de potmeter.

Je moet nu gaan bepalen hoe je moet sturen om de kraan dicht te draaien.
Aangezien je in Setup() op een gegeven moment alleen maar bezig bent met die kraan dichtdraaien, kun je daar while() gebruiken.
Dus dan zoiets als:
Code: [Select]

while(analogRead(A0)>301){
laat de stappenmotor alle fases om de kraan dicht te draaien éénmaal doorlopen
}

Hiervoor moet je dus de stappen motor hebben klaarstaan en moet je weten hoe je 'm aanstuurt.
Als je driver boardje goed is ingesteld, gaat je motor niet kapot als je 'm aanstuurt terwijl ie niet meer verder kan draaien.
Maar dat moet je natuurlijk niet al te lang doen, zowel voor de motor als de driver.
Omdat je dus maar 4 of 8 stappen zet, totdat je de gewenste waarde meet, is het ook onwaarschijnlijk dat dit te lang duurt.
De kraan is dan dus datgene dat het draaien stopt, niet de potmeter.
Hierdoor is de kans dat het een kapotmeter word vrijwel uitgesloten.

De kraan word net zolang dichtgedraaid als de potmeter waarde boven 301 is, is ie 301 of lager dan word er niet meer gedraaid.
Daarmee is het dan dus de vraag hoe dicht de kraan staat als ie op 301 staat, terwijl ie dicht is als ie op 298 zou staan.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

homedistiller

Hoi mas bedankt voor je reactie.
Zag hem helaas nu pas.
Ik ben op het moment op vakantie en ben zaterdag weer thuis.
Ik ga er dan gelijk mee veder.
Nu kan ik wel alvast gaan bekijken wat while doet en hier het een en ander
Over uitzoeken.
Je bedoelt met 8 stappen dus eindelijk.
Kijken of waarde op analoge ingang groter is dan 301.
Is dit zo dan 8 stappen kraan dicht draaien.
Weer controleren zo niet onder 301 dit herhalen tot hij controleerd en dat waarde onder 301 zit.
Ik weet wel dat de stappenmotor tegen doordraaien kan als hij blokeerd.
Hiervoor is een slipkoppeling ingebouwd.
Ook zal hij niet heet worden met die 8 stappen.
Nog even over de naaldkraan als hij het laatste stukje net niet dicht gedraaid zit.
Is hij toch dicht.
Dit komt ook doordat er geen druk opstaat.
De vloeistof die hij tegen houd zit in een poeltje van 1 cm hoog.

Ook moet ik even gaan bekijken hoe ik het een en ander ga aansluiten.
Met voedingen van de verschilende komponenten.
Bv:
Voeding lcd.
Voeding arduino.
Voeding stappenmotor.
Voeding relay bord.
Voeding ds18b20 sensoren

Dit gaat natuurlijk niet allemaal meer op de uitgang van de uno.

Zal hier eens een schematje voor tekenen.

Gr Rolf

Go Up