Wish List 0

M5Stack Unitv Kendryte K210 Ai Vision Processing Camera Module Image Recognition

Rs. 2,478.00 Rs. 2,825.00

M5Stack recently launched the new AIoT(AI+IoT) Camera powered by Kendryte K210 -an edge computing system-on-chip(SoC) with dual-core 64bit RISC-V CPU and advanced neural network processor.

M5StickV AI Camera possesses machine vision capabilities, equips OmniVision OV7740 image sensor, adopts OmniPixel®3-HS technology, provides optimum low light sensitivity, supports various vision identification capabilities. (e.g. Real-time acquisition of the size, type and coordinates of the detected target ) In addition to an OV7740 sensor, M5StickV features more hardware resources such as a speaker with built-in I2S Class-D DAC, IPS screen, 6-axis IMU, 200mAh Li-po battery, and more.

It is able to perform convolutional neural network calculations at low power consumption, so M5StickV will be a good zero-threshold machine vision embedded solution. It is in support with MicroPython, which makes your code to be more concise when you use M5stick-V for programming.


Power switch operation:
-Power on  :Long press power button for 2 seconds
-Power off :Short press power button for 6 seconds


SPECIFICATION
Resources Parameter     KPU Parameter 
Kendryte                K210Dual core 64-bit RISC-V RV64IMAFDC (RV64GC) CPU / 400Mhz(Normal)
SRAM                    8Mbit
Flash                   16M
Power input             5V @ 500mA
Size of neural network  5.5MiB - 5.9MiB
Port                    TypeC x 1, GROVE(I2C+I/0+UART) x 1
RGB                     LED RGBW x 1
Button                  Custom button x 2
IPS screen              1.14 TFT, 135*240, ST7789
Camera                  OV7740
FOV                     55deg
PMU                     AXP192
Battery                 200mAh
External storage        TF Card/Micro SD
MEMS                    MPU6886

OVERVIEW:

-Dual-Core 64-bit RISC-V RV64IMAFDC (RV64GC) CPU / 400Mhz(Normal)

-Dual Independent Double Precision FPU

-Neural Network Processor(KPU) / 0.8Tops

-Field-Programmable IO Array (FPIOA)

-Dual hardware 512-point 16bit Complex FFT

-SPI, I2C, UART, I2S, RTC, PWM, Timer Support

-AES, SHA256 Accelerator

-Direct Memory Access Controller (DMAC)

-Micropython Support

-Firmware encryption support

-Case Material: PC + ABS

PACKAGE INCLUDES:

1 PCS x M5Stack Unit V Ai Vision Processing Camera Module Image Recognition

1 PCS x USB Type-C(100cm)

//SOURCE CODE TAKEN BELOW LINK

//https://github.com/m5stack/M5-ProductExampleCodes/blob/master/App/UnitV/track_ball/track_ball.ino


#include <M5StickC.h>


HardwareSerial VSerial(1);


typedef struct

{

    int16_t dx;

    uint32_t area;

}v_response_t;



uint8_t I2CWrite1Byte(uint8_t Addr, uint8_t Data)

{

    Wire.beginTransmission(0x38);

    Wire.write(Addr);

    Wire.write(Data);

    return Wire.endTransmission();

}


uint8_t I2CWritebuff(uint8_t Addr, uint8_t *Data, uint16_t Length)

{

    Wire.beginTransmission(0x38);

    Wire.write(Addr);

    for (int i = 0; i < Length; i++)

    {

        Wire.write(Data[i]);

    }

    return Wire.endTransmission();

}


uint8_t Setspeed(int16_t Vtx, int16_t Vty, int16_t Wt)

{

    int16_t speed_buff[4] = {0};

    int8_t speed_sendbuff[4] = {0};


    Wt = (Wt > 100) ? 100 : Wt;

    Wt = (Wt < -100) ? -100 : Wt;


    Vtx = (Vtx > 100) ? 100 : Vtx;

    Vtx = (Vtx < -100) ? -100 : Vtx;

    Vty = (Vty > 100) ? 100 : Vty;

    Vty = (Vty < -100) ? -100 : Vty;


    Vtx = (Wt != 0) ? Vtx * (100 - abs(Wt)) / 100 : Vtx;

    Vty = (Wt != 0) ? Vty * (100 - abs(Wt)) / 100 : Vty;


    speed_buff[0] = Vty - Vtx - Wt;

    speed_buff[1] = Vty + Vtx + Wt;

    speed_buff[3] = Vty - Vtx + Wt;

    speed_buff[2] = Vty + Vtx - Wt;


    for (int i = 0; i < 4; i++)

    {

        speed_buff[i] = (speed_buff[i] > 100) ? 100 : speed_buff[i];

        speed_buff[i] = (speed_buff[i] < -100) ? -100 : speed_buff[i];

        speed_sendbuff[i] = speed_buff[i];

    }

    return I2CWritebuff(0x00, (uint8_t *)speed_sendbuff, 4);

}


void setup()

{

    M5.begin();

    M5.Lcd.setRotation(3);

    M5.Lcd.fillScreen(RED);


    VSerial.begin(115200, SERIAL_8N1, 33, 32);

    Wire.begin(0, 26);

}


enum

{

    kNoTarget = 0,

    kLeft,

    kRight,

    kStraight,

    kTooClose

};


const uint16_t kThreshold = 20; // If target is in range ±kThreshold, the car will go straight

v_response_t v_data;    // Data read back from V

uint8_t state = 0;  // Car's movement status


void loop()

{

    VSerial.write(0xAF);


    if(VSerial.available())

    {

        uint8_t buffer[5];

        VSerial.readBytes(buffer, 5);

        v_data.dx = (buffer[0] << 8) | buffer[1];

        v_data.area = (buffer[2] << 16) | (buffer[3] << 8) | buffer[4];


        if(v_data.dx > -120 && v_data.dx < 120)

        {

            if(v_data.area > 10000)

            {

                state = kTooClose;  // Stop

            }

            else if(v_data.dx > -kThreshold && v_data.dx < kThreshold)

            {

                state = kStraight;  // Go straight

            }

            else if(v_data.dx <= -kThreshold)

            {

                state = kLeft;  // Go left

            }

            else if(v_data.dx >= kThreshold)

            {

                state = kRight; // Go right

            }

            else

            {

                state = kNoTarget;  // Rotate

            }

            M5.Lcd.fillScreen(GREEN);

        }

        else

        {

            state = kNoTarget;  // Rotate

            M5.Lcd.fillScreen(RED);

        }


        Serial.printf("%d, %d, %d\n", v_data.dx, v_data.area, state);

    }


    //The speed and time here may need to be modified according to the actual situation

    switch(state)

    {

        case kNoTarget:

            Setspeed(0, 0, 20); //Duty ratio ±100

            delay(20);

            Setspeed(0, 0, 0);

        break;


        case kLeft:

            Setspeed(-20, 0, 0);

            delay(20);

            Setspeed(0, 0, 0);

        break;


        case kRight:

            Setspeed(20, 0, 0);

            delay(20);

            Setspeed(0, 0, 0);

        break;


        case kStraight:

            Setspeed(0, 20, 0);

            delay(20);

            Setspeed(0, 0, 0);

        break;


        case kTooClose:

            Setspeed(0, 0, 0);

        break;


    }

}

15 days 

Write a review

Please login or register to review