Arduino Nano 33 BLE

monis2003
Příspěvky: 7
Registrován: 06 lis 2021, 12:21
Reputation: 0

Arduino Nano 33 BLE

Příspěvek od monis2003 » 06 lis 2021, 12:33

Zdravím,
potřebovala bych poradit. Mám Arduino nano 33 ble a potřebuji na dálku měřit zrychlení. Využívám spojení Bluetooth a mobilní aplikace nRF Connect.
Jenže
1) rozsah akcelerometru je v knihovně LSM9DS1 nastaven na 4g a nevím, jak a kde ho změnit na 16g.

2) Zjistila jsem, že deska se mi v aplikaci zobrazí jako připojená až když zapnu na PC sériový monitor. Já ale budu měřit na dálku, deska bude napájena z jiné baterie (piny VIN a GND) a nevím, jak zařídit, aby se deska dokázala připojit k telefonu bez pomoci PC.

Zde přikládám kód.
Děkuji za pomoc.

Kód: Vybrat vše

#include <Arduino_LSM9DS1.h>
#include <ArduinoBLE.h>

BLEService sensorService("16150f38-e7a9-4fe1-ae08-48464baf25b2");
BLEStringCharacteristic xSensorLevel ("ff99948c-18ff-4ed8-942e-512b9b24b6da", 
    BLERead | BLENotify,15);
BLEStringCharacteristic ySensorLevel ("8084aa6b-6cae-461f-9540-e1a5768de49d", 
    BLERead | BLENotify,15);
BLEStringCharacteristic zSensorLevel ("ab80cb77-fe74-40d8-9757-96f8a54c16d9", 
    BLERead | BLENotify,15);

float oldXLevel = 0;
float oldYLevel = 0;
float oldZLevel = 0;
long previousMillis = 0;

void setup() {
  IMU.begin();
  Serial.begin(115200); 
   
   
  while (!Serial);
  if (!IMU.begin()) {
  Serial.println("Failed to initialize IMU!");
  while (1);}
int setAccelFS(uint8_t = 8);
  pinMode(LED_BUILTIN, OUTPUT);

  if (!BLE.begin()){
    Serial.println("Starting BLE failed");
    while(1);}

   BLE.setLocalName("Akcelerometr");
   BLE.setAdvertisedService(sensorService);

     sensorService.addCharacteristic(xSensorLevel);
     sensorService.addCharacteristic(ySensorLevel);
     sensorService.addCharacteristic(zSensorLevel);
     BLE.addService(sensorService);

     xSensorLevel.writeValue(String(0));
     ySensorLevel.writeValue(String(0));
     zSensorLevel.writeValue(String(0));

     BLE.advertise();
     Serial.println("Bluetooth device active, waiting for connection...");
}

void loop() {

  BLEDevice central = BLE.central();
  if (central){
    Serial.print ("connected to central");
    Serial.println(central.address());
    digitalWrite(LED_BUILTIN, HIGH);

    while(central.connected()) {
      updateAccelerationLevel();
      delay(300);}

      digitalWrite(LED_BUILTIN, LOW);
      Serial.print("Disconnected from central: ");
      Serial.println(central.address());      
    }
  }




  void updateAccelerationLevel() {
    float x, y, z;

    if(IMU.accelerationAvailable ()) {
      IMU.readAcceleration(x, y, z);

      if (x != oldXLevel) {
        xSensorLevel.writeValue(String(x));
        oldXLevel = x;}

      if (x !=oldYLevel) {
        ySensorLevel.writeValue(String(y));
        oldYLevel = y;}

      if (z !=oldZLevel) {
        zSensorLevel.writeValue(String(z));
        oldZLevel = z;}


            Serial.print(x);
            Serial.print(y);
            Serial.println(z);
      }
      }

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od peterple » 06 lis 2021, 17:28

Odpoveď na otázku č.1 neviem.
Odpoveď na otázku č.2
Táto doska má sériový kanál urobený predpokladám cez USB.

Kód: Vybrat vše

while (!Serial);
Takže to potom visí na tomto kóde.
Ale zrušiť len ten jeden riadok asi moc nepomôže. Tam treba kompletne prestať používať Serial v ostrej verzii.

Obyčajný Serial ktorí ide cez UART môže vysielať aj do prázdna. Napr ten test vracia vždy True
Stačí si len prečítať dokumentáciu.
https://www.arduino.cc/reference/en/lan ... /ifserial/

monis2003
Příspěvky: 7
Registrován: 06 lis 2021, 12:21
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od monis2003 » 06 lis 2021, 18:06

Děkuji, vyřešeno, už to funguje.

Zbývá tedy vyřešit otázku nastavení rozsahu na 16 g.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od AstroMiK » 06 lis 2021, 20:49

Je to absolutně bez záruky, ale když jsem kouknul do kódu knihovny a do katalogového listu, tak myslím, že by mělo stačit změnit obsah registru CTRL_REG6_XL z původního 0x70 na 0x68.

V příloze je výřez z kódu a z kat. listu.

knihovna.gif

kat_list.gif

monis2003
Příspěvky: 7
Registrován: 06 lis 2021, 12:21
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od monis2003 » 07 lis 2021, 08:08

Děkuji, jen prosím, jsem začátečník, jak se dostanu k tomu, abych to mohla v té knihovně přepsat?

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino Nano 33 BLE

Příspěvek od kiRRow » 07 lis 2021, 11:32

Arduino si knihovny ukládá do dokumentů/Arduino/Libraries popř do složky Libraries ve složce, kde je nainstalován.
Doporučuji tu knihovnu neupravovat v těchto složkách ( můžeš si rozhasit jinačí projetky ), ale zkopírovat si ji do složky s projektem a upravit ji až tam. Ve sketchi, pak budeš muset volání knihovny místo ostrých závorek napsat do uvozovek.

Kód: Vybrat vše

#include <ArduinoBLE.h> // tohle načítá z složek Libraries
#include "ArduinoBLE.h" // tohle načítá ze složky se sketchem

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od peterple » 07 lis 2021, 13:26

Myslím si že netreba ani upravovať knižnicu.
stačí po zavolaní funkcie begin zmeniť obsah daného registra pomocou:

Kód: Vybrat vše

 IMU.writeRegister(LSM9DS1_ADDRESS, LSM9DS1_CTRL_REG6_XL, 0x68); // 119 Hz, 16g
Ten kód je preto open source aby si ho hľudia čítali a porozumeli mu.
A preto ho niektorí autori aj pekne komentujú.
https://github.com/arduino-libraries/Ar ... SM9DS1.cpp

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od AstroMiK » 07 lis 2021, 15:19

V objektovém programování se trochu ztrácím, ale ta metoda 'writeRegister' je definovaná jako privátní.
Půjde použít i pro přímé volání?



Jinak jsem pro ten obvod našel ještě jinou knihovnu, která by měla umět nastavovat rozsah zrychlení uživatelsky pomocí:

Kód: Vybrat vše

// setAccelScale() -- Set the full-scale range of the accelerometer.
// This function can be called to set the scale of the accelerometer to
// 2, 4, 6, 8, or 16 g's.
// Input:
// 	- aScl = The desired accelerometer scale. Must be one of five possible
//		values from the accel_scale.
  void setAccelScale(uint8_t aScl);
(ten parametr 6g je tam asi omylem)

https://github.com/sparkfun/SparkFun_LS ... no_Library



Privátní definice metody v původní knihovně:
private.gif

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino Nano 33 BLE

Příspěvek od kiRRow » 07 lis 2021, 15:40

K privátní metodě může přistupovat pouze samotná instance třídy. Nelze ji volat odkudkoliv.

monis2003
Příspěvky: 7
Registrován: 06 lis 2021, 12:21
Reputation: 0

Re: Arduino Nano 33 BLE

Příspěvek od monis2003 » 07 lis 2021, 16:54

Děkuji moc za rady, ale asi něco stále dělám špatně.

Nejprve jsem zkusila za příkaz begin vložit to, co jste napsal vy peterple. to nefungovalo, napsalo to chybu.

Poté jsem zkusila váš postup kiRRow, zkopírovala jsem si celou knihovnu Arduino_LSM9DS1 a dostala se až k souboru .cpp, kde jsem změnila 0x70 na 0x68, jenže i přes to je stále nejvyšší naměřená hodnota 4G. Napadlo mě ještě, jestli nedělám chybu někde v tom přepisování. Soubor cpp mi jde otevřít totiž jen v poznámkovém bloku a to mi přijde trochu divné, že jsem to musela upravit tam.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů