Arduino UNO R4 WiFi and Adafruit LIS3DH Accelerometer-Based Motion Detection System
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This document provides a detailed overview of a circuit that includes an Arduino UNO R4 WiFi microcontroller and an Adafruit LIS3DH Triple-Axis Accelerometer. The Arduino is used to read data from the accelerometer via I2C communication. The document includes a component list, wiring details, and documented code for the microcontroller.
Component List
Arduino UNO R4 WiFi
- Description: A microcontroller board based on the ATmega328P, featuring built-in WiFi capabilities.
- Pins: OFF, GND, VRTC, IIC0_SCL, IIC0_SDA, 3V3, GPIO 41, GPIO 0, GPIO 42, GPIO 43, GPIO 44, BOOT, IOREF, RESET, 5V, VIN, A0, A1, A2, A3, A4, A5, RSPCKA, CIPO, COPI, D0/RX, D1/TX, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, AREF, SDA, SCL
Adafruit LIS3DH Triple-Axis Accelerometer
- Description: A low-power accelerometer with a digital interface, capable of measuring acceleration in three axes.
- Pins: CS, SDO, ADC1, ADC2, ADC3, INT2, VCC, 3.3V, GND, SCL, SDA, INT1
Wiring Details
Arduino UNO R4 WiFi
- GND: Connected to GND of Adafruit LIS3DH Triple-Axis Accelerometer
- VIN: Connected to VCC of Adafruit LIS3DH Triple-Axis Accelerometer
- SDA: Connected to SDA of Adafruit LIS3DH Triple-Axis Accelerometer
- SCL: Connected to SCL of Adafruit LIS3DH Triple-Axis Accelerometer
Adafruit LIS3DH Triple-Axis Accelerometer
- GND: Connected to GND of Arduino UNO R4 WiFi
- VCC: Connected to VIN of Arduino UNO R4 WiFi
- SDA: Connected to SDA of Arduino UNO R4 WiFi
- SCL: Connected to SCL of Arduino UNO R4 WiFi
Documented Code
Arduino UNO R4 WiFi Code
/* If you want to use NEAI functions please, include NEAI library
* in your Arduino libraries then, uncomment NEAI parts in the following code
*/
/* Libraries part */
#include <Wire.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
/* Macros definitions */
#define SERIAL_BAUD_RATE 115200
/* Default address is 0x18 but, if SDO is powered at 3v3,
* address is set to 0x19, so you need to change it
* depending on your current hardware configuration.
*/
#define SENSOR_I2C_ADDR 0x18
/* Sensor data rates.
* You can choose from:
* LIS3DH_DATARATE_1_HZ
* LIS3DH_DATARATE_10_HZ
* LIS3DH_DATARATE_25_HZ
* LIS3DH_DATARATE_50_HZ
* LIS3DH_DATARATE_100_HZ
* LIS3DH_DATARATE_200_HZ
* LIS3DH_DATARATE_400_HZ
* LIS3DH_DATARATE_LOWPOWER_1K6HZ
* LIS3DH_DATARATE_LOWPOWER_5KHZ
*/
#define SENSOR_DATA_RATE LIS3DH_DATARATE_400_HZ
/* Sensor ranges.
* You can choose from:
* LIS3DH_RANGE_16_G
* LIS3DH_RANGE_8_G
* LIS3DH_RANGE_4_G
* LIS3DH_RANGE_2_G
*/
#define SENSOR_RANGE LIS3DH_RANGE_2_G
/* NanoEdgeAI defines part
* NEAI_MODE = 1: NanoEdgeAI functions = AI Mode.
* NEAI_MODE = 0: Datalogging mode.
*/
#define NEAI_MODE 1
#define SENSOR_SAMPLES 256
#define AXIS 3
Adafruit_LIS3DH lis = Adafruit_LIS3DH();
/* Global variables definitions */
static uint16_t neai_ptr = 0;
static float neai_buffer[SENSOR_SAMPLES * AXIS] = {0.0};
/* Initialization function: In this function,
* code runs only once at boot / reset.
*/
void setup() {
/* Init serial at baud rate 115200 */
Serial.begin(SERIAL_BAUD_RATE);
/* Init I2C connection between board & sensor */
if(!lis.begin(SENSOR_I2C_ADDR)) {
Serial.println("Can't initialize I2C comm with LIS3DH sensor...\n");
while(1);
}
Serial.println("OK");
/* Init LIS3DH with desired settings: odr & range */
lis.setRange(SENSOR_RANGE);
lis.setDataRate(SENSOR_DATA_RATE);
delay(1000);
}
/* Main function: Code run indefinitely */
void loop() {
/* Get data in the neai buffer */
while(neai_ptr < SENSOR_SAMPLES) {
/* Check if new data if available */
if(lis.haveNewData()) {
/* If new data is available we read it ! */
lis.read();
/* Fill neai buffer with new accel data */
neai_buffer[AXIS * neai_ptr] = (float) lis.x;
neai_buffer[(AXIS * neai_ptr) + 1] = (float) lis.y;
neai_buffer[(AXIS * neai_ptr) + 2] = (float) lis.z;
/* Increment neai pointer */
neai_ptr++;
}
}
/* Reset pointer */
neai_ptr = 0;
/* Print the whole buffer to the serial */
for(uint16_t i = 0; i < AXIS * SENSOR_SAMPLES; i++) {
Serial.print((String)neai_buffer[i] + " ");
}
Serial.print("\n");
/* Clean neai buffer */
memset(neai_buffer, 0.0, AXIS * SENSOR_SAMPLES * sizeof(float));
}
Adafruit LIS3DH Triple-Axis Accelerometer Code
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
This document provides a comprehensive overview of the circuit, including the components used, their wiring, and the code running on the microcontroller.