Ви не увійшли.
Усім привіт!
Недавно розпочав вивчати ардуіно і потрібна допомога з програмуванням.
Мені необхідно, щоб отримані дані про положення відносно трьох вісей (x, y, z) з акселерометра ADXL345 та дані про вагу/навантаження з модуля HX711 (також під'єднаного до тензодатчиків) записувалися за допомогою Arduino Nano на SD-карточку (через модуль MicroSD Card Adapter). Можливо, щоб записувалися у форматі "csv".
Також хочу порадитися щодо правильності підключення модулів до Arduino Nano та живлення:
ADXL345:
VCC - 5V
GND - GND
SDA - A4
SCL - A5
HX711:
VCC - 5V
GND - GND
DT - D4
SCK - D5
MicroSD Card Adapter:
VCC - 5V
GND - GND
CS - D10
MOSI - D11
MISO - D12
SCK - D13
А також, чи буде усе працювати при підключенні 9V (батарейка крона) до пінів на ардуіно: плюс до VIN та мінус до GND.
Щось пробував писати скетч, і він компілюється, проте при завантаженні на ардуіно - нічого не відбуєваться:
// Підключення усіх бібліотек:
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <HX711.h>
int ADXL345 = 0x53;
float Xa, Ya, Za;
File dataFile;
const int LOADCELL_DOUT_PIN = 4;
const int LOADCELL_SCK_PIN = 5;
HX711 scale;
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(ADXL345); // Початок комунікації із сенсором
Wire.write(0x2D); // Звернення до регістру POWER_CTL - 0x2D
Wire.write(8); // (8dec -> 0000 1000 binary) біт D3 високий логічний сигнал
Wire.endTransmission();
delay(10);
// Ініціалізація microSD
if (!SD.begin(10)) {
Serial.println("SD card initialization failed!");
while (1);
}
// Створення файлу "log.csv" для запису
dataFile = SD.open("log.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("ADXL345_X,ADXL345_Y,ADXL345_Z,HX711");
dataFile.close();
}
// Ініціалізація HX711 модуля
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale();
}
void loop() {
// === Зчитування даних модуля ADXL345 === //
Wire.beginTransmission(ADXL345);
Wire.write(0x32); // Початок з регістру 0x32 (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(ADXL345, 6, true); // Загалом зчитування 6-ти регістрів
Xa = ( Wire.read()| Wire.read() << 8); // Значення по вісі Х
Xa = Xa / 256; // Для діапазону значень +-2g, потрібно поділити значення на 256
Ya = ( Wire.read()| Wire.read() << 8); // Значення по вісі Y
Ya = Ya / 256;
Za = ( Wire.read()| Wire.read() << 8); // Значення по вісі Z
Za = Za / 256;
Serial.print("Xa= ");
Serial.print(Xa);
Serial.print(" Ya= ");
Serial.print(Ya);
Serial.print(" Za= ");
Serial.println(Za);
// Отримання даних ваги з HX711
long hx711Value = scale.read_average();
Serial.print(" HX711: ");
Serial.println(hx711Value);
// Відкриття файлу "log.csv" для запису
dataFile = SD.open("log.csv", FILE_WRITE);
if (dataFile) {
// Запис даних з ADXL345 та HX711 у файл
dataFile.print(Xa);
dataFile.print(",");
dataFile.print(Ya);
dataFile.print(",");
dataFile.print(Za);
dataFile.print(",");
dataFile.println(hx711Value);
dataFile.close();
}
else {
Serial.println("Error opening log.csv file!");
}
// Затримка
delay(500);
}
Заздалегідь дякую за допомогу!
Неактивний
чи буде усе працювати при підключенні 9V (батарейка крона) до пінів на ардуіно: плюс до VIN та мінус до GND.
Буде, але не довго
Давно не розробляю під Ардуіно, але..
Я би так зробив:
Взяв один пристрій (датчик). Почитав на нього даташит. Розібрався з його роботою. Спробував підключити та отримати якісь дані. З ардуіно тяжко без відладчика. Тому активно використовував би відладку через вбудований uart. Покроково. Дійшов до цієї точки, - повідомлення в uart з якимось даними.
Всі нові можливості(функції) вводив поступово, з перевіркою чи не рухнуло все. З часом код захламляється, тому деякі функції можна згрупувати та винести в окремий файл.
Далі інший датчик так само.
І на закуску робота з sd картою.
Не намагайтесь запихнути все в loop()
Поділіть на прості функції, в яких розберетесь ви і той, хто буде потім читати ваш код.
Наприклад початок програми:
Інклюди
Дефайни
Глобальні змінні, якщо треба
Serial_init();
Sensor sensor1;//створюємо датчик
sensor1.init();//якась ініціалізація
Sensor sensor2;
sensor2.init;
SDcard sdcard;
sdcard.init();
loop(){
sensor1.handle();//обробляємо дані датчика
sensor2.handle();
sdcard.handle(sensor1, sensor2);//записуємо
delay(500);
}
Що до живлення від 9в, подивіться який стабілізатор стоїть на вашій платі. Потім знайдіть його даташит і стане все зрозуміло.
Неактивний