Go Down

Topic: circuit accelerometer - vibratie (Read 5206 times) previous topic - next topic

castel

#15
Apr 30, 2015, 12:54 pm Last Edit: Apr 30, 2015, 01:04 pm by castel
Voor de geinteresseerden: ik heb een accelerometer gevonden waarbij de pinnen reeds gesoldeerd zijn:

http://www.bitsandparts.eu/Sensor_-_Accelerometer-versnellingsmeter_3-voudig_analoog_-_MMA7361_(Sensors)-p100191.html

Met een spanningsregelaar zodat deze automatisch op de 5V kan worden aangesloten.
Ik merk wel op dat dit een analoge input heeft. Dan zou ik nog formules moeten gebruiken om de waarden om te zetten in hoekuitwijkingen?

castel

Beste Arduinoleden.
Weer een beetje verder gevorderd in de wereld van Arduino en tijd om deze topic nog eens van onder het stof te halen.
Ik vraag mij af wat jullie van volgend circuit denken:
De accelerometer met 2 vibratiemotortjes aangesloten op verschillende pins.

Alvast dank om dit eventjes te bekijken.
(afbeelding in bijlage)

Mvg,
Castel

Jantje

het lijkt me dat dta niet gaat werken want rood een zwart is verbonden met elkaar op de breadboard (helemaal links)
Hoeveel verbruiken je motoren?
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

castel

het lijkt me dat dta niet gaat werken want rood een zwart is verbonden met elkaar op de breadboard (helemaal links)
Hoeveel verbruiken je motoren?
Jantje
Die zware moet inderdaad ook gewoon naar de GND. Qua vebruik weet ik eigenlijk niet. 3.4-5V is de enige specificatie die ik weet. Ik verwacht nu wel niet dat ze enorm veel Ampere trekken.

Jantje

Ben je zeker dat je zo de x y z waarden kan uitlezen?
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

MAS3

Het is heel belangrijk dat je alles heel secuur doet.
Dus als je een tekening maakt, dan dubbel controleren.
Dan even laten liggen (er een nachtje over slapen) en dan nog eens controleren.
Of je vraagt iemand om even te kijken, wat je dus in feite nu gedaan hebt.

Het werkt niet, het werkt niet en het werkt niet als je het mij vraagt.

Daarvoor heb ik naar de beschrijving op de site waarnaar je linkt, het schemaatje dat daar ook staat, en jouw screenshot gekeken.

Het werkt niet omdat je niet de juiste pinnen van de Arduino gekozen hebt.
Het werkt niet omdat je schijnbaar de pinnen van de chip, in plaats van de module hebt gekozen.
Het werkt niet omdat je niet de juiste pinnen van de module gekozen hebt als je wel de module zou bedoelen.

De Arduino heeft analoge ingangen die van A0 tot A5 gaan, dat zijn er dus 6 in totaal.
Die ingangen kunnen ook digitaal gebruikt worden, zelf ook als uitgang.
Dan zijn er nog digitale uit en ingangen, die van D0 tot D13 gaan, maar daar is de D niet benoemd.
Sommige kunnen hardwarematig een PWM waarde uitsturen, die zijn op je bordje gemarkeerd met een ~ tilde .
Soms vergist men zich en noemt men dat analoge uitgangen, maar dat zijn het niet.
Deze mogelijkheden moet je wel begrijpen, anders zal het werken erg moeizaam worden.
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

MAS3

Ow, nog iets.

Die motoren gaan niet draaien hoor.
Zodra je de transistor open zet gaat er niet voldoende stroom door de motor, maar bijna alles gaat door de betreffende diode.

Als je de diode omdraait maak je meer kans.
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

castel

Bedankt allemaal voor jullie feedback. Door jullie wijze woorden is het mij gelukt om de schakeling in mekaar te knutselen en aan de praat te krijgen! Nu zit ik nog slechts met één vraagje: wat is de gemakkelijkste manier om de uiteinde van het motortje te solderen? Kan dit gewoon op een header pin of is dit niet mogelijk? De uiteinden zien er als volgt uit (zie afbeelding en bijlage) en past dus niet in een breadboard.

mvg

nicoverduin

Als je die draadjes bedoeld.... Er zijn losse header pinnen en houders te koop op o.a. ebay. 't is een beetje een vraag waar je het op wil aansluiten. Er zijn ook 0.1" schroef klemmen te koop. En als het de bedoeling is dat het in een apparaat komt dat in principe nooit meer open hoeft, moet je jezelf afvragen of het de kosten wel waard is om uberhaupt pinnen ed. te gebruiken en niet gelijk gewoon solderen.
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

castel

#24
May 14, 2015, 02:20 pm Last Edit: May 14, 2015, 03:24 pm by castel
Bedankt voor de talrijke nuttige reacties.
Na een beetje gespeeld te hebben met code is het me gelukt om de accelerometer naar mijn wensen te calibreren.

Nu zit ik nog met één vraagje. Indien de accelerometer een bepaalde waarde bereikt (uitwijking) moet de led oplichten. Normaal gezien doe ik dit gewoon met de analogValue die binnenkomt langs de Sensor. Maar omdat deze nu aangepast zijn en omgezet zijn kan ik dit niet gebruiken

Ik weet dat je dit normaliter doet met volgende code in de voide loop ():

if (uitwijking >= 15){
 digitalWrite(led1, HIGH);
alse {
 digitalWrite(led1, LOW);


Ik weet enkel niet welke variabele ik bij "uitwijking" moet zetten. Ik krijg steeds fouten als ik wat probeer. Omdat de analoge waarden die ik meet zowizo boven de 15 zitten. Maar degene die op de seriële monitor geprint worden niet omdat deze omgevormd zijn.
Hebben jullie hiervoor een oplossing?
De code staat hier onder


Code: [Select]
const static boolean GFORCE = true;
const static boolean METERS = false;


byte _sleepPin= 4;
byte _GS= 5;
byte _xpin= A0;
byte _ypin = A1;


int _gc = 92;//gravity constant (inverted for proper sinage)
int _0x = 660; //defaults to read values
int _0y = 677; //defaults to reasonable values
boolean _calibrated=false;


int led1 = 10;


void setup()
{
Serial.begin(9600);
begin();//runs setup
calibrate();
pinMode(10, OUTPUT);
}

void loop()
{
delay(3000); //Delay for readability


Serial.println();
Serial.println("In Meters Per Second-Squared:");
readMx();
readMy();


}
void begin()
{
pinMode(_sleepPin,OUTPUT);//output mode
pinMode(_GS,OUTPUT);//output mode
pinMode(_xpin, INPUT);//input mode
pinMode(_ypin, INPUT);//input mode


digitalWrite(_GS,LOW);//sets GS mode
digitalWrite(_sleepPin, HIGH);//turns off sleep mode and activates device
digitalWrite(_xpin, HIGH);//turn on pull up resistor
digitalWrite(_ypin, HIGH);//turn on pull up resistor

}


void calibrate()
{
Serial.println("Please place device right-side up on a flat surface.");
delay(3000);//give user two seconds to comply.
Serial.println("Calibrating");


_0x = readAverage(_xpin, 10);
Serial.print("X Axis Calibrated:"); Serial.println(_0x);
_0y = readAverage(_ypin, 10);
Serial.print("Y Axis Calibrated:"); Serial.println(_0y);

_calibrated = true;
}
int readAverage(int pin, int samples)
{
long readings = 0;

for(int i = 0; i < samples; i++)
{
readings += analogRead(pin);
}

return (readings/samples);
}

float convert(float myReading, float my0G)
{
return convert(myReading, my0G, GFORCE);//defaults to G-Forces
}

float convert(float myReading, float my0G, bool myUnits)
{
float myResult=((my0G-myReading)/(_gc));
if(myUnits)
return myResult; //G-Forces
else
return (myResult * 9.80665 * 10);


//converts to m/s^2 using conventional value for gravity.
//if you are on a different planet you may need to use a
//value for your conversions.
}

void readMx()
{
Serial.print("X Reading: ");
Serial.println(convert(analogRead(_xpin), _0x, METERS));
}

void readMy()
{
Serial.print("Y Reading: ");
Serial.println(convert(analogRead(_ypin), _0y, METERS));
}

MAS3

Vermoedelijk mis ik nog wat programmeer ervaring, maar:

Ik zie nergens een verwijzing naar uitwijking staan in de code.
Ik zie ook nergens iets staan waar je de waarde van je accelerometer binnenhaalt om te verwerken.
Ik zie wel dat je de waardes naar serial stuurt.
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

castel

Vermoedelijk mis ik nog wat programmeer ervaring, maar:

Ik zie nergens een verwijzing naar uitwijking staan in de code.
Ik zie ook nergens iets staan waar je de waarde van je accelerometer binnenhaalt om te verwerken.
Ik zie wel dat je de waardes naar serial stuurt.

Ja ik zou graag werken met de waarden die geprint worden op de seriele monitor maar ik vind de oplossing niet

Mvg

MAS3

Je haalt die waarden binnen in een functie.
De waardes die je daar binnenhaalt, zijn alleen geldig binnen die functie.
Daarom lukt de serial print daar dus wel.
Ergens anders zijn ze onbekend.
En zelfs als je de volgende keer weer terugkeert naar die functie zijn ze alweer vergeten en worden ze opnieuw aangemaakt.
Dat word dus uitzoeken hoe je waardes vanuit een functie kunt overdragen naar elders in je sketch.
Er word hier in het Engels wat over variabele scope ("blikveld") verteld, ook over het nut van de verschillende varianten.
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

castel

Voor de geïnteresseerden, het is wel degelijk gelukt.

Gewoon de variabele (convert(analogRead(_xpin), _0x, METERS) in de void loop () gebruiken. Dit blijkt te werken

MAS3

#29
May 14, 2015, 10:39 pm Last Edit: May 14, 2015, 10:41 pm by MAS3
Gefeliciteerd.

Daarmee is je code vermoedelijk wel behoorlijk veranderd.
Wil je die uiteindelijke code ook plaatsen ter leering ende vermaeck ?
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

Go Up