Mohamed Ali Bedair
Published © MIT

Wind Turbine Predictive Maintenance and Remote Monitoring

Collecting information from remote devices like wind turbines is a challenge so we are enabling the monitoring of Wind Turbine.

IntermediateShowcase (no instructions)Over 1 day500
Wind Turbine Predictive Maintenance and Remote Monitoring

Things used in this project

Hardware components

AVR IoT Mini Cellular Board
Microchip AVR IoT Mini Cellular Board
×1
6 DOF Sensor - MPU6050
DFRobot 6 DOF Sensor - MPU6050
×1
Li-Ion Battery 1000mAh
Li-Ion Battery 1000mAh
×1
Custom PCB
Custom PCB
×1
Jumper wires (generic)
Jumper wires (generic)
×1
Motor Encoder
×1
DC motor (generic)
×1

Software apps and online services

Arduino IDE
Arduino IDE
STMicroelectronics STM32CubeMonitor
Eclipse IoT Mosquitto

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
Solder Flux, Soldering
Solder Flux, Soldering

Story

Read more

Schematics

System Block Digram

End-Node Schematic

STM32CubeMonitor

The STM32CubeMonitor project for the GUI

Code

Main Arduino File

C/C++
The project code run mainly from three contexts
- Vibration processing task : which is responsible for reading the vibration status, this function gets excepted every 100ms.
- Send Data Task: which is responsible for sending the data to the MQTT Broker using the LTE connectivity.
- Motor Encoder Call back: which gets executed with every event from the Motor Encoder.
#include "UserApp.h"
#include <TimerEvent.h>

TimerEvent VibrationTaskTimer;
TimerEvent DataSendTaskTimer;

void setup() 
{
  UserApp_Init();

  VibrationTaskTimer.set(VIBRATION_PROCESSING_TASK_PERIODICITY, UserApp_Vibration_Processing_Task);
  DataSendTaskTimer.set(DATA_SEND_TASK_PERIODICITY, UserApp_Data_Send_Task);
}

void loop() 
{
  VibrationTaskTimer.update();
  DataSendTaskTimer.update();
}

MPU6050 Driver

C/C++
I've tried to use the already existing Arduino Libraries for MPU6050, but all of them failed to read the correct data from the sensor, so I had to write my own library for the MPU6050
class MPU6050
{
    public:
        MPU6050();
        ~MPU6050();

        void begin(uint8_t i2c_address, TwoWire *i2c_bus);
        void Read_Gyro (SensorData_t* gyro);
        void Read_Accel(SensorData_t* accel);
        void Read_Temperature(int16_t* temperature);
        void MPU60x0_Set_GyroRange(MPU60x0_GyroRange_T range);
        void MPU60x0_Set_AccelRange(MPU60x0_AccelRange_T range);


    

    private:
        uint8_t ReadReg (uint8_t MemAddress);
        void WriteReg(uint8_t MemAddress, uint8_t data);


        TwoWire *I2C_Bus;
        uint8_t I2C_Address;

};

Full project code

This Github Repo contains the code for the EndNode and the STM32CubeMonitor Project

Credits

Mohamed Ali Bedair

Mohamed Ali Bedair

4 projects • 3 followers
Engineer/Maker

Comments