基于树莓派的智能垃圾桶项目
预计所需要实现的功能
通过感应能够实现垃圾桶盖子的自动开关。
垃圾桶上装载OLED屏,屏幕上需要显示,温度,时间。
远程控制通过电脑端实现控制垃圾桶的移动。
功能模块:
1树莓派3B开发板一块
2OLED显示屏一块
3超声波模块
4SG90舵机
5直流电机,轮子,电机驱动板
6清洁桶
关于各种树莓派API可以查看
https://www.cnblogs.com/lulipro/p/5992172.html
程序代码:
服务端程序(写在树莓派上的)
include <stdio.h>
#include <netinet/in.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <pthread.h>
#include <wiringPi.h>
#include "oled.h"
#include "log.h"
#include "chao.h"
#include "xiao.h"
#define echo 27
#define trlg 28
float distant;
#define RANGE 200 // 1 means 100 us , 200 means 20 ms
// 1等于100微妙,200等于20毫秒
void a_open() {
softPwmWrite(3, 5); //将pwm输出复写为使舵机转到0
delay(100);
}
void b_open() {
softPwmWrite(3, 15);
delay(100);
softPwmWrite(3, 15);
}
void *chaoshenbo() {
while (1) {
distant = wiring_distance();
if (distant < 10) {
a_open();
b_open();
}
printf("distance=%.2f\n", distant);
}
return NULL;
}
int main(int a, char *avg[]) {
int sock;
int c_fd;
pthread_t t1;
pthread_t t2;
pthread_t t3;
softPwmCreate(3, 15, RANGE);
wiringPiSetup();
wiring_init();
che_init();
struct Msg *rec = (struct Msg *)malloc(sizeof(struct Msg));
log_creat();
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror("socker failed:\n");
exit(-1);
}
struct sockaddr_in addr1;
memset(&addr1, 0, sizeof(addr1));
addr1.sin_family = AF_INET;
addr1.sin_port = htons(atoi(avg[1]));
inet_aton("192.168.43.215", &addr1.sin_addr);
int on = 1;
sets