本周我们做了智能清洁桶项目,该项目主要实现以下功能
避障小车模式:
1.避障移动
清洁桶模式:
1.手伸过去,自动把盖子打开
2.屏幕显示状态
3.检测湿温度
4.远程控制,tcpip发送控制命令
涉及到的模块有:
1.树莓派主控
2.oled显示屏
3.超声波模块
4.湿温度传感器
5.S90舵机
6.马达和轮子
7.清洁桶
架构:
远程控制服务度:
树莓派
远程控制客户端:
linux虚拟机
模块对应功能
1.oled显示屏
(1)温湿度
(2)时间
(3)树莓派IP
(4) made in zcc
2.超声波模块
1.识别手扔垃圾的动作
2.识别障碍物
3.温湿度传感器
(1).读取当前环境的温湿度
4.SG90舵机
(1)打开清洁桶的盖子
5.马达和轮子
(1)通过热熔胶黏在筒底部
设计到的知识点:
1.多线程及锁
2.tcpip网络编程
3.文件操作-日志模块
以上是需要实现的具体功能,接下来我描述下我具体实现的方法:
1.实现oled显示屏:
初始化oled屏:
unsigned char yi[4][16] = {
"Hello world! ",
" ",
" 172.20.10.10 ",
" made in zcc "
};
const unsigned char zi[];
void init(void)
{
wiringPiSetup();
fd = wiringPiI2CSetup(0x3c);
wiringPiI2CWriteReg8(fd, 0x00, 0xa1);
wiringPiI2CWriteReg8(fd, 0x00, 0xc8);
wiringPiI2CWriteReg8(fd, 0x00, 0x8d);
wiringPiI2CWriteReg8(fd, 0x00, 0x14);
wiringPiI2CWriteReg8(fd, 0x00, 0xa6);
wiringPiI2CWriteReg8(fd, 0x00, 0x21);
wiringPiI2CWriteReg8(fd, 0x00, 0x00);
wiringPiI2CWriteReg8(fd, 0x00, 0x7f);
wiringPiI2CWriteReg8(fd, 0x00, 0xaf);
}
void qingping(){
char zt1,zt2;
for(zt1=0;zt1<8;zt1++)
{
wiringPiI2CWriteReg8(fd,0x00,0xb0+zt1);
for(zt2=0;zt2<128;zt2++) wiringPiI2CWriteReg8(fd,0x40,0x00);
}
}void ascii(void)//显示ASCII码8*16{
int zt;
char zt3,zt4;
for(zt3=0;zt3<4;zt3++)
{
wiringPiI2CWriteReg8(fd,0x00,0xb0+(zt3*2));
for(zt4=0;zt4<16;zt4++)
for(zt=0;zt<8;zt++)
wiringPiI2CWriteReg8(fd,0x40,zi[yi[zt3][zt4]*16+zt]);
wiringPiI2CWriteReg8(fd,0x00,0xb0+(zt3*2)+1);
for(zt4=0;zt4<16;zt4++)
for(zt=0;zt<8;zt++)
wiringPiI2CWriteReg8(fd,0x40,zi[yi[zt3][zt4]*16+zt+8]);
}
}
获取时间:
void shijian(void)//当前时间{
struct tm *ptr;
time_t lt;
lt=time(<);
ptr=localtime(<);
strftime(yi[1],16,"%m/%d %a