嵌入式系统原理实验总结报告

嵌入式系统原理实验总结报告

一、技术性总结报告

(一)题目:车辆座椅控制系统实验

(二)项目概述:

1.为了实现车辆座椅控制的自动化与智能化。

2.方便用户通过智能手机与车载传感器之间的联动。

3.使车辆作为当今物联网中重要的一个节点发挥作用。

4.通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。

5. 加强本组学生对嵌入式系统原理的更深层次的理解与运用。

(三)技术方案及原理

本次试验分为软件、硬件两个部分。

1.软件部分。

A.智能手机部分,包括通过智能手机对座椅的控制部分、手机所携带的身份信息部分。

本部分软件使用Java编写,其程序部分为:

主程序:

package com.example.seat;

import android.support.v7.app.ActionBarActivity;

import android.support.v7.app.ActionBar;

import android.support.v4.app.Fragment;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.os.Build;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.InetAddress;

import java.net.Socket; 

import java.net.UnknownHostException;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle; 

import android.view.KeyEvent;

import android.view.View;

import android.widget.Button;

public class MainActivity extends ActionBarActivity {

       private Button Up = null;

       private Button Left = null;

       private Button Dowm = null;

       private Button Right = null;

       private Socket socket = null;

    private static final String HOST = "192.168.1.142";   

    private static final int PORT = 10007;   

         

         

   

    public void onCreate(Bundle savedInstanceState) { 

                super.onCreate(savedInstanceState); 

                setContentView(R.layout.activity_main); 

                initControl(); 

            } 

         

    private void initControl() { 

                Up = (Button) findViewById(R.id.button1);  

                Up.setOnClickListener(new ReceiverListener()); 

            } 

         

    class ReceiverListener implements OnClickListener { 

        

               protected String line;

                     @Override 

                public void onClick(View v) { 

                    // TODO Auto-generated method stub  

                    new Thread() { 

                        @Override 

                        public void run() { 

                           

                            try { 

                               

                                Socket socket = new Socket(HOST, PORT); 

                               

                                BufferedReader br = new BufferedReader( 

                                        new InputStreamReader(socket.getInputStream())); 

                                line = br.readLine(); 

                                br.close(); 

                            } catch (UnknownHostException e) { 

                                // TODO Auto-generated catch block 

                                e.printStackTrace(); 

                            } catch (IOException e) { 

                                // TODO Auto-generated catch block 

                                e.printStackTrace(); 

                            } 

                            handler.sendEmptyMessage(0); 

                        } 

                    }.start(); 

                } 

         

            } 

         

            

            private Handler handler = new Handler() { 

                @Override 

             

                public void handleMessage(Message msg) { 

                    super.handleMessage(msg); 

                   

                  

                } 

            }; 

   

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

       

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle action bar item clicks here. The action bar will

        // automatically handle clicks on the Home/Up button, so long

        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();

        if (id == R.id.action_settings) {

            return true;

        }

        return super.onOptionsItemSelected(item);

    }

    /**

     * A placeholder fragment containing a simple view.

     */

    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {

        }

        @Override

        public View onCreateView(LayoutInflater inflater, ViewGroup container,

                Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            return rootView;

        }

    }

}

界面代码:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.seat"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-permission

        android:name="android.permission.ACCESS_NETWORK_STATE"/>

   

    <uses-permission android:name="android.permission.INTERNET"/>

   

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="19" />

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.seat.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>

B.车载座椅控制部分,包括控制系统对座椅的控制部分、对智能手机发出的控制信息的识别部分和对手机所携带身份信息的校验与储存部分。

本部分软件使用Python编写,其程序部分为:

#!/usr/bin/python

#encoding=utf-8

from Raspi_PWM_Servo_Driver import PWM

import time, socket

host = ''

port = 10007

pwm = PWM(0x6F, debug=True)

servoMin = 125  # Min pulse length out of 4096 , 0.5

servoMax = 575  # Max pulse length out of 4096 , 2.3

def setServoPulse(channel, pulse):

  pulseLength = 1000000                   # 1,000,000 us per second

  pulseLength /= 60                       # 60 Hz

  print "%d us per period" % pulseLength

  pulseLength /= 4096                     # 12 bits of resolution

  print "%d us per bit" % pulseLength

  pulse *= 1000

  pulse /= pulseLength

  if(pulse>servoMax):

       pulse = servoMax

  if(pulse<servoMin):

       pulse = servoMin

  pwm.setPWM(channel, 0, int(pulse))

pwm.setPWMFreq(60)                        # Set frequency to 60 Hz

pwm.setPWM(0, 0, servoMax)

if __name__ == '__main__':

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    s.bind((host, port))

    s.listen(3)

   

    print 'Server is running on port %d, press Ctrl-C to terminate it.' % port

   

    pulse_ud = 1.9

    pulse_lr = 1.9

    setServoPulse(0,pulse_ud)

    setServoPulse(1,pulse_lr)

    while True:

        clientsock, clientaddr = s.accept()

        clientfile = clientsock.makefile('rw', 0)

        ctrlinfo = clientfile.readline().strip()

        print 'Control info is %s.\n' % ctrlinfo

        if ctrlinfo == "up":

            pulse_ud += 0.1

        elif ctrlinfo == "down":

            pulse_ud -= 0.1

        elif ctrlinfo == "left":

            pulse_lr += 0.1

        elif ctrlinfo == "right":

            pulse_lr -= 0.1

        else:

            print "ERROR\n"

        setServoPulse(0,pulse_ud)

        setServoPulse(1,pulse_lr)

        clientfile.close()

        clientsock.close()

2.硬件部分。

对车载座椅控制部分发出的信息的接受、识别、执行部分。

本次试验使用的硬件设备包括:智能手机一部、“树莓派”一台、小舵机两台、舵机驱动板一个、无线网卡一个、杜邦线若干、5V电源一个、无线路由器一个

智能手机

树莓派(外)

树莓派(内)

小舵机

舵机驱动板

无线网卡

杜邦线

5V电源

无线路由器

硬件实体完成图

(四)实验流程及结果

1.打开智能手机上的控制软件。

2.向车载座椅控制台发送信息。(发送信息分别为上、下、左、右)

3.车载座椅控制台接受、识别并执行信息。

4.通过小舵机的动作验证该实验是否成功。(详细见视频)

二、工作进度自评表

本次试验完成。

本次试验计划分为三个阶段。

第一阶段:智能手机部分、车载座椅控制部分和硬件部分的分别完成。本阶段完成。

第二阶段:智能手机部分、车载座椅控制部分和硬件部分的整合阶段。本阶段完成。

第三阶段:车辆座椅控制系统实验的验收调试阶段。本阶段完成。

三、组内人员自评

    本次试验打到预期的实验目的。虽然在实验进行过程中遇到了不少的麻烦,但是通过我们成员自身的努力学习掌握了实验所要求的知识。最后实验的成功与组员之间的互相帮助与紧密配合是分不开的。

四、个人学习心得

    本人通过此次实验,对于嵌入式系统原理有了更加深层次的了解。对于设计嵌入式系统原理的实验也有了较为高程度的提高。为了以后更进一步的学习并掌握嵌入式系统打下了坚实的一步。对于了解车辆座椅控制的自动化与智能化;了解用户通过智能手机与车载传感器之间的联动;了解车辆作为当今物联网中重要的一个节点都发挥了重要作用。通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。加强本组学生对嵌入式系统原理的更深层次的理解与运用。

相关推荐