智能灭火小车

基于嵌入式Linux的智能灭火小车php

1、项目背景

  现在,火灾在生活中是很是广泛的,它被称为三大天然灾害之一。消防人员时时刻刻冲到第一线,每个人都冒着生命的危险,在这种背景之下,咱们小组基于嵌入式Linux”的设计,作了一辆智能灭火小车,在必定的程度上实现了对安全安全防御的质的提升,也下降了消防人员的危险。java

2、设计原理

1. 智能灭火小车的设计原理及思路python

  经过Arduino UNORPI两大开源硬件搭建一个能够远程控制的平台,在这个地方不考虑成本为题。RPI做为链接物联网微型计算机,主要负责链接网络,Arduino做为主控芯片,控制小车行驶和检测火光;一样咱们也根据不一样的工做坏境分别编写了AndroidQT,二者的链接原理基本相同,主要是在树莓派上写一个socket服务器,AndroidQT分别写一个socket客户端,两边约定好相同的指令(例如本次在Android上是把“Forward”定义向前),客户端负责发送,树莓派负责接收命令,而后再向Arduino UNO下发相应的命令。流程以下:linux

3、树莓派微型计算机的搭建

  树莓派板载没有配置FLASH,因此支持SD卡启动,所以须要下载相应的镜像,并将其烧录在SD卡上,启动系统便可。利于方便开发,咱们须要对树莓派进行远程操做,经常使用的远程控制主要有如下三种:git

(1) 远程桌面:Windows自带的远程桌面控制,知道树莓派链接网络的IP,即可以对树莓派进行远程操做;编程

(2) VNCVNCLinux下最经常使用的远程桌面,它能够在WindowsUinx的主机上经过网络远程主机,不须要额外的显示器。一样须要知道IP和配置的密码;windows

(3) SSHSSH经过在网络中建立安全隧道来实现SSH客户端与服务器之间的链接。任何网络服务均可以经过SSH实现安全传输,SSH最多见的用途是远程登陆系统,可利用SSH来传输命令行界面和远程执行命令;安全

(4) 树莓派的默认帐户和密码分别是:piraspberry服务器

4、树莓派与Arduino串口通信

1. drduino IDE的安装网络

     Arduino开发环境搭建比较简单,在Arduino官网下载相应的安装包,根据提示即可以完成安装。搭建的途中若是遇到没法运行,能够先搭建JAVA的开发环境,进行JDK变量配置。启动IDE,进入初始化界面,

2.串口驱动

     Arduino驱动程序在Arduino IDEdrivers文件夹下,也能够在官网下载;在MACOSLinux系统下,均是不要驱动程序的,你只需直接插上,便可使用。但在Windows系统中,你须要为Arduino安装驱动配置文件,才可正常驱动Arduino。找到下载IDE的安装包,进入drivers文件夹,找到驱动双击计算机会自动完成,双击是注意本身的操做系统是多少位的。提供的有32位和64位。驱动安装成功后,当串口链接电脑会显示串口设备,以下图:显示Arduino所链接的串口号。

 

3.安装Python

   本次的设计中,嵌入式Linux中主要的语言是Python语言,所以须要搭建Python语言环境,树莓派部分镜像中已经搭建好的,此处即可以忽略。安装步骤以下:

$ sudo apt-get update

$ sudo apt-get install python

4.安装PythonGPIO模块

  GPIO (General Purpose Input/Output) 的意思就是通用型输入输出,GPIO模块库是Python的第三方库,利用该库进行树莓派的引脚控制,在编程时,须要选择编号系统,对于Python GPIO,能够选择两种编号系统,分别是:BCMBOARD该项目选用BCM。编码格式为:GPIO.setmod(GPIO.BCM)GPIO.setmod(GPIO.BOARD)

GPIO库安装步骤:

$ Wget https://sourceforge.net/projects/raspberry-gpio-python/files/RPi.GPIO-0.6.2.tar.gz

$ tar xvzf RPi.GPIO-0.6.2.tar.gz  

$ cd RPi.GPIO-0.6.2  

$ sudo python setup.py install  

5.安装serial

$ sudo apt-get install python-serial

到此,树莓派与ArduinoUSB串口通讯便完成,通过测试能够通讯。测试部分以下:

(1) 先在IDE中编写通信代码,上传代码到Arduino中,USB与树莓派链接。通信代码:

 

(2) 树莓派端:

 

 

 在树莓派终端运行程序,树莓派向Arduino发送一个字符‘s’Arduino向树莓派回复字符串“hello raspberryI am Arduino”

、程序功能的实现

1. 小车行驶控制

      L298N模块能够直接驱动两路直流电机,控制电机须要使用该模块的三个端口:使能端、方向端IN1和IN2,使能端高电平是电机才能转动,IN1IN2一高一低控制方向的正转和反转。采用数字针脚控制小车的正反转,采用PWM针脚控制使能端。DigitalWarite()函数是Arduino自带的函数,能够在Arduino相应的针脚写入高电平或低电平灭火小车行驶部分代码:

 

 

 

2. 舵机和抽水电机的控制

    舵机为可旋转180度的9G舵机,三线制,能够直接驱动,无需驱动电路。抽水电机的最大电流为100毫安,工做电流为80毫安,Arduino引脚电流为40毫安,不能直接驱动,采用三极管放大电流驱动。舵机的旋转位置由定义的pos控制,90度为舵机的正中位置,抽水电机低电平关闭,高电平打开

驱动程序以下:

#include <Servo.h>    // 声明调用Servo.h

Servo myservo;        // 建立一个舵机对象

myservo.attach(3);    //控制舵机的引脚

int pos = 90;         //舵机初始化位置

int shui = 9;         //抽水机控制引脚

3. 火光实时检测

  该部分使用火焰传感器实现,检测到火光是,数据的模拟值会急速变小,能够根据这一特性肯定是否周边有火光。当检测到火光是,抽水机的针脚自动改成高电平,到达灭火的功能。部分程序设计以下:

num=(analogRead(A0));//串口发送模拟电压值

  if(num<100)

{

    digitalWrite(shui, HIGH);

}

4. arduino接收串口数据:

if(Serial.available()){     //即能接收到串口传来的信息

String ans = Serial.readString();

5. 树莓派接收数据和获取IP

  这里采用网络编程中的Socket套接字,绑定端口和IP到达通讯。通讯协议采用TCP协议。Python语言实现,具体以下:

 

 

 

 

6. 系统IP地址

、电路设计部分

1. 稳压电路

稳压电路是保证智能小车可靠运行的基础。该系统中电源负责控制中心和外围设备提供能源并未车轮电机提供动力。供电质量的高低直接影响整个系统的稳定性。交流转直流的电源适配器显然不适合用于轮式智能小车。考虑到系统中点击驱动电源为12.6V,其电源能够经过电压变换获得,设计选用一节输出电压12.6V,容量为2000mAh的可充电锂电池做为系统供电电源。外围器件所需5V电源可经过LM2596S稳压芯片(DC-DC直流可调降压电源模块稳压板3A 12/2412/5/3.3V)获得,由于外围元器件少,LM2596S稳压芯片,使用方便,可靠性高,价格便宜。

2. 树莓派

它像是一台运行Linux 系统的台式计算机或者便携式计算机那样,利用Raspberry Pi 能够作不少事情。固然,也不免有一点点不一样。普通的计算机主板都是依靠硬盘来存储数据,可是Raspberry Pi 来讲使用SD 卡做为硬盘,你也能够外接USB 硬盘利用Raspberry Pi 能够编辑Office 文档、浏览网页、玩游戏即便玩须要强大的图形加速器支持的游戏也没有问题,如刺激战场。

Raspberry Pi 的低价意味着其用途更加普遍,将其打形成卓越的多媒体中心也是一个不错的选择。

 

树莓派

 

 

3. 电机驱动模块

(1) 应用范围

L298N是一种高电压,大电流电机驱动芯片。该芯片采用15脚封装。主要特色是:工做电压高,峰值工做电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工做电流为2A;额定功率为25W。内含两个H桥的高电压大电流全桥式驱动器,能够用来驱动直流电动机和步进电机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具备两个使能控制端,在不受输入信号影响的状况下容许或禁止器件工做有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工做,能够外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,也能够驱动两台直流。

(2) 产品参数

漠块名称  H桥电机驱动模块

主控芯片  L298N

逻辑电压  5V

逻辑电流  0-36mA

存储温度  -20摄氏度至+135摄氏度

工做模式  H桥驱动(双路)

驱动电压  5V-35V

驱动电流  2A(MAX单桥)

峰值功率  25W

模块尺寸  44* 44mm

4. 传感器的选择

(1) 原理

火焰传感器;由各类燃烧生成物、中间物、高温气体、碳氢物质以及无机物质为主体的高温固体微粒构成的。火焰的热辐射具备离散光谱的气体辐射和连续光谱的固体辐射。不一样燃烧物的火焰辐射强度、波长分布有所差别,但整体来讲,其对应火焰温度的近红外波长域及紫外光域具备很大的辐射强度,根据这种特性可制成火焰传感器。

(2) 功能

火焰传感器是机器人专门用来搜寻火源的传感器,固然火焰传感器也能够用来检测光线的亮度。火焰传感器利用红外线对对火焰很是敏感的特色,使用特制的红外线接受管来检测火焰,而后把火焰的亮度转化为高低变化的电平信号,输入到中央处理器中,中央处理器根据信号的变化作出相应的程序处理

5. ARDUINO模块

(1) 功能与特色

能够快速使用ArduinoAdobe Flash, processing, Max/MSP, Pure Data, SuperCollider等软件结合,做出互动做品。 Arduino可使用现有的 电子元件例如开关或者传感器或者其余控制器件、 LED、步进马达或其余输出装置。

特色跨平台、简单清晰、开放性、发展迅速。

6. 舵机和测速码盘

(1) 舵机特色稳定性、耐用性、扭矩大、速度快、高精度、用途普遍。

(2) 测速码盘

采用槽型对射光电传感器,它由一个红外发光二极管和一个NPN光电三极管组成,槽宽度为5.9mm,只要非透明物体经过槽型便可触发输出TTL低电平。采用施密特触发器去抖动脉冲,很是稳定,可用于小车测转速,测距离等等应用,两端带M3螺丝安装孔。

(3) 产品参数

工做电压:3.3V-5V

输出形式:数字开关量OUT输出(01

7. PCB电路制做

(1) PCB做用

电子设备采用印制板后,因为同类印制板的一致性,从而避免了人工接线的差错,并可实现电子元器件自动插装或贴装、自动焊锡、自动检测,保证了电子设备的质量,提升了劳动生产率、下降了成本,并便于维修。

(2) KiCad

KiCad是一种免费、开源的EDA设计工具,它可以建立电路原理图并进行PCB布局布线,它具备一个集成化的开发环境,在其之下KiCad包含了以下很是精致、独立的软件工具。

(3) KiCad设计的PCB板图

3D PCB查看功能基于VRML模型,能够导出板模型以进行CAD集成。KiCad对板子的大小没有限制,很容易支持到32铜层的电路板,到最多14层技术层和最多4层附加层。它可以产生用于生产制造PCB板的全部必要文件:用于光绘的Gerber文件、钻孔文件、元器件定位文件等等。

8. 原理图的制做流程

 

(1) 新建工程

一个项目通常不止一个文件,须要建立工程统一管理这些文件。依此点击文件>new project>new projec建立新工程。

2)绘制原理图

首先在kicad上将相应的元器件摆放好合理的位置,画出芯片的各个引脚,链接好相应的IO接口,把剩余的没有用到的接口封闭,检查原理图没有问题。原理图以下图:

 

3)匹配封装 

 

在原理图编辑器中,点击上图从右至左第三个按钮运行匹配封装匹配工具cvpcb,封装匹配好后回到原理图编辑器,点击上图中有“NET”字样的按钮生成网表文件(*.net

4PCB布局和连线

a.读取网络列表;

b.放置原件封装;

c.连线(有过孔的步骤);

d.肯定PCB板的大小;

e.覆铜。

5)导入网表和绘制PCB

运行pcb编辑器;在主界面双击kicad_pcb或点击pcb编辑器也可运行pcb编辑器。在pcb编辑器中,点击“NET”字样的按钮导入网表文件,开始;到此就能获得pcb图了。

6)生成Gerber文件和钻孔文件。

7、QT部分

1. TCP/IP通讯过程

(1) 创建链接阶段

调用socket(),分配文件描述符;

调用connect(),向服务器发送创建链接请求。

(2) 数据交互阶段

调用write(),将请求发送给服务器;

调用read(),阻塞等待服务器应答。

(3) 关闭链接

当没有数据发送的时候,调用close()关闭链接套接字,即关闭链接,向服务器发送FIN数据报。

2. QT实现过程

(1) QT系统的信号与槽机制介绍

信号与槽机制是QT的一个中心特征而且也是QT与其它工具包的最不相同的部分。在图形用户界面编程中,咱们常常但愿一个窗口部件的。一个变化被通知给另外一个窗口部件。更通常地,咱们但愿任何一类的对象能够和其它对象进行通信。较老的工具包使用一种被称做回调的通信方式来实现同一目的。回调是指一个函数的指针,因此若是你但愿一个处理函数通知你的事件,你能够把另外一个函数(回调)的指针传递给处理函数。处理函数在适当的时候调用回调有缺点。首先他们不是类型安全的。咱们历来都不能肯定处理函数使用了正确的参数来调用回调。所以容易形成进程崩溃。

(2) QT界面设计

 本文主要用到UI界面里面的Push Button(按钮)、Line Edit(线性标签)、Text Line Edit(文本标签)、Label(标签)。每一个Push Button分别用来控制小车和喷水,地址和端口标签是服务器的地址和端口,最终的设计界面如图所示:

 

3. QT通讯过程

QT通讯过程是利用TCP/IP通讯的工做流程来实现的,经过Socket链接到服务器,具体步骤以下:

使用QT的网络套接字须要在.pro文件中加入一句:QT += network,还须要加一个头文件#include<QTcpSocket>,定义一个私有的QTcpSocket *socket;

(1) 建立QTcpSocket套接字对象:

socket = new QTcpSocket();

(2) 使用这个对象链接服务器:

ui->lineEdit_IP->setText("127.0.0.12"); ui->lineEdit_Port->setText("8888");

(3) 经过信号与槽,使用write函数向服务器发送数据控制小车和喷水的指令:

void Widget::on_pushButton_qj_clicked()

{

    socket->write("DirForward");//控制小车前进

}

void Widget::on_pushButton_zz_clicked()

{

    socket->write("DirLeft");//控制小车左转

}

void Widget::on_pushButton_yz_clicked()

{

    socket->write("DirRight");//控制小车右转

}

void Widget::on_pushButton_ht_clicked()

{

    socket->write("DirBack");//控制小车后退

}

void Widget::on_pushButton_tz_clicked()

{

    socket->write("DirStop");//控制小车中止

}

void Widget::on_pushButton_djz_clicked()

{

    socket->write("SGLeft");//控制喷水左转

}

void Widget::on_pushButton_djy_clicked()

{

    socket->write("SGRight");//控制喷水右转

}

void Widget::on_pushButton_sg_clicked()

{

    socket->write("WarteOff");//控制喷关

}

void Widget::on_pushButton_sk_clicked()

{

    socket->write("WarteOn");//控制喷水开

}

(4) Socket接收缓冲区有新数据到来时,会发出readRead()信号,所以为该信号添加槽函数以读取数据:

QObject::connect(socket,&QTcpSocket::readyRead,this,&MainWindow::socket_Read_Data);

void MainWindow::socket_Read_Data()

{

    QByteArray buffer;

    //读取缓冲区数据

    buffer = socket->readAll();

}

(5) 断开与服务器的链接close()和disconnectFromHost()

socket->disconnectFromHost();

4. QT键盘事件

QT键盘事件也是经过信号与槽机制实现,经过得到键盘的焦点,并在头文件里面申明键盘#include <QKeyEvent>,在信号与槽里面实现键盘功能:

void Widget::keyPressEvent(QKeyEvent *ev){

    if(ev->key() == Qt::Key_Home)//HOME键控制小车前进

        {

           on_pushButton_qj_clicked();

           return;

        }

    else if(ev->key() == Qt::Key_End) //END键控制小车后退

    {

        on_pushButton_ht_clicked();

        return;

}

else if(ev->key() == Qt::Key_Delete) //Delete键控制小车左转

    {

        on_pushButton_zz_clicked();

        return;

    }

    else if(ev->key() == Qt::Key_PageDown) // PageDown键控制小车右转

    {

        on_pushButton_yz_clicked();

        return;

    }

    else if(ev->key() == Qt::Key_PageUp) // PageUp键控制小车中止

    {

        on_pushButton_tz_clicked();

        return;

    }

    else if(ev->key() == Qt::Key_Q) // Q键控制喷水左转

    {

        on_pushButton_djz_clicked();

        return;

    }

    else if(ev->key() == Qt::Key_W) // W键控制喷水开

    {

        on_pushButton_sk_clicked();

        return;

    }

    else if(ev->key() == Qt::Key_E) // E键控制喷水右转

    {

        on_pushButton_djy_clicked();

        return;

    }

    else if(ev->key() == Qt::Key_S) // S键控制喷水关

    {

        on_pushButton_sg_clicked();

        return;

    }

5. 成功和服务器创建链接的QT客户端

打开服务器和客户端创建链接,保证客户端的IP和端口和服务器的一致,点击链接就会成功的和服务器链接,如图所示是客户端经过键盘发送控制小车和喷水机的指令截图。

 

 

 

 

 

8、Android部分

1. 界面结构

(1) 链接服务器界面是两个线性布局“LinearLayout”、两个“TextView”、两个“EditText”和一个“button”,分别用于输入IP地址界面、输入端口号界面和跳转控制小车运动的界面。

 

(2) 链接服务器后,会跳转到小车的控制界面;在这里面也是由一个线性布局“LinearLayout”,在这里面嵌套了两个相对布局“RelativeLayout”,每个相对布局里面五个“button”,分别定义为向前、向后、向左、向右、close;开水、关水、舵机左、舵机右、shutdown”

 

 

 

 

2.编写过程

(1) java中,主要编写了“MainActivityStartActivityTcpCommandserviceUDPFrameRecService”

 

 

 

  

(2) MainActivity中主要对各类事件进行定义。

    public void initButtons()

    {

        Button buttonDirFor=(Button)findViewById(R.id.buttonDirForward);

        buttonDirFor.setOnTouchListener(new ButtonListener("DirStop","DirForward"));

        Button buttonDirBack=(Button)findViewById(R.id.buttonDirBack);

        buttonDirBack.setOnTouchListener(new ButtonListener("DirStop","DirBack"));

        Button buttonDirLeft=(Button)findViewById(R.id.buttonDirLeft);

        buttonDirLeft.setOnTouchListener(new ButtonListener("DirStop","DirLeft"));

        Button buttonDirRight=(Button)findViewById(R.id.buttonDirRight);

        buttonDirRight.setOnTouchListener(new ButtonListener("DirStop","DirRight"));

        Button buttonCamUp=(Button)findViewById(R.id.buttonWaterOn);

        buttonCamUp.setOnTouchListener(new ButtonListener("CamStop","WaterOn"));

        Button buttonCamDown=(Button)findViewById(R.id.buttonWaterOff);

        buttonCamDown.setOnTouchListener(new ButtonListener("CamStop","WaterOff"));

        Button buttonCamLeft=(Button)findViewById(R.id.buttonSGLeft);

        buttonCamLeft.setOnTouchListener(new ButtonListener("CamStop","SGLeft"));

        Button buttonCamRight=(Button)findViewById(R.id.buttonSGRight);

        buttonCamRight.setOnTouchListener(new ButtonListener("CamStop","SGRight"));

        Button buttonClose=(Button)findViewById(R.id.buttonClose);

        buttonClose.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                sendCommandBinder.closeOrShutdown("Close");

//通知小车此客户端将关闭链接

            }

        });

        Button buttonShutdown=(Button)findViewById(R.id.buttonShutdown);

        buttonShutdown.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                sendCommandBinder.closeOrShutdown("Shutdown");

//通知小车自动停车

            }

        });

    }

(3) 通知TcpcommandService发送 开启和关闭命令。

public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()){

                case MotionEvent.ACTION_UP:

                    //通知TcpCommandService发送开启命令

                    sendCommandBinder.sendCommand(buttonUpCommand);

                    break;

                case MotionEvent.ACTION_DOWN:

                    //通知TcpCommandService发送关闭命令

      sendCommandBinder.sendCommand(buttonDownCommand);                

                 break;

                default:

                    break;

            }

            return false;

        }

    }

(4) IP地址和端口号,主要是靠手动输入,而并不能自动获取;这一部分主要在StartActivity.java中,它具备记忆功能,可以保存IP地址和端口号,然后将最后一个IP地址和端口值显示出来,这样就能够省得每次都要输入IP地址和端口号。

buttonEnter.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                host=textViewIP.getText().toString();

port=Integer.parseInt(textViewPort.getText().toString());

Intent startMainActivityIntent=new Intent(StartActivity.this,MainActivity.class);

                startMainActivityIntent.putExtra("tcpHost",host);

                startMainActivityIntent.putExtra("tcpPort",port);

                startActivity(startMainActivityIntent);

                //保存ip和端口值

                setInfoFromSharedPreference();

                finish();

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_start);

        //获取最后一个IP和端口值,并显示出来

(5) tcpcommandservice.java是用来作与服务器通讯的,咱们能够借助它向服务器发送控制命令,在由服务器发送相应的命令给小车,从而达到APP控制小车的目的;下面就是初始化套件制,并发送相关消息。

protected void initCommandSocket(){

        new Thread(new Runnable() {

            @Override

            public void run() {

                try{

                    commandSocket=new Socket();

                  sendMessageToActivity(MainActivity.TOAST_TEXT,"try to connect tcp server");

                    commandSocket.connect(new InetSocketAddress(host,port),6000);

                    sendMessageToActivity(MainActivity.TOAST_TEXT,"connect successfully");

                }catch (IOException e){

                    sendMessageToActivity(MainActivity.TOAST_TEXT,"connect tcp server failed");

                    commandSocket=null;

                    e.printStackTrace();

                }

            }

        }).start();

3.运行结果

 

 

 

 

 9、外壳的设计

1. freeCAD软件

FreeCAD是一个3D效果图制做软件,该软件基于OpenCASCADE的开源CAD/CAE工具,能通用基于特征的参数化三维建模的CADMCADCAXCAEPLM。它能够用在机械工程和产品设计中,也能够用在工程中。它运行于windows以及linux系统环境下,FreeCAD是一种通用的3D建模。

2. 智能灭火小车模型设计

(1) 模块组成

智能灭火小车模型由树莓派、arduino板、小车底板、电路板、稳压模块、L298N电机驱动模块、舵机、直流电机、万向轮、车轮、12V电池、水箱组成。

(2) 模块构建

经过KiCad软件绘制电路板模块而且导出为wrl文件。

电路板 

(3) 经过FreeCAD软件分别绘制小车底板、12V电池、水箱模块。(如所示


4. 在网上分别下载万向轮、车轮树莓派、arduino板、稳压模块、L298N电机驱动模块、舵机、直流电机3D模型分别以下图所示而且存为step文件。

  

3.模块拼接

根据智能灭火小车的硬件实物图的大体位置对各个模块进行拼接,得出智能灭火小车模型。

 

4. freeCAD绘制三维步骤

(1) 打开开源软件freeCAD新建一个工程

(2) 打开Part design工做台建立实体

(3) 建立草图(选择xy基准平面)

(4) 对草图进行设计

(5) 完成三维模型

5. 外壳草图的绘制

根据设计的智能灭火小车模型和部分模块须要留在外壳外进行综合布局,从而在xy平面上可初步绘制出盒子草图,并标明盒子大小。

 

 

 

 

6. 盒子设计

草图完成后,设置高为25mm的立方体。而后对盒子和车轮口进行设计,最后造成盒子的三维模型。

 

7. 盖子设计

根据盒子、舵机模块、L298N电机驱动模块进行盖子的设计,最后造成盖子的三维模型。

 

8. 合并工程

前两步完成了外壳的盒子和盖子设计,最后就把这两个工程进行合并,这两个工程是否能合并还须要工做台(assembly)来检测。经过新建工程,将这两个工程添加在新建工程里面,就完成了整个外壳的设计。

 

9. 智能灭火小车总体模型

将小车模型和小车外壳进行合并,最终获得智能灭火小车的总体模型。

 

 

 

、总结

   通过一个学期的努力学习终于把智能灭火小车作出来了,咱们5个队员分工合做,3D外壳的制做,服务器,QT客户端和安卓客户端,分别用来控制小车、舵机以及抽水,。本次做品利用QTAndroid制做的客户端链接树莓派上搭建服务器,QT客户端能够经过键盘来控制小车、舵机、抽水机,Android客户端则利用手机控制小车、舵机、抽水机。

在刚开始时,咱们查了许多资料,都没有找到完成项目的方法,感受没有什么但愿的。但在咱们坚持不懈的努力之下,终于黄天不负有心人,此次项目在咱们小组的合做之下,实现了相应的功能,最终算是完成了,也但愿是老师想要的答卷。

相关文章
相关标签/搜索