瑞芯微Rockchip开发者社区
直播中

chumowei

9年用户 703经验值
擅长:电源/新能源
私信 关注
[经验]

求一种基于RK2206开发板的智慧井盖设计案例

硬件资源

EEPROM 24C02的设备地址为:0x1010001* ; 六轴传感器 MPU6050 的设备地址为:0x1101000*

硬件接口说明

引脚名称开发者可在硬件资源图中查看,也可在智慧井盖模块背面查看。

引脚名称 功能描述
MPU6050_INT MPU6050中断输出
Normal_CTR LED控制线,低电平有效
Tilt_Warning_CTR LED控制线,低电平有效
I2C_SCL I2C时钟信号线
I2C-SDA I2C数据信号线
GND 电源地引脚
3V3 3.3V电源输入引脚
GND 电源地引脚

硬件设计

模块整体硬件电路中包含了E53接口连接器,EEPROM存储器、MPU6050传感器,LED指示灯电路,其中EEPROM存储器、MPU6050传感器为数字接口芯片,直接使用I2C总线控制,电路简单,本文不再过多说明。

硬件连接

小凌派开发板与模块均带有防呆设计,故很容易区分安装方向,直接将模块插入到开发板的E53母座接口上即可,

程序设计

API分析

MPU6050寄存器手册 /vendor/lockzhiner/lingpi/docs/datasheet/sensor/MPU-6000 and MPU-6050 Register Map and Descriptions.pdf

头文件:

/vendor/lockzhiner/lingpi/samples/e53_smart_city/include/e53_smart_city.h

e53_sc_init()

void e53_sc_init();

描述:

E53智慧井盖模块初始化,包括初始化I2C0、LED1灯GPIO、LED2灯GPIO;初始化MPU6050传感器。

参数:

返回值:

mpu6050_write_reg()

void mpu6050_write_reg(uint8_t reg, uint8_t data);

描述:

E53智慧井盖模块MPU6050传感器写寄存器。

参数:

名字 描述
reg 寄存器
data 写入的寄存器值

返回值:

mpu6050_read_data()

void mpu6050_read_data(uint8_t reg, unsigned char *buf, uint8_t length);

描述:

E53智慧井盖模块MPU6050传感器读寄存器。

参数:

名字 描述
reg 寄存器
buf 读寄存器缓冲区指针
length 读寄存器长度

返回值:

MPU6050_Read_Buffer()

uint8_t MPU6050_Read_Buffer(uint8_t reg, uint8_t *p_buffer, uint16_t length);

描述:

E53智慧井盖模块读取多个MPU6050寄存器值。

参数:

名字 描述
reg 寄存器
p_buffer 读缓冲区指针
length 读取寄存器长度

返回值:

返回值 描述
0 成功
非0值 失败,返回错误值

mpu6050_read_acc()

void mpu6050_read_acc(short *acc_data);

描述:

E53智慧井盖模块读取MPU6050的角速度数据。

MPU6050_ACC_OUT角速度数据寄存器,只读,包括X轴、Y轴和Z轴。

参数:

名字 描述
acc_data 读取的角速度数据指针,包括X轴、Y轴、Z轴数据

返回值:

mpu6050_read_id()

uint8_t mpu6050_read_id();

描述:

E53智慧井盖模块读取MPU6050的ID,读取值为0x68返回成功;否则,返回失败。

MPU6050_RA_WHO_AM_I寄存器,只读,默认值0x68。

参数:

返回值:

返回值 描述
0 失败
1 成功

mpu6050_init()

void mpu6050_init();

描述:

E53智慧井盖模块初始化MPU6050传感器。

MPU6050_RA_PWR_MGMT_1电源管理寄存器,DEVICE_RESET复位唤醒传感器。
MPU6050_RA_INT_ENABLE中断使能寄存器,中断控制。
MPU6050_RA_USER_CTRL用户控制寄存器,关闭I2C主模式。
MPU6050_RA_FIFO_EN FIFO使能寄存器,关闭FIFO。
MPU6050_RA_INT_PIN_CFG INT管脚/旁路控制寄存器。

MPU6050_RA_CONFIG配置寄存器,配置为外部引脚采样,DLPF数字低通滤波器。

MPU6050_RA_ACCEL_CONFIG加速配置寄存器,配置加速度传感器量程和高通滤波器。

参数:

返回值:

e53_sc_read_data()

void e53_sc_read_data(e53_sc_data_t *p_data);

描述:

E53智慧井盖模块读取传感器数据。

参数:

名字 描述
data 读取的传感器数据指针,包括X轴、Y轴、Z轴数据

返回值:

led_d1_set()

void led_d1_set(SWITCH_STATUS_ENUM status);

描述:

E53智慧井盖模块控制LED1告警状态灯开关。

参数:

名字 描述
status LED灯状态,ON:开;OFF:关

返回值:

led_d2_set()

void led_d2_set(SWITCH_STATUS_ENUM status);

描述:

E53智慧井盖模块控制LED2正常状态灯开关。

参数:

名字 描述
status LED灯状态,ON:开;OFF:关

返回值:

主要代码分析

在e53_sc_thread函数中,每2s读取一次传感器数据并打印X轴、Y轴和Z轴数据。首次读取传感器数据时,保存X轴、Y轴和Z轴数据,用于与之后的传感器数据进行对比。当X轴、Y轴和Z轴与第一次读取保存的X轴、Y轴和Z轴数据差值大于100时,认为井盖倾斜,点亮LED2告警状态灯,关闭LED1正常状态灯;否则认为井盖没有倾斜,关闭LED2告警状态灯,打开LED1正常状态灯。

void e53_sc_thread()
{
    e53_sc_data_t data;
    int x = 0, y = 0, z = 0;

    e53_sc_init();
    led_d1_set(OFF);
    led_d2_set(OFF);

    while (1)
    {
        e53_sc_read_data(&data);
        printf("x is %d\n", (int)data.accel[0]);
        printf("y is %d\n", (int)data.accel[1]);
        printf("z is %d\n", (int)data.accel[2]);
        printf("init x:%d y:%d z:%d\n", x, y, z);

        if (x == 0 && y == 0 && z == 0)
        {
            x = (int)data.accel[0];
            y = (int)data.accel[1];
            z = (int)data.accel[2];
        }
        else
        {
            if ((x + DELTA) < data.accel[0] || (x - DELTA) > data.accel[0] ||
                (y + DELTA) < data.accel[1] || (y - DELTA) > data.accel[1] ||
                (z + DELTA) < data.accel[2] || (z - DELTA) > data.accel[2])
            {
                /*倾斜告警*/
                led_d1_set(OFF);
                led_d2_set(ON);
                data.tilt_status = 1;
                printf("tilt warning \nLED1 OFF LED2 On\n");
            }
            else
            {
                led_d1_set(ON);
                led_d2_set(OFF);
                data.tilt_status = 0;
                printf("normal \nLED1 ON LED2 OFF\n");
            }
        }
        LOS_Msleep(2000);
    }
}

编译调试

修改 BUILD.gn 文件

修改 vendor/lockzhiner/lingpi/sample 路径下 BUILD.gn 文件,指定 c2_e53_smart_city 参与编译。

"c2_e53_smart_city",

运行结果

例程代码编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志,串口会打印X、Y、Z轴加速度信息、倾斜告警状态和指示灯状态;倾斜智慧井盖模块开发板,智慧井盖模块上的倾斜状态灯LED2会被点亮。

x is 149
y is 21
z is 1822
init x:144 y:24 z:1819
normal 
LED1 ON LED2 OFF

x is 154
y is 749
z is 1684
init x:144 y:24 z:1819
tilt warning 
LED1 OFF LED2 On

原作者:王小彬 Gitee

更多回帖

发帖
×
20
完善资料,
赚取积分