Forum
    • Categorieën
    • Recent
    • Populair
    • Gebruikers
    • Groepen
    • Zoeken
    • Registeren
    • Login

    Profielwerkstuk Hyperloop

    Magnetisme & supergeleiding
    hyperloop arduino frequentie programmeren vacuüm
    3
    9
    7129
    Meer berichten laden...
    • Oudste berichten bovenaan
    • Meest recente berichten bovenaan
    • Meeste stemmen
    Reageren
    • Reageren als onderwerp
    Aanmelden om te reageren
    Dit onderwerp is verwijderd. Alleen gebruikers met beheerrechten op onderwerpniveau kunnen dit inzien.
    • F
      Folkert
      voor het laatst aangepast door

      Wij hebben twee vragen. De eerste vraag is of het mogelijk is om met een baan met een diameter van 1 meter in een half vacuüm ruimte op de TU Delft te testen. Onze tweede vraag is of een van jullie misschien kan helpen met programmeren van een arduino. Wij willen namelijk de richting van de stroom door de elektromagneten veranderen en dat dus steeds sneller. Wij hebben deze link gevonden https://www.arduino.cc/en/Tutorial/DueSimpleWaveformGenerator maar hier laten ze alleen weten hoe je de golven kan maken maar niet hoe je ze sneller kan laten wisselen.( met een hogere frequentie) Graag horen wij van jullie.

      Met vriendelijke groet, Folkert

      1 Antwoord Laatste antwoord Reageren Citeren 0
      • ThomT
        Thom
        voor het laatst aangepast door

        Beste @Folkert,

        Ik denk dat het voor scholieren niet mogelijk is om met een dergelijke opstelling te kunnen werken. Ikzelf heb geen ervaring met arduino's, maar mijn collega Jip Rietveld die heeft hier wel wat ervaring mee. Ik denk dat hij je zeker daarmee zou kunnen helpen!

        Groetjes,

        Thom

        Moderator
        Student Technische Natuurkunde

        1 Antwoord Laatste antwoord Reageren Citeren 0
        • jip_rietveldJ
          jip_rietveld PWS TU Delft admin
          voor het laatst aangepast door

          Hey @Folkert

          Ik geloof dat een hogere frequentie wel staat beschreven op de website die jullie hebben gestuurd. Bij het begin van de functie loop() zie ik dat de sample variabele wordt aangewezen. Deze heeft invloed op de frequentie geloof ik.

          Als je die zelf ergens op vast wel zetten om concreet te kijken naar de verschillende frequenties kan dat natuurlijk. Dan zet je sample = <een getal>; in plaats van: sample = map(analogRead(A0), 0, 4095, 0, oneHzSample); en
          sample = constrain(t_sample, 0, oneHzSample); Maar ik geloof dat die website wel degelijk slim heeft nagedacht over wat daar nu staat. Let wel op, sample beschrijft de delay in microsecondes. Dus denk daar over na voordat je 100hz invult bij <een getal> omdat het niet perse zo werkt.

          Ik hoop dat ik je zo verder heb kunnen helpen.

          Groetjes,
          Jip

          Administrator
          Student Technische Informatica

          1 Antwoord Laatste antwoord Reageren Citeren 0
          • F
            Folkert
            voor het laatst aangepast door

            Hoi Jip, hartelijk dank voor je antwoord op ons arduino frequentie probleem. Wij hebben nog een vraag en dat is of het ook mogelijk is ok de frequentie telkens hoger te maken zodat de Polen op de elektromagneten steeds sneller wisselen. Moeten trouwens beide sample vervangen worden door sample: een getal. Dus wat komt er uiteindelijk te staan? Sample: een getal of sample: een getal en sample = constrain(t_sample, 0, oneHzSample);
            Graag horen wij van je hoe wij de frequentie steeds hoger kunnen laten komen.

            1 Antwoord Laatste antwoord Reageren Citeren 0
            • jip_rietveldJ
              jip_rietveld PWS TU Delft admin
              voor het laatst aangepast door

              Hey @Folkert

              Code kan je handig typen door "```" ervoor en erna te zetten. ;) Tip voor de leesbaarheid.

              Je hoeft in principe maar een van de twee samples te vervangen. Dus sample = map(analogRead(A0), 0, 4095, 0, oneHzSample); en sample = constrain(t_sample, 0, oneHzSample); worden samen sample = <een getal>.

              Dat getal wordt vervolgens hier delayMicroseconds(sample); gebruikt. Dus denk na over hoeveel microsecondes je wilt voordat het opnieuw de loop() wordt doorlopen.

              Als je continu wil dat de sample omhoog gaat. Dan moet je sample buiten de loop() als een varaibele defineren en dan in de loop incrementen. Dat doe je dan met sample++;. Maar omdat we de frequentie omhoog willen hebben moet eigenlijk de delay dan kleiner worden, dus dan heb je denk ik sample-- nodig.

              Is dat te volgen?
              Hopelijk wel,
              Jip

              Administrator
              Student Technische Informatica

              1 Antwoord Laatste antwoord Reageren Citeren 0
              • F
                Folkert
                voor het laatst aangepast door

                Hoi Jip bedankt voor je reactie maar ik snap het volgens mij nog steeds niet. Ik heb de code hieronder gezet maar klopt dit of gaat dit niet werken? Graag hoor ik van je.

                Groeten Folkert

                #include "Waveforms.h"

                #define oneHzSample 1000000/maxSamplesNum

                const int button0 = 2, button1 = 3;
                volatile int wave0 = 0, wave1 = 0;

                int i = 0;
                int sample;

                void setup() {
                analogWriteResolution(12);
                analogReadResolution(12);

                attachInterrupt(button0, wave0Select, RISING);
                attachInterrupt(button1, wave1Select, RISING);
                }

                sample--

                void loop() {

                sample = <1000000>

                analogWrite( 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, waveformsTable[wave0][i]);
                analogWrite(DAC1, waveformsTable[wave1][i]);

                i++;
                if(i == maxSamplesNum)
                i = 0;

                delayMicroseconds(sample);
                }

                void wave0Select() {
                wave0++;
                if(wave0 == 4)
                wave0 = 0;
                }

                void wave1Select() {
                wave1++;
                if(wave1 == 4)
                wave1 = 0;
                }

                #ifndef Waveforms_h
                #define Waveforms_h

                #define maxWaveform 4
                #define maxSamplesNum 120

                static int waveformsTable[maxWaveform][maxSamplesNum] = {

                {
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
                0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
                }

                };

                1 Antwoord Laatste antwoord Reageren Citeren 0
                • jip_rietveldJ
                  jip_rietveld PWS TU Delft admin
                  voor het laatst aangepast door

                  Hoi hoi,

                  Ik zie wat problemen ermee die ik hieronder noem.

                  Je defineert sample (int sample) maar vervolgens is het eerstvolgende wat je ermee doet sample--; (waar een punt comma sws achter moet) dat zal de computer niet leuk vinden, wat doet die min 1? Er staat nog niks als waarde voor sample.

                  sample = <1000000> moet worden sample = 1000000

                  En ik gok dat de sample--; in de loop methode moet komen. Anders wordt dat maar een enkele keer gedaan.

                  Als je de arduino IDE download en daar je code in zet kun je daar linksboven op verifieer drukken. Die zal dan ook dit soort foutjes eruit halen.

                  Groetjes,
                  Jip

                  Administrator
                  Student Technische Informatica

                  1 Antwoord Laatste antwoord Reageren Citeren 0
                  • F
                    Folkert
                    voor het laatst aangepast door

                    Beste Jip, dit klinkt heel erg stom en dat is het ook maar ik kom er net achter dat wij een arduino UNO hebben en niet een DUE. Dus deze code werkt niet voor de UNO en wij hebben er echt nul verstand van dus zou je misschien ons nog meer tips kunnen geven? Want wij hebben hier echt geen verstand van en het gaat anders niet lukken. Graag horen wij van je.

                    Groeten Folkert

                    1 Antwoord Laatste antwoord Reageren Citeren 0
                    • jip_rietveldJ
                      jip_rietveld PWS TU Delft admin
                      voor het laatst aangepast door

                      Hey @Folkert

                      Geen zorgen! Het komt wel goed. Blijf lekker googlen. Zoals bij de DUE zullen er echt wel mensen op het internet zijn die een soortgelijk project zijn gestart met een arduino UNO. Daarnaast zal de code tussen de verschillende Arduinos niet heel veel verschillen. Ik weet niet wat voor foutmeldingen jullie eventueel kregen maar probeer die vooral ook te googlen. Internet is je vriend op het moment dat je gaat programmeren.

                      Ik ga niet alles voor jullie uitzoeken maar als jullie technische vragen terecht komen kun je zeker weer bij mij terecht.

                      Groetjes,
                      Jip

                      Administrator
                      Student Technische Informatica

                      1 Antwoord Laatste antwoord Reageren Citeren 0
                      • First post
                        Last post
                      Copyright © 2016 NodeBB Forums | Contributors