Profielwerkstuk Hyperloop
-
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
-
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
-
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 desample
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 -
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. -
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);
ensample = constrain(t_sample, 0, oneHzSample);
worden samensample = <een getal>
.Dat getal wordt vervolgens hier
delayMicroseconds(sample);
gebruikt. Dus denk na over hoeveel microsecondes je wilt voordat het opnieuw deloop()
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 metsample++;
. Maar omdat we de frequentie omhoog willen hebben moet eigenlijk de delay dan kleiner worden, dus dan heb je denk iksample--
nodig.Is dat te volgen?
Hopelijk wel,
Jip -
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 120static 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
}};
-
Hoi hoi,
Ik zie wat problemen ermee die ik hieronder noem.
Je defineert sample (
int sample
) maar vervolgens is het eerstvolgende wat je ermee doetsample--;
(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 wordensample = 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 -
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
-
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