Arduino Nano 3x servo og ADXL hjælp (Læst 3504x)

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
Arduino Nano 3x servo og ADXL hjælp
« Dato: April 05, 2015, 11:11:40 »
Hej folkens.

Første kode er med 1 servo, og forsøget går ikke lige helt så godt
Jeg bruger Emax ES08MA 2 servo'er til dette projekt.

Servo på Digital Pin 9 (Er klar over at det er en analog servo, hvilket forvirre mig en del)
Også køre ADXL345 på SDA og SCL (med wire.h lib)

Koden er indtil videre bygget sammen sådan her:

Kode:
#include <Wire.h> // I2C library, gyroscope
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0;    // variable to store the servo position


// Accelerometer ADXL345
#define ACC (0xA7>>1)    //ADXL345 ACC address
#define A_TO_READ (6)        //num of bytes we are going to read each time (two bytes for each axis)
void initAcc() {
  //Turning on the ADXL345
  writeTo(ACC, 0x2D, 1 << 3);
  writeTo(ACC, 0x31, 0x0B);
  writeTo(ACC, 0x2C, 0x09);
  //by default the device is in +-2g range reading
}
void getAccelerometerData(int * result) {
  int regAddress = 0x32;    //first axis-acceleration-data register on the ADXL345
  byte buff[A_TO_READ];
  readFrom(ACC, regAddress, A_TO_READ, buff); //read the acceleration data from the ADXL345
  //each axis reading comes in 10 bit resolution, ie 2 bytes.  Least Significat Byte first!!
  //thus we are converting both bytes in to one int
  result[0] = (((int)buff[1]) << 8) | buff[0];
  result[1] = (((int)buff[3]) << 8) | buff[2];
  result[2] = (((int)buff[5]) << 8) | buff[4];
}
void setup()
{
  Serial.begin(9600);
  Wire.begin();
  initAcc();

  myservo.attach(9);  // attaches the servo on pin 9 to the servo object

}
void loop()
{
  int hx, hy, hz;
  int acc[3];
  getAccelerometerData(acc);
  hx = acc[0];
  hy = acc[1];
  hz = acc[2];

  Serial.print(" X=");
  Serial.print(hx);
  Serial.print(" Y=");
  Serial.print(hy);
  Serial.print(" Z=");
  Serial.println(hz);

  pos = hz / 180;
  myservo.write(pos);              // tell servo to go to position in variable 'pos' 
  delay(1000);
}
//---------------- Functions
//Writes val to address register on ACC
void writeTo(int DEVICE, byte address, byte val) {
  Wire.beginTransmission(DEVICE); //start transmission to ACC
  Wire.write(address);        // send register address
  Wire.write(val);        // send value to write
  Wire.endTransmission(); //end transmission
}
//reads num bytes starting from address register on ACC in to buff array
void readFrom(int DEVICE, byte address, int num, byte buff[]) {
  Wire.beginTransmission(DEVICE); //start transmission to ACC
  Wire.write(address);        //sends address to read from
  Wire.endTransmission(); //end transmission

  Wire.beginTransmission(DEVICE); //start transmission to ACC
  Wire.requestFrom(DEVICE, num);    // request 6 bytes from ACC
  int i = 0;
  while (Wire.available())   //ACC may send less than requested (abnormal)
  {
    buff[i] = Wire.read(); // receive a byte
    i++;
  }
  Wire.endTransmission(); //end transmission
}

Det virker dog som om at der er fejl i koden, for servo'en opføre sig ret underligt.

Selve ADXL koden virker fint, dvs. hvis man trækker servo delen fra, så virker den som den skal.

Hjælp søges.
« Senest Redigeret: April 05, 2015, 11:25:23 af Danni-Hansen »
Mvh. Danni Hansen.

 

Offline gsborn

  • Spændingsdeler
  • ****
  • Indlæg: 50
  • Antal brugbare Indlæg: 7
  • nybegynder + Gør tingene for sjov, interesse, leg
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #1 Dato: April 05, 2015, 19:44:31 »
Hej Danni,

kun en ide, er servo'en på en ekstern strømforsyning ?

Hvis ja så prøve at sætte GND strømforsyning til GND Arduino Nano
Måske kunne du prøve at give servoen sin egen strømforsyning.

Og så vidt jeg har læst mig til, erfaring med servo så er det ligegyldig om det er en digital eller analog servo de opfører sig på samme måde, også vedr. pin.
Her en interresant link : https://arduino-info.wikispaces.com/Servos

Med venlig hilsen
Gregor

nybegynder +
Gør tingene for sjov, interesse, leg
Mine svar er kun ud fra min egen videnstand som begynder og google.

 

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #2 Dato: April 05, 2015, 20:50:33 »
Bruger 5v på arduino nano :)

Har dog ikke prøvet med extern strøm, men, altså, det virker som en kode fejl.
Mvh. Danni Hansen.

 

Offline gsborn

  • Spændingsdeler
  • ****
  • Indlæg: 50
  • Antal brugbare Indlæg: 7
  • nybegynder + Gør tingene for sjov, interesse, leg
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #3 Dato: April 06, 2015, 08:24:37 »
Hej,
det kan være strøm, da servo´en bruger mellem 4,8 og 6 volt.

Har du hentet  ADXL345 - biblioteket / libary ?

Det næste hvad det falder mig i øjne er dette :

Kode:
//---------------- Functions
//Writes val to address register on ACC
void writeTo(int DEVICE, byte address, byte val) {
  Wire.beginTransmission(DEVICE); //start transmission to ACC
  Wire.write(address);        // send register address
  Wire.write(val);        // send value to write
  Wire.endTransmission(); //end transmission
}
//reads num bytes starting from address register on ACC in to buff array
void readFrom(int DEVICE, byte address, int num, byte buff[]) {
  Wire.beginTransmission(DEVICE); //start transmission to ACC
  Wire.write(address);        //sends address to read from
  Wire.endTransmission(); //end transmission
 
  Wire.beginTransmission(DEVICE); //start transmission to ACC
  Wire.requestFrom(DEVICE, num);    // request 6 bytes from ACC
  int i = 0;
  while (Wire.available())   //ACC may send less than requested (abnormal)
  {
    buff[i] = Wire.read(); // receive a byte
    i++;
  }
  Wire.endTransmission(); //end transmission
}


Er dette ikke det samme som biblioteket "#include <Wire.h> " skulle overtage/styr ?

Så fand jeg også et programm som måske kan hjælpe, man kan måske finde de dele man kan bruge. Det er her :http://www.instructables.com/id/Necomimi-Arduino-Cat-Ears/step4/Sketchy-details/

Det er altså kun brainstorming.
Med venlig hilsen
Gregor




nybegynder +
Gør tingene for sjov, interesse, leg
Mine svar er kun ud fra min egen videnstand som begynder og google.

 

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #4 Dato: April 06, 2015, 11:26:28 »
Hejsa :)

Umidelbart kan jeg ikke finde ud af om de library der er der ud, om de passer til mit gyro..
Jeg har den her:
http://www.aliexpress.com/item/Treaxial-cjmcu-105-adxl345-digital-module-iic-spi/925323205.html

:)
Mvh. Danni Hansen.

 

Offline gsborn

  • Spændingsdeler
  • ****
  • Indlæg: 50
  • Antal brugbare Indlæg: 7
  • nybegynder + Gør tingene for sjov, interesse, leg
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #5 Dato: April 06, 2015, 15:01:44 »
Hej Danni,
her en side mere om din  ADXL345 : http://bildr.org/2011/03/adxl345-arduino/

Her kan du hente biblioteket : https://code.google.com/p/adxl345driver/downloads/detail?name=ADXL345.zip&can=2&q=

Om den passer til din gyro,  som nok er mere en accelerometer, kan du kun finde ud af gennem at teste den.
Sæt den op som beskrevet, hent  biblioteket, kør eksampel programm og se.  :D

For det meste vil de biblioteker funger, da det er den samme sensor - adxl345.

Med venlig hilsen
Gregor




nybegynder +
Gør tingene for sjov, interesse, leg
Mine svar er kun ud fra min egen videnstand som begynder og google.

 

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #6 Dato: April 06, 2015, 17:50:13 »
Som sagt, så virker accelerometer delen jo egentligt fint nok, det er servo delen der laver ballade.
Mvh. Danni Hansen.

 

Offline gsborn

  • Spændingsdeler
  • ****
  • Indlæg: 50
  • Antal brugbare Indlæg: 7
  • nybegynder + Gør tingene for sjov, interesse, leg
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #7 Dato: April 08, 2015, 20:41:38 »
Hej Danni,

fik du servo´en til at køre ?

hilsen Gregor
nybegynder +
Gør tingene for sjov, interesse, leg
Mine svar er kun ud fra min egen videnstand som begynder og google.

 

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #8 Dato: April 08, 2015, 20:53:33 »
HAr ikke pillet det store ved det, andet end som samlet kode.
Mvh. Danni Hansen.

 

Offline asm7100

  • Højpas filter
  • *****
  • Indlæg: 309
  • Antal brugbare Indlæg: 17
  • Hvis det ikke kan gøres så gør det alligevel.
    • Vis profil
Sv: Arduino Nano 3x servo og ADXL hjælp
« Svar #9 Dato: Juni 12, 2015, 14:56:44 »
Bare en ide.
Ved stepper motor kan det gå for hurtigt med steppene, kan du have samme problem??
MVH
Allan Madsen