circuit accelerometer - vibratie

Bedankt. Fritzing is inderdaad een handig programma om schema's te maken, bedankt.
Ik heb een opstelling gemaakt waarvan ik denk dat ze goed is met een accelerometer en voorlopig 1 vibratiemotortje.
Wat denken jullie hiervan? (bestand in Attach)

Dat gaat wel werken hoor. Zelf gebruik ik die ADXL345 met I2C. Maar dat mag niet uitmaken.

Als Nico het al bekeken heeft dan geloof ik ook dat het wel zal werken.
Maar ik heb toch wel een tipje voor je in verband met het maken van tekeningen.
In je Fritzing screenshot zie ik veel blauwe draden die kriskras door de tekening lopen.
Het is aan te raden om je draden zoveel mogelijk in rechte lijnen te tekenen, dat maakt het net wat overzichtelijker.
Verder is het gangbaar om de kleur rood voor VCC te gebruiken, en zwart voor GND.
Dat zijn twee belangrijke leidingen die het echt verdienen een eigen kleur te hebben.
Verder kun je je weerstand een waarde geven, waardoor de kleurenstreepjes erop correct zullen worden weergegeven.
De kleuren die er nu in staan representeren 220 Ohm, de waarde die meestal word toegepast om een LED in een 5 volt systeem te gebruiken.
470 Ohm zou zijn geel, paars, bruin en 560 is dan groen, blauw, bruin.

Zijn allemaal details, maar als je een iets uitgebreidere tekening gaat maken zul je er veel nut bij hebben.

MAS3:
Het kan best zo zijn dat er mensen zijn die zichzelf zo fantastisch vinden dat ze geen tijd nemen voor newbies.
Maar dat is geen reden jezelf en/of je vragen als kinderachtig te bestempelen.
Als je een vraag hebt, moet je daarop gewoon antwoord kunnen krijgen.
Dan is het wel goed om eerst even te kijken of het antwoord er niet al is, maar als het er niet is moet je m gewoon kunnen stellen zonder je te hoeven schamen voor die vragen.

Dus gewoon je vragen stellen !

Ja, het solderen van die pennen is echt noodzakelijk, anders krijg je nooit een stabiele, goede verbinding.
Dan ga je in je code op zoek naar fouten, terwijl de problemen door een slechte verbinding worden veroorzaakt.
Dus dat betekent dat er een soldeerbout met toebehoren mag aanrukken, of je dat ergens moet gaan (of laten) doen waar men er wel over beschikt.

De weerstand heb je 2 keer nodig, 1 voor elke transistor.
Je sluit elke transistor ook aan op een eigen PWM aansluiting, als je dat zo nog niet begrepen had.
Die weerstand van 570 Ohm gaat je nog wat hoofdbrekens opleveren.
De standaard waarden die daar op lijken zijn namelijk 470 en 560 Ohm.
Maar het zal vast een tiepvaud zijn, want eerder was er sprake van een andere waarde.
Die diode is fysiek wat groot met kunststof behuizing.
Voor dat doel kun je ook een 1n4148 nemen, die is een stuk kleiner met een glazen behuizing.
Je kunt hierop de streep voor de kathode wel iets lastiger onderscheiden.

Als je een condensator (capacitor in het Engels) wil gebruiken, moet je wel weten wat je daarmee gaat doen.
Condensatoren hebben veel toepassingen, en zijn er in vele uitvoeringen.
Het is wel van belang dat je voor de juiste combinatie kiest.

Verder mis ik nog een voeding.
Hoe ben je van plan het geheel van spanning te gaan voorzien ?

Ik zou het geheel van spanning willen voorzien door een batterijvoeding die ik dan op de arduino aansluit (Ipv de usb).
Verder had ik nog een vraagje: wat betekt I2C juist?
In verband met het programmeren: ik zou dus vanaf een bepaalde hoek een vibratie willen verkrijgen door gebruik te maken van pwm. Dit moet een alles of niets verhaal worden. Ik bedoel hier dus mee dat de vibratie altijd op dezelfz sterkte moet zijn en niet bij een grotere hoek bijvoorbeeld harder moet vibreren.
Hebben jullie hiervoor nog tips?

Alvast bedankt voor de leuke en nuttige tips. Mvg,
Castel

I2C is een "afkorting" voor IIC, wat weer een afkroting is voor Inter Integrated circuit Communication.
Het is een voorbeeld van Nederlandse vindingrijkheid, want een van de ontwikkelingen van Philips in de jaren 70.
Philips had ook het patent op het systeem en de naam, maar dat is een paar jaar geleden meegegaan naar NXP)
Het diende toen om op relatief eenvoudige wijze chips met elkaar te laten "praten".
Voor I2C waren er veel verbindingen nodig om dit voor mekaar te krijgen.
Een geheugenchip bijvoorbeeld had toen 8 bits adres en 8 bit databits plus wat stuursignalen en dus minimaal een stuk of 18 aansluitingen nodig.
Met I2C werd dat beperkt tot 2.

Omdat Philips / NXP het patent en de rechten op de naam hebben, is hetzelfde systeem ook wel bekend als 2 draad, oftewel TWI (Two Wire Interface).

Tot zover de wiki (<= hint).

De wire library is de Arduino ondersteuning hiervoor.
De Arduino heeft hier een hardwarematige ondersteuning voor, de Uno op pennen A5 en A4.
Als je dat gaat gebruiken betekent dat dus dat die pennen niet meer beschikbaar zijn voor het verwerken van analoge ingangssignalen.

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?

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

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

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

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.

Ben je zeker dat je zo de x y z waarden kan uitlezen?

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.

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.

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

Coin Vibration.png

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.

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

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));
}

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.

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.

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

Mvg

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.

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

Gefeliciteerd.

Daarmee is je code vermoedelijk wel behoorlijk veranderd.
Wil je die uiteindelijke code ook plaatsen ter leering ende vermaeck ?