智能垃圾桶 Linux和树莓派-网络编程(总结)

前期准备:

1.OLED液晶显示模块
2.L9110马达驱动模块
3.HC-SR04超声波模块
4.SG90舵机驱动模块
5.DS18B20温度检测模块
6.树莓派3B

模块原理:

  • OLED液晶显示屏:
    液晶显示是点阵显示,就是一个一个的点显示在屏幕上,靠这些点的亮灭组合来完成我们想要的目标。
    1.那么我们 要想显示就得先创建一个用来初始化屏幕的数组。
    2.我们创建一个能显示内容在屏幕上的数组。
    3.创建一个函数使数组内容能显示在液晶屏上。

  • L9110马达驱动模块:
    L9110驱动马达原理就是改变引脚高低电平的变化,使电机驱动,改变BWM 控制转速。

  • HC-SRO4超声波:
    (1)采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号;
    (2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
    (3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

  • SG90舵机
    1.初始化引脚
    2.创建一个使舵机转到90的pwm输出信号
    3.将pwm输出复写为使舵机转到0

  • DS18B20 温度显示模块
    读取在"/sys/bus/w1/devices/cd 28-00000xxx"目录下的 w1_slave 来获取温度

  • 树莓派3B
    wiringPi 库的使用。

具体实现:

1.在Linux上创建客户端,树莓派上创建服务端
2.Linux上发送指令,树莓派接受
3.树莓派执行指令使垃圾桶移动

遇到难点,如何攻克

1.在树莓派上创建多线程实现垃圾桶的移动和温度显示还有垃圾桶盖自动打开的过程中,多线程之间的关系不知道怎么处理。  

	如何解决: 感觉线程之间没什么关系,所以就简单的创建了多个线程,并没用到锁的互斥和条件判断。(好像是没解决 ,哈哈)

2.Linux远程控制垃圾桶移动时总会发生树莓派的断开连接。

	如何解决:马达供电不足,单独给L9110模块供电就可以了。(还是困扰了我好一会的)

3.OLED上显示温度有时会乱码,有时又不会 。
	
	如何解决:没解决 ,总感觉是模块的问题。

多线程的原理

1.在一个进程里创建多个线程来处理不同或相同的事
2.父子进程的调用

像在这次的智能垃圾桶项目里,就是在树莓派上创建多个线程,分别做垃圾桶的移动、盖子的智能开关、温度显示。

你可能感兴趣的:(Linux,树莓派,c语言)