Gyroscope and Accelerometer Calibration with Raspberry Pi

This is the second entry into the series entitled "Calibration of an Inertial Measurement Unit (IMU) with Raspberry Pi" where the gyroscope and accelerometer are calibrated using our Calibration Block. Python is used as the coding language on the Raspberry Pi to find the calibration coefficients for the two sensors. Validation methods are also used to integrate the IMU variables to test the calibration of each sensor. The gyroscope shows a fairly accurate response when calibrated and integrated, and found to be within a degree of the actual rotation test. The accelerometer was slightly less accurate, likely due to the double integration required to approximate displacement and the unbalanced table upon which the IMU was calibrated. Filtering methods are also introduced to smooth the accelerometer data for integration. The final sensor, the magnetometer (AK8963), will be calibration in the next iteration of this series.

Read More
Calibration of an Inertial Measurement Unit (IMU) with Raspberry Pi - Part I

Inertial measurement units (IMUs) can consist of a single sensor or collection of sensors that capture data meant to measure inertial movements in a given reference frame. Acceleration, speed of rotation, and magnetic field strength are examples of sensors contained in an IMU. IMUs can be found in applications ranging smart devices, medical rehabilitation, general robotics, manufacturing control, aviation and navigation, sports learning, and augmented and virtual reality systems. Inertial measurement units have become increasingly popular as their form factors shrink and computational power increases. The ability to use IMUs for indoor/outdoor tracking, motion detection, force estimation, orientation detection, among others has caused the use and availability of inertial sensors to become nearly widespread in smart phones, smart watches, drones, and other common electronic devices. The internet is full of projects involving accelerometers, gyroscopes, and magnetometers, but few cover the full calibration of all three sensors. In this project, the manual calibration of a nine degree-of-freedom (9-DoF) IMU is explored. A common MPU9250 IMU is attached to a cube to manually find the calibration coefficients of the three sensors contained within the IMU: accelerometer, gyroscope, and magnetometer. The IMU is wired to a Raspberry Pi - which will allow for high-speed data acquisition rates of all nine components of the IMU.

Read More
Recording Stereo Audio on a Raspberry Pi

The INMP441 MEMS microphone is used to record audio using a Raspberry Pi board through the inter-IC sound (I2S or I2S) bus. The I2S standard uses three wires to record data, keep track of timing (clock), and determine whether an input/output is in the left channel or right channel. First, the Raspberry Pi (RPi) needs to be prepped for I2S communication by creating/enabling an audio port in the RPi OS system. This audio port will then be used to communicate with MEMS microphones and consequently record stereo audio (one left channel, one right channel). Python iS then used to record the 2-channel audio via the pyaudio Python audio library. Finally, the audio data will be visualized and analyzed in Python with simple digital signal processing methods that include Fast Fourier Transforms (FFTs), noise subtraction, and frequency spectrum peak detection.

Read More
Arduino Venturi Flow Meter

A venturi meters, sometimes referred to as venturi tube, is a flow measurement device that takes advantage of the conservation of mass and flow continuity between three separate sections within a pipe: the inlet, throat, and diffuser (outlet). Differential pressure sensors measure the pressure drop between the inlet and throat and relate it to the volumetric flow rate. The geometry of the venturi meter, along with some empirical characteristics of the flow regime, allow for very accurate quantification of flow rate. The experiment conducted here uses a 3D printed venturi meter to test an 80mm 12V DC fan across different flow rates. Pulse-width modulation (PWM) is used to control the fan's rotation speed, which creates a range of velocities through the venturi meter. The MPXV7002DP differential pressure sensor measures the pressure drop between the throat and inlet, while a BME280 measures the barometric pressure and ambient temperature.

Read More
Capacitive Soil Moisture Sensor Calibration with Arduino

Soil moisture can be measured using a variety of different techniques: gravimetric, nuclear, electromagnetic, tensiometric, hygrometric, among others. The technique explored here uses a gravimetric technique to calibrate a capacitive-type electromagnetic soil moisture sensor. Capacitive soil moisture sensors exploit the dielectric contrast between water and soil, where dry soils have a relative permittivity between 2-6 and water has a value of roughly 80. Accurate measurement of soil water content is essential for applications in agronomy and botany - where the under- and over-watering of soil can result in ineffective or wasted resources. With water occupying up to 60% of certain soils by volume, depending on the specific porosity of the soil, calibration must be carried out in every environment to ensure accurate prediction of water content. Luckily, the accuracy of measurement devices has been increasing while the cost of the sensors have been decreasing. In this experiment, an Arduino board will be used to read the analog signal from the capacitive sensor, which will output voltage values which can be calibrated to volumetric soil moisture content via gravimetric methods.

Read More
High Resolution Thermal Camera with Raspberry Pi and MLX90640

Thermal cameras are similar to standard cameras in that they use light to record images. The most significant distinction is that thermal cameras detect and filter light such that only the infrared region of the electromagnetic spectrum is recorded, not the visible region [read more about infrared cameras here]. Shortly after the discovery of the relationship between radiation and the heat given off by black bodies, infrared detectors were patented as a way to predict temperature via non-contact instrumentation. In recent decades, as integrated circuits shrink in size, infrared detectors have become commonplace in applications of non-destructive testing, medical device technology, and motion detection of heated bodies. The sensor used here is the MLX90640 [datasheet], which is a 768 pixel (24x32) thermal camera. It uses an array of infrared detectors (and likely filters) to detect the radiation given off by objects. Along with a Raspberry Pi computer, the MLX90640 will be used to map and record fairly high-resolution temeperature maps. Using Python, we will be able to push the RPI to its limits by interpolating the MLX90640 to create a 3 frame-per-second (fps) thermal camera at 240x320 pixel resolution.

Read More
MPS20N0040D Pressure Sensor Calibration with Arduino

Pressure is defined as an evenly distributed force acting over a surface with a given area. The accurate measurement of pressure is essential for applications ranging from material testing to weighing scales, aircraft altitude prediction, and evaluating biological functions in humans relating to respiration and blood flow In this tutorial, a digital pressure transducer and analog pressure manometer will be used to measure gauge pressure - where the analog manometer is used as the calibration tool for the digital pressure sensor. Arduino will be used to read the digital pressure transducer, an MPS20N0040D, and a 3D printed manometer will be used to measure analog pressure manually.

Read More
Force Sensitive Resistors (FSRs) with Arduino

A force sensitive resistor (FSR) is comprised of a conductive polymer material pressed between two electrode layers, giving it the ability to electrically respond to changes in stress and strain. FSRs are often used in ergonomic or rehabilitation applications where pressure is applied from human interaction and the response is recorded or translated. Force sensitive resistors are incredibly useful for human interactivity because of their slim profile, inexpensive construction, and multiplicative geometries. The sensor used in this tutorial is the RP-S40-ST, which is a 40mm x 40mm thin film FSR. An Arduino board will be used to read the analog signals outputted by the FSR in a voltage divider configuration, where the force applied to the FSR can be approximated using the sensor’s calibration curve.

Read More
DIY Arduino Board

A DIY Arduino board is presented here, with most of the capabilities of the classic Arduino Uno board, but with a slimmer profile and more flexibility in hardware. The advantage to using the DIY Arduino board is its ability to change the input voltage (2.7V - 5.5V), the crystal oscillator (0-16MHz), and the use of LEDs and regulators when needed. The DIY board is capable of very lower power modes, without the requirement of draining components such as LEDs or regulators. The ATmega328P chip is at the center of every Uno board (in recent years), and is also at the center of the DIY board, which allows the DIY Arduino to behave almost identically to the Uno board.

Read More
Geographic Visualizations in Python with Cartopy

Cartopy is a cartographic Python library that was developed for applications in geographic data manipulation and visualization. It is the successor to the the Basemap Toolkit, which was the previous Python library used for geographic visualizations. Cartopy can be used to plot satellite data atop realistic maps, visualize city and country boundaries, track and predict movement based on geographic targeting, and a range of other applications relating to geographic-encoded data systems. In this tutorial, Anaconda 3 will be used to install Cartopy and related geographic libraries. As an introduction to the library and geographic visualizations, some simple tests will be conducted to ensure that the Cartopy library was successfully installed and is working properly. In subsequent tutorials: shapefiles will be used as boundaries, realistic city streets will be mapped, and satellite data will be analyzed.

Read More
BLE Nano Arduino Board - Bluetooth Control with an iPhone (BLExAR App)

The BLE Nano is introduced as a hybrid between an Arduino Nano and a CC2540 Bluetooth Low Energy (BLE) module. The Arduino Nano has an ATmega328P as its main microprocessor, which communicates over the serial port to send and receive Bluetooth packets from the CC2540 BLE chip. This creates a Bluetooth-enabled Arduino device - encased in a Nano-sized circuit board! Using the BLExAR iOS app, the BLE-Nano will be controlled using an iPhone. BLExAR allows users to control the pins on the Nano, which will be demonstrated by switching an RGB LED on and off.

Read More
Visualizing COVID-19 Data in Python

This blog post is aimed at creating meaningful visualizations that may or may not be available elsewhere, while instructing users on how to source, analyze, and visualize COVID-19 infection case and rate data using Python. All of the data used herein is publicly available for anyone interested in replicating the figures, with code and links where necessary. The methods used here have been uniquely conceived and developed by Maker Portal, and in no way reflect preferred methods of either the government or any other private entities. Several Python toolboxes will be implemented below, and it is recommended that users install and verify their functionality before attempting to replicate the forthcoming figures.

Read More
Radar Emulator with Arduino + Python

In this tutorial, an ultrasonic sensor (HC-SR04) will be used in place of a radio emitter; and a plan position indicator will be constructed in Python by recording the angular movements of a servo motor. An Arduino board will both record the ranging data from the ultrasonic sensor while also controlling and outputting the angular position of the servo motor. This will permit the creation of a PPI for visualizing the position of various objects surrounding the radar system.

Read More
Arduino Breathing LED Functions

In this tutorial - an Arduino board will be used in conjunction with an RGB LED to investigate several ways of replicating the breathing LED effect. Using the equation for a triangular wave, circular wave, and Gaussian wave, a breathing LED will be constructed. The amount of code needed for the simplest breathing LED is as little as two lines of code, while the more complex breathing functions grow in difficulty from there.

Read More
Raspberry Pi Camera Panning with a Servo Motor

In this tutorial, the RPi is used to demonstrate pulse-width modulation (PWM) and apply it to servo motor control. Then, the servo is used to control the panning of a camera - which is also controlled by the native camera port on the Raspberry Pi. This tutorial is a simple introduction that can be expanded into a full 360° controllable camera project, or a project involving a robotic arm, or any project involving servo motors or PWM-controlled devices.

Read More
Arduino Servo Motor Basics and Control

In this tutorial, an Arduino board will be used to power and control a small servo motor. The basics and composition of an SG90 will be explored, and the application of several servo codes and applications will be given for another type of servo motor, the MG90S. The goal of this project is to introduce users into the workings of a servo motor, how PWM (pulse-width modulation) controls a servo motor, and how Arduino can interface with servo motors to produce desired movements to great precision.

Read More
Google Trends x Yahoo Finance Analysis in Python

Python has a multitude of libraries dedicated to scraping the internet in various ways. For example, Google Trends is a product produced by Google that analyzes search history and publishes the popularity of search terms over time. One user created an algorithm to pull trend data from Google using Python in a package called pytrends. Another such library uses Python to pull stock information from Yahoo Stocks in a package called yfinance. Both of these libraries will be used to plot and compare finance and trend data over time using Python scripts. The methods outlined in this tutorial could be applied to areas in finance, data analytics, and data visualization in general.

Read More
Controlling Arduino Pins from the Serial Monitor

In this tutorial, another method of control is introduced that involves manual control using input from the serial monitor. This means each pin can be turned on or off using the human input to the serial monitor. An RGB LED is used to demonstrate the capability of serial monitor control, where each color of the LED is controlled individually using dedicated Arduino pins.

Read More
Python FTP for Data Mining and Analysis

Python’s file transfer protocol (FTP) library is used to parse weather station data from the publicly available automated surface observing system (ASOS) from the U.S.A.’s National Climatic Data Center (NCDC). Several programmatic tools available in Python are used to automate the parsing of weather data, as well as visualizing the resulting data.

Read More
PCBWay Printed Circuit Board Prototype Service

PCBWay is a printed circuit board (PCB) and printed circuit board assembly (PCBA) manufacturer and company that focuses on prototyping and low-volume production. Makers can take advantage of their services by placing orders ranging from 5 pieces to get your project started, and scale up as your product comes to fruition. With more than a decade in the field, PCBWay is committed to meeting the needs of engineers and makers from across a multitude of industries.

Read More
Joshua HriskoComment