Kursdesign für drahtlose Übertragung, Design eines Systems zur Überwachung der Wasserqualität auf Basis von ZigBee

Vorwort

Der Kursdesignbericht, die IAR-Datei und der C#-Hostcomputer befinden sich am Ende des Artikels.


1. Designinhalte und -anforderungen

        ZigBee ist in einen Koordinator und ein Terminal unterteilt. Das Terminal sendet die vom Sensor gesammelten Daten an den Koordinator, und der Koordinator sendet die Daten an den Host-Computer. Der Host-Computer zeigt die Daten in Echtzeit an, um den Zweck der Wasserüberwachung zu erreichen Qualität.

2. System-Hardware-Design

  • Der Übertragungsknoten ist CC2530, einer als Koordinator und zwei als Terminals
  • DS18B20 (Temperatursensor): Wird zur Messung der Wassertemperatur verwendet

  • TSW-30 (Trübungssensor): Wird zur Messung der Wassertrübung verwendet

2.1 CC2530

 Abbildung 2-1 CC2530-Pindiagramm

2.2 DS18B20

Abbildung 2-2 DS18B20-Hardware-Verdrahtungsplan

Pin-Name

Funktion

GND

Erdungskabel

DQ

Single-Bus-Kommunikationsschnittstelle, Stromversorgungsanschluss im parasitären Modus

VDD

Stromleitung (bei 2-Draht-Kommunikation geerdet, um eine korrekte Identifizierung des VDD-Zustands im Chip sicherzustellen)

Tabelle 2-1 DS18B20-Pin-Beschreibung

        DS18B20 Temperatur-Lesefunktionscode-Segment, digitale Lesung

void Temp_test(void) //温度读取函数  
{  
  uint8 V1,V2;  
   
  Ds18b20Initial();  
  Ds18b20Write(0xcc);  
  Ds18b20Write(0x44);  
    
  Ds18b20Initial();  
  Ds18b20Write(0xcc);  
  Ds18b20Write(0xbe);  
    
  V1 = Ds18b20Read();  
  V2 = Ds18b20Read();  
  temp = ((V1 >> 4)+((V2 & 0x07)*16));    

2.3 TSW-30

Pin-Definition

Funktionsbeschreibung

Anmerkung

VCC

Positive Versorgungsspannung, 5 V

3,3 V nicht verfügbar

ZUM

Analoger Signalausgang

Ausgangsspannungsbereich 0-5V

TUN

Digitaler Ausgang

Wenn er kleiner als der eingestellte Wert ist, wird ein hoher Pegel ausgegeben; wenn er größer als der eingestellte Wert ist, wird ein niedriger Pegel ausgegeben

GND

Minuspol der Versorgungsspannung

Tabelle 2-2 TSW-30-Pin-Beschreibung

        Codesegment der TSW-30-Temperaturablesungsfunktion, analoge Lesung

uint16 ReadData( void )  
{  
  uint16 reading = 0;  
    
  P0DIR &= ~0x20;  // 设置P0.5为输入方式  
    
  //asm("NOP");asm("NOP");  
    
  /* Clear ADC interrupt flag */  
  ADCIF = 0;  
    
  ADCCON3 = (0x20 | HAL_ADC_DEC_064 | HAL_ADC_CHANNEL_5);  
    
  /* Wait for the conversion to finish */  
  while ( !ADCIF );  
    
  asm("NOP");asm("NOP");  
    
  /* Read the result */  
  reading = ADCL;  
  reading |= (int16) (ADCH << 8);  
  reading >>= 8;  
    
  return reading;  

3. Systemsoftware-Design

3.1 Systemflussdiagramm

Abbildung 3-1 Systemflussdiagramm

4.2 Programmierung des Host-Computers

4.2.1 Schnittdaten

        Da die Datenempfangszeit verschiedener Endknoten nicht vollständig synchronisiert werden kann, kann die Datenquelle nicht genau unterschieden werden. Daher wird das Flag-Bit verwendet. Wenn das Terminal Daten sendet, werden die Flag-Bits „/c“ und „/d“ verwendet. werden unmittelbar nach den Daten hinzugefügt, wodurch die Quelle der Daten ermittelt werden kann.

        Schneiden Sie die Daten ab, indem Sie die Flag-Bits „/c“ und „/d“ der gesendeten Daten kombinieren. Einzelheiten finden Sie in Zeile 14 des folgenden Codesegments. Trennen Sie die gewünschten Datenbits.

4.2.2 Daten anzeigen

Je nach Flag-Bit werden unterschiedliche Daten abgerufen, und die durch Trennung erhaltenen Daten werden speziell angezeigt. Einzelheiten finden Sie in den Zeilen 15 bis 42 des folgenden Codesegments.

        private void SerialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                string data = string.Empty;

                this.Invoke((EventHandler)(delegate
                {
                    data = serialPort1.ReadExisting();

                    byte[] decBytes = System.Text.Encoding.Default.GetBytes(data);
                    string str1 = System.Text.Encoding.Default.GetString(decBytes);

                    string[] info = data.Split('/');
                    try
                    {
                        for (int i = 0; i < info.Length; i++)
                        {

                            if (info[i] == "c")
                            {
                                //浊度
                                float f1 = Convert.ToSingle(info[i + 1]);
                                label6.Text = Convert.ToString((int)f1 * 50 / 127);
                                chart1.Series["浊度"].Points.AddXY(zdx++, (int)f1 * 50 / 127);
                                if (zdx > 20)
                                    chart1.Series["浊度"].Points.Clear();
                                this.listBox1.Items.Add(Time_Count.Text + "," + "浊度," + Convert.ToString((int)f1 * 50 / 127));

                            }
                            else if (info[i] == "d")
                            {
                                //温度
                                float f1 = Convert.ToSingle(info[i + 1]);
                                label7.Text = Convert.ToString(f1);
                                chart1.Series["温度"].Points.AddXY(wdx++, f1);
                                if (wdx > 20)
                                    chart1.Series["浊度"].Points.Clear();
                                this.listBox2.Items.Add(Time_Count.Text + "," + "温度," + Convert.ToString(f1));
                            }
                        }
                    }
                    catch
                    {

                    }
                })
                );
            }
            catch (Exception ex)
            {
                //响铃并显示异常给用户
                System.Media.SystemSounds.Beep.Play();
                MessageBox.Show(ex.Message);
            }
        }

Anhang 

Baidu-Netzwerkfestplatte , Extraktionscode: tv6a

Acho que você gosta

Origin blog.csdn.net/qq_21891843/article/details/124446316
Recomendado
Clasificación