Welke accelerometer?

Hardware die niet past in bovenstaande onderwerpen
Berichten: 12
Geregistreerd: 22 Okt 2013, 21:25

Welke accelerometer?

Berichtdoor nileez » 22 Okt 2013, 21:52

Goedenavond iedereen,

Ik ben bezig met een project voor school. Wat ik wil maken is een computerbesturing die gebruik maakt van bewegingen van je hoofd (voor mensen met een aandoening aan hun armen enz.)

Hiervoor heb ik dus een accelerometer nodig die aan het hoofd wordt bevestigd. Ik zat te denken aan een Memsic 2125, maar wou kijken of er nog andere alternatieven zijn die in Nederland te koop zijn en misschien iets goedkoper zijn (heb een lage budget omdat het een schoolproject is).

Hebben jullie misschien een idee? De accelerometer moet trouwens kleine bewegingen kunnen detecteren in de drie axes.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Welke accelerometer?

Berichtdoor nicoverduin » 23 Okt 2013, 00:11

Ik heb uitstekende ervaringen met deze : http://www.bitsandparts.eu/showarticles ... XL345.html
En goede service ook bij Siewert. Wil je goedkoper moet je naar ebay maar dat duurt wel meestal een maand voor het binnen is.
Overigens wel grappig dat project. In de 70ér jaren zat ik nog wel eens te prutsen bij de technische dienst van Heliomare. Veel dan dit soort projecten gedaan. Ik denk dat de gevoeligheid wel voldoende is. zeker op de stand 2G. (1G heb je automatisch :))
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 12
Geregistreerd: 22 Okt 2013, 21:25

Re: Welke accelerometer?

Berichtdoor nileez » 28 Okt 2013, 23:12

Oke, dankjewel! :D Ik ga hem vandaag bestellen, in combinatie met een Arduino Leonardo, breadboard en een paar jumper wires. Het is wel de eerste keer dat ik met een Arduino werk dus hoop ik dat alles goed gaat, want het project moet over een maand al af. :shock:

Zou ik jou misschien een paar vragen mogen stellen als ik onderweg wat problemen tegenkom (aangezien jij er veel ervaring mee hebt? :P )

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Welke accelerometer?

Berichtdoor nicoverduin » 29 Okt 2013, 00:18

Ik weet niet wat je al weet op dit gebied, maar als jij nu nog moet beginnen, dan vind ik je erg ambitieus om dit binnen een maand rond te krijgen. Zeker als je er een week over doet om hier op te reageren.......Die je dus nu kwijt bent (de tijd)...
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 12
Geregistreerd: 22 Okt 2013, 21:25

Re: Welke accelerometer?

Berichtdoor nileez » 29 Okt 2013, 00:56

Ik weet er niet veel over moet ik zeggen.. Het enige dat ik weet heb ik van losse stukjes informatie hier en daar op internet geleerd. Er staan ook een paar voorbeeldcodes op internet die ik ga gebruiken (ik beschik niet over genoeg kennis om zelf codes te schrijven, alleen genoeg om ze aan te passen)..

Ik wacht nu tot de onderdelen aankomen, dan ga ik beginnen met "knutselen".

Is zo een project zo moeilijk? Volgens mijn natuurkundeleraar, die ook maar een klein beetje kan programmeren, zou het wel haalbaar moeten zijn. Het probleem hierbij is natuurlijk dat hij die schatting eigenlijk niet had mogen maken omdat hij zelf ook niet goed kan programmeren. Zou het haalbaar zijn dit in een maand af te krijgen denk je?

In die week heb ik aan mijn verslag gewerkt, ik moet namelijk ook documenteren hoe ik aan de ideëen en aan het ontwerp enzovoorts kom. Het coderen zelf is een klein deel (maar wel het belangrijkste deel) van het project. Overigens wordt het project alleen beoordeeld op het eindresultaat (product), maar om een goed product te krijgen moet de code natuurlijk wel werken.. :D

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Welke accelerometer?

Berichtdoor nicoverduin » 29 Okt 2013, 10:33

Laat ik het zo stellen. Misschien zie je het licht en heb je het gelijk door. Verder weet ik niet wat je allemaal denkt aan te sturen met de Arduino. Die 3G sensor geeft alleen maar 3 integer waardes af X, Y en Z tov. de zwaarte kracht. Daarmee kan je dus dus bepalen onder welke hoek deze staat en daarmee verschillende apparaten aansturen.
Dus laat het concept maar zien wat je wilt. Dan kunnen we je tijdig op het goede spoor helpen. Maar ga er maar vanuit dat hier best veel uren in gaan zitten. Niet in het programmeren, maar wel in het snappen waar je mee bezig bent.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 12
Geregistreerd: 22 Okt 2013, 21:25

Re: Welke accelerometer?

Berichtdoor nileez » 29 Okt 2013, 19:52

Hey, ik heb een schets getekend waarin afgebeeld staat hoe de sensor gebruikt moet worden.

Afbeelding

De accelerometer wordt dus op het hoofd geplaatst. Het hoofd kan naar de zijkant draaien (x-as) en naar voren en naar achteren (y-as). De z-as wordt dan niet gebruikt.

In de onderste tekening heb ik een situatie geschetst waarin het hoofd dus naar rechts (spiegelbeeld) is gedraaid, en ook de hoek die dan berekend moet worden. Ik weet niet of ik de juiste hoek heb getekend, maar ervan uitgaande dat dat wel zo is, kan ik volgens een site op internet de hoek berekenen met deze formule:

hoek = sin-1 (a/g), met a = gemeten versnelling en g = 9,81.

Het probleem is dus dat ik niet weet in welke richting de gemeten versnelling wordt gemeten, en of de hoek die ik heb getekend wel correct is. Want deze twee dingen bepalen of de formule hierboven van toepassing is of niet. Want stel dat de formule en hoek wel kloppen, dan is de overstaande zijde van de hoek dus de gemeten versnelling, en de schuine zijde de gravitatieversnelling? :?

Ik weet trouwens ook dat de gemeten versnelling altijd 0 is als het loodrecht staat op de zwaartekracht, dus als de sensor in rust is (plaatjes 1 en 2), moet de hoek dus ook 0 zijn.

Vragen zijn dus:
- klopt en werkt dit concept wel? zoja:
- klopt de hoek die ik heb getekend in het derde plaatje?
- in welke richting wordt de gemeten versnelling gemeten?
- is de formule: hoek = sin-1(a/g) van toepassing op deze situatie? (of moet ik de hoek of iets anders aanpassen zodat de formule wel klopt)?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Welke accelerometer?

Berichtdoor nicoverduin » 29 Okt 2013, 21:00

Waarom zou je je druk willen maken over de versnelling? Door dat ding onder een hoek te plaatsen krijg je een meting. van -X tot +X, -Y tot +Y en -Z tot +Z (dan staat hij op zijn kop :)). Je hoeft alleen maar te bepalen wie de grootste waarde heeft in absolute termen. Dus een Winner-take-all concept. Met een minimum dus bijvoorbeeld 45 graden.
Ik ben zelf met een opdracht bezig waarbij ik een beweging om een van de 3 assen detecteer. De hoek? niet belangrijk. Ik wil alleen maar weten wie de grootste beweging heeft gemaakt. Die wint :) en dat draait op een ATTINY-85 :).
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 12
Geregistreerd: 22 Okt 2013, 21:25

Re: Welke accelerometer?

Berichtdoor nileez » 29 Okt 2013, 21:59

Aha je hebt gelijk, dat is inderdaad veel eenvoudiger. Dus waar het op neerkomt, is dit:

Afbeelding

De -x en x, y en -y kunnen in de tekening omgedraaid zijn, maar dat maakt nu niet veel uit. Ik moet nu dus alleen aflezen van de meetwaarden van de accelerometer welke kant een groter waarde heeft, en dan daarmee bepalen dat de muis die kant op moet bewegen? En dan dit voor zowel de x als de y richting doen.

Maar hoe moet ik dan de beginstand bepalen, instellen op welke positie alle meetwaarden 0 zijn? Dat moet in de code gebeuren neem ik aan? Of moet ik dan calibreren..

Nu moet ik nog wachten tot de componenten worden bezorgd zodat ik ermee kan experimenteren, maar ik snap nu wel wat ik moet doen, dus lukt dat wel, bedankt. :D

Als het idee wat hierboven staat klopt, moet ik het nog wel omzetten in een code. Ik ga nu alvast beginnen met het researchen daarvan. Tips zijn altijd welkom. :D

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Welke accelerometer?

Berichtdoor nicoverduin » 29 Okt 2013, 22:16

Om je op gang te helpen :) Dit werkt op de leonardo:

Code: Alles selecteren
/**
 * @file     readADXL345.ino
 * @author   Nico Verduin
 * @date     29-10-2013
 * @version  1.0
 * @mainPage
 * Simple sketch for reading the ADXL345 interface board and displaying raw data on the Serial output
 */

/**
 * SVN version control. do not remove
 * $Revision$
 * $Date$
 * $Author$
 */

#ifdef __IN_ECLIPSE__
#include "readADXL345.h"
#endif

#include <ADXL345.h>

//
// pin definitions
//
#define CS            10         // chip select for SD card
#define ADXL345_WORKS   13         // led on indicates ADXL exists
//
// other definitions
//
#define   DELAY_PER_MEASUREMENT 1000L   // one measurement per second
//
// card definitions
//
// ADXL345 Card
//   pin 1   = GND      Connect to GND row
//    pin 2   = VCC      Connect to 5V
//    pin 3   = CS      Not Connected
//   pin 4    = INT1      Not Connected
//    pin 5   = INT2      Not Connected
//    pin 6   = SDO      Not Connected
//    pin 7   = SDA      Connect to A4
//   pin 8   = SCK      Connect to A5

//
// ADXL345 accelerometer
//

ADXL345          accel(0x53);   // accelerometer instance
AccelerometerRaw   rawData;      // structure with the raw (=int) data from ADXL345
//
// global variables
//
/**
 * @name readADXL345()
 * @return uint8_t value of the sensor
 * Reads the sensor returns the value where Bit 0 = Z, Bit 1 = Y, Bit2 = X
 * The value represents the plan that is lying down. This is determined by
 * reading the raw sensor data and determining which value is largest. If negative it is 0
 * else it is a 1
 */
void readADXL345(){
   //
   // read the  raw dat from the accelerometer
   //
   rawData = accel.ReadRawAxis();
}

/**
 * @name setup()
 * initializes the sketch once by power on or Reset
 */
void setup()
{
   //
   // define IO pins if required
   //
   pinMode(CS, OUTPUT);            // SD card select
   pinMode(ADXL345_WORKS, OUTPUT);      // If lit, ADXL345 is connected
   //
   // Check that the accelerometer is in fact connected.
   //
   if(accel.EnsureConnected()){
       digitalWrite(ADXL345_WORKS, HIGH); // If we are connected, light our status LED.
   } else {
       digitalWrite(ADXL345_WORKS, LOW);  // If we are not connected, turn our LED off.
   }
   //
   // Set the range of the accelerometer to a maximum of 2G.
   //
   accel.SetRange(2, true);
   //
   // Tell the accelerometer to start taking measurements.
   //
   accel.EnableMeasurements();
   //
   // open Serial
   //
   Serial.begin(9600);
}

/**
 * @name loop()
 * loop functions is called continuously
 */
void loop()
{
   //
   // read the data
   //
   readADXL345();            // read the raw data from the ADXL345
   //
   // display the data on the Serial
   //
   Serial.print(rawData.XAxis);
   Serial.print(" | ");
   Serial.print(rawData.YAxis);
   Serial.print(" | ");
   Serial.println(rawData.ZAxis);
   //
   // delay some time
   //
   delay(DELAY_PER_MEASUREMENT);
}


Je hebt wel de ADXL345 library nodig hiervoor. Ik heb een gestripte versie om het klein en eenvoudig te houden :) je mailt me maar als je zover bent. Dan stuur ik hem wel op.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten