Odczyt czujnika Smogu SDS-011

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Odczyt czujnika Smogu SDS-011

Post autor: Stefan_25 » 22 lut 2021, 18:30

Witam forumowiczów.

Potrzebuję odczytać dane wysyłane przez czujnik smogu SDS-011 i przestawić w nim 4 bity dokładnie 3 - 4 bit zamienić z 5 i 6.
Komunikacja jest szeregowa 9600 Bit Rate , Danych 8 , Brak parzystości , Stop Bit 1
Dane są wysyłane co 1 sekunde.
Kolega Niveasoft stworzył program i działa ale teraz co bym jak nie robił to nie zmienia mi tych danych tylko wysyła jak odebrał.
Kod który zmieniłem ale nie działa.
  1. $regfile = "m32def.dat"
  2. $crystal = 11059200
  3. $hwstack = 128
  4. $swstack = 64
  5. $framesize = 128
  6. $baud = 9600
  7.  
  8.     Config Serialin = Buffered , Size = 100
  9.     Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
  10.     Config Lcd = 20 * 4
  11.  
  12.     Dim Tablica(10) As Byte
  13.     Enable Interrupts
  14.  
  15.     cursor off
  16.     cls
  17.     wait 1
  18.  
  19.  
  20.     Do
  21.       While Ischarwaiting() <> 0                            
  22.        Inputbin , Tablica(1) , 10
  23.        waitms 10
  24.        printbin  Tablica(1),10,Tablica(2),10,Tablica(5),10,Tablica(6),10,Tablica(3),10,Tablica(4),10,Tablica(7),10,Tablica(8),10,Tablica(9),10,Tablica(10),10
  25.       Wend
  26.     loop
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Odczyt czujnika Smogu SDS-011

Post autor: Pikczu » 22 lut 2021, 19:26

Kolega Niveasoft stworzył program i działa ale teraz co bym jak nie robił to nie zmienia mi tych danych tylko wysyła jak odebrał.
gdzie ten kod ?
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Odczyt czujnika Smogu SDS-011

Post autor: Pikczu » 22 lut 2021, 19:52

Dobra napisze Ci to, jest to banalnie proste, aż sobie sam kupie taki czujnik.
Jeśli dziś nie odpisze to znaczy że nie zdążyłem bo mam jeszcze sporo innych obowiązków.
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Re: Odczyt czujnika Smogu SDS-011

Post autor: Stefan_25 » 23 lut 2021, 13:22

Moja próba i kolejna wtopa wygląda tak.
Jak czasem coś wyśle to zdaje się że gubi początek nadawania.
Czyli nie zaczyna od &HAA i nie kończy na &HAB tylko dowolnie i wszystko się zaczyna sypać.
  1. $regfile = "m32def.dat"
  2. $crystal = 11059200
  3. $hwstack = 128
  4. $swstack = 64
  5. $framesize = 128
  6. $baud = 9600
  7.  
  8.     Config Serialin = Buffered , Size = 100
  9.     Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
  10.     Config Lcd = 20 * 4
  11.  
  12.     Dim Tablica(10) As Byte
  13.     Dim znak as Byte
  14.     Enable Interrupts
  15.     cursor off
  16.     cls
  17.     wait 1
  18.  
  19.  
  20.     Do
  21.       While Ischarwaiting() <> 0                              'gdy znak czeka w buforze
  22.        znak = inkey()
  23.        if znak = &HAC then
  24.                       Inputbin , Tablica(1) , 10
  25.                       printbin  Tablica(1);1
  26.                       printbin  Tablica(2);1
  27.                       printbin  Tablica(5);1
  28.                       printbin  Tablica(6);1
  29.                       printbin  Tablica(3);1
  30.                       printbin  Tablica(4);1
  31.                       printbin  Tablica(7);1
  32.                       printbin  Tablica(8);1
  33.                       printbin  Tablica(9);1
  34.                       printbin  Tablica(10);1
  35.                     end if
  36.       Wend
  37.     loop
  38.     End
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Odczyt czujnika Smogu SDS-011

Post autor: Pikczu » 23 lut 2021, 21:23

Więc tak spodziewam się błędu ale sprawdź.
Sugerowałem sie tym PDF-em:
https://cdn-reichelt.de/documents/daten ... ASHEET.pdf
I jest tam parę niejasności więc opuściłem obliczanie CRC zresztą to nie NASA.
I nie jestem pewien czy trzeba dzielić przez 10 ale to jest pikuś kosmetyka.
  1. $regfile = "m32def.dat"
  2. $crystal = 8000000
  3. $hwstack = 128
  4. $swstack = 64
  5. $framesize = 128
  6. $baud = 9600
  7. '*******************************pierdoly****************************************
  8. $projecttime = 15
  9. $version 0 , 0 , 12
  10. Dim Firmware As String * 6
  11. Firmware = "1.0A"
  12. Config Submode = New
  13. 'Debug On
  14. '*****************************Serial_0******************************************
  15. Config Serialin = Buffered , Size = 100
  16. '**************************Wyswietlacz******************************************
  17. Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
  18. Config Lcd = 20 * 4
  19. '*****************************Zmienne*******************************************
  20. Dim Sds011_rx_frame(10) As Byte
  21. Dim Pm25_raw As Word At Sds011_rx_frame(3) Overlay          'nakladka na komorke 3 i 4 jeszcze przed indianinem
  22. Dim Pm10_raw As Word At Sds011_rx_frame(5) Overlay          'nakladka na komorke 5 i 6 jeszcze przed indianinem
  23.  
  24. Dim Pm25_tmp As Word
  25. Dim Pm10_tmp As Word
  26. Dim Pm25 As Word
  27. Dim Pm10 As Word
  28.  
  29. '******************************Stale********************************************
  30. Const Naglowek = &HAA                                       'naglowek hex AA dziesietnie 170
  31. Const Komenda = &HC0
  32. '******************************Takie tam ***************************************
  33. Enable Interrupts
  34. Cursor Off
  35. Cls
  36. Wait 1
  37. Locate 1 , 1 : Lcd "czekam na dane: "
  38.  Locate 2 , 1 : Lcd "PM2.5= " ; Pm25                        'wyswietl
  39.   Locate 3 , 1 : Lcd "PM10= " ; Pm10                        'wyswietl
  40. '*******************************SUBY********************************************
  41. '*************************SUB  sprawdz UART ************************************
  42. Sub Sds011_rx()                                             'v0.1A                                          '
  43. '******************************nasza ranka z danymi*****************************
  44. 'AA C0 71 01 88 02 99 AC 41 AB
  45.  
  46.    'Sds011_rx_frame(1) = &HAA                                   'Naglowek
  47.    'Sds011_rx_frame(2) = &HC0                                   'ID
  48.    'Sds011_rx_frame(3) = &H71                                   'PM2.5_Low
  49.    'Sds011_rx_frame(4) = &H01                                   'PM2.5_high
  50.    'Sds011_rx_frame(5) = &H88                                   'PM10_low
  51.    'Sds011_rx_frame(6) = &H02                                   'PM10_high
  52.    'Sds011_rx_frame(7) = &H99                                   'Id_byte1
  53.    'Sds011_rx_frame(8) = &HAC                                   'Id_byte2
  54.    'Sds011_rx_frame(9) = &H41                                   'CRC
  55.    'Sds011_rx_frame(10) = &HAB                                  'Termiantor
  56. '*******************************************************************************
  57.    While Ischarwaiting() <> 0                               'gdy dane w buforze
  58.      Inputbin , Sds011_rx_frame(1) , 1                      'odbierz pierwszy bajt
  59.       'Locate 1 , 1 : Lcd "odebralem: " ; Sds011_rx_frame(1)
  60.    Select Case Sds011_rx_frame(1)                           'sprawdzenie zawartosci pierwszej komorki
  61.          '**********************************************************************
  62.       Case Naglowek:                                        'jelsi nag³owek to AA
  63.             Inputbin Sds011_rx_frame(2) , 9                 'odbierz reszte
  64.         'tu mozna by sprawdzic CRC ale olej my to narazie
  65.         'mozemy jeszcze sprawdzic czy comenda i stopka sie zgadza
  66.          If Sds011_rx_frame(2) = &HC0 And Sds011_rx_frame(10) = &HAB Then
  67.             'mamy juz dane teraz trzeba zrobic endianina
  68.             Swap Pm25_raw                                   'maly endian na duzego
  69.             Pm25_tmp = Pm25_raw / 10
  70.  
  71.             If Pm25_tmp <> Pm25 Then
  72.                Pm25 = Pm25_tmp
  73.                Locate 2 , 1 : Lcd "PM2.5= " ; Pm25          'wyswietl
  74.             End If
  75.  
  76.             Swap Pm10_raw                                   'maly endian na duzego
  77.             Pm10_tmp = Pm10_raw / 10
  78.             If Pm10_tmp <> Pm10 Then
  79.                Pm10 = Pm10_tmp
  80.                Locate 3 , 1 : Lcd "PM10= " ; Pm10              'wyswietl
  81.             End If
  82.  
  83.  
  84.          Else
  85.             Cls
  86.             Locate 4 , 1 : Lcd "blad ramki"
  87.  
  88.          End If
  89.  
  90.        '************************************************************************
  91.  
  92.       Case Else:
  93.          Cls
  94.          Locate 1 , 1 : Lcd "blad naglowka"
  95.          Clear Serialin                                  'change the serila number to clear correct buffer
  96.          Locate 2 , 1 : Lcd "odebralem: " ; Sds011_rx_frame(1)
  97.    End Select
  98.    Wend
  99. End Sub
  100. '*******************************************************************************
  101. Do
  102.  
  103.    Call Sds011_rx
  104.  
  105. Loop
  106.  
  107. End
Sprawdź czy działa.
Jeśli nie to podepnij ten czujnik i wyślij mi z 10 lub więcej ramek.
Ostatnio zmieniony 24 lut 2021, 20:11 przez Pikczu, łącznie zmieniany 1 raz.
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Re: Odczyt czujnika Smogu SDS-011

Post autor: Stefan_25 » 24 lut 2021, 16:14

Dzień dobry.

Niestety nie sprawdzę , przez moją nie uwagę uszkodziłem czujnik. Teraz trzeba poczekać na dzień wyjścia z biedy i spróbuje zamówić następny.

Pozdrawiam

Stefan_25
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Odczyt czujnika Smogu SDS-011

Post autor: Pikczu » 24 lut 2021, 17:23

A naprawic sie nie da?
Awatar użytkownika
Stefan_25
Posty: 22
Rejestracja: 04 sty 2021, 18:36

Re: Odczyt czujnika Smogu SDS-011

Post autor: Stefan_25 » 25 lut 2021, 20:30

Niestety , ze szkód jakie poniosłem :
1: Spalony "dziura w uP" hub USB
2: Podobinie jest z konwerterami TTL obydwa poszły na spoczynek
3: Port USB w komputerze
4: Czujnik SDS-011 z niego się zadymiło i coś strzelało z pod ekranu.

A to wszystko dzięki mojej nie uwadze i poszło ponad 13v na zasilanie i linie TX rs'a.
No cóż ale bałagan na stole musiał zebrać żniwo.
Na chwile obecną to na tyle, komputer po restarcie się uruchomił ale jeden port USB jest zimny.
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Odczyt czujnika Smogu SDS-011

Post autor: niveasoft » 25 lut 2021, 20:33

Porty USB często mają małe bezpieczniki SMD a w Lenovo to nawet elektroniczne i wszystko wstaje po ponownym uruchomieniu.
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Odczyt czujnika Smogu SDS-011

Post autor: Pikczu » 26 lut 2021, 22:00

No niestety współczuje.
Rozbierz czujnik może się da naprawić.
ODPOWIEDZ