Вывод данных с ардуино с термопары

Тема в разделе "Arduino & Shields", создана пользователем shiroi, 22 дек 2018.

Метки:
  1. shiroi

    shiroi Нуб

    Вопрос касательно вывода данных с термопары подключенной к плате ардуино. Она подключается к 3 цифровым портам на ардуино для вывода данных с нее в режиме реального времени и постройки графика (также в реальном времени). Но никак не получается вывести данные, выдает ошибку
    Код (Python):
    ValueError: shape mismatch: objects cannot be broadcast to a single shape
    Код (Python):
    import sys
    from matplotlib import pyplot
    import pyfirmata
    from time import sleep
    import tkinter
    import serial

    def onStartButtonPress():
        while True:
            if flag.get():
                sleep(1)
                pData.append(float(a0.read()))
                pData.append(float(a1.read()))
                pData.append(float(a2.read()))
                pyplot.ylim([0, 1])
                del pData[0]
                l1.set_xdata([i for i in range(25)])
                l1.set_ydata(pData)  # update the data
                pyplot.draw()  # update the plot
                top.update()
            else:
                flag.set(True)
                break


    # Associate port and board with pyFirmata
    port = 'COM6'
    board = pyfirmata.ArduinoMega(port)

    # Using iterator thread to avoid buffer overflow
    it = pyfirmata.util.Iterator(board)
    it.start()

    # Assign a role and variable to analog pin 0
    a0 = board.get_pin('d:7:i')
    print(a0)
    a1 = board.get_pin('d:6:i')
    print(a1)
    a2 = board.get_pin('d:5:i')
    print(a2)
     
    Последнее редактирование: 22 дек 2018
  2. ; забыл
     
    ZAZ-965 нравится это.
  3. b707

    b707 Гуру

    я не очень знаю питон, но похоже вы знаете его еще меньше :)
    чето какая-то ерунда у вас в коде. Зачем вы чиатете каждый порт дважды? - первый раз выкидываете значения, второй сохраняете.
    Во-вторых - удаляя нулевой элемент массива pData - чего вы стремитесь достичь?
    Ну и втретьих, что это за термопара такая, что требует подключения к трем аналоговым портам? - чушь какая-то
     
  4. shiroi

    shiroi Нуб

    насчет считывания портов можно не обращать внимания, осталось со старого кода
    насчет второго пункта, удаляя нулевой элемент массива pData я хочу избавиться от старых данных в массиве, так как программа должна в реальном времени строить график по новым данным, полученным с термопары
    насчет третьего пункта, MAX6675, у нее 5 выходов, 2 из которых питание, 3 интерфейс, так что чушь не чушь, но такая термопара
     
  5. b707

    b707 Гуру

    вы, простите, идиот? :)
    Вы даташит-то на MAX6675 открывали? https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf
    Это "термопара", как вы ее назвали - имеет SPI-интерфейс, а вы ее к аналоговым пинам подключили....
    пипец...

    вот типичная схема подключения из даташита - где вы тут аналоговые порты то нашли? [​IMG]
    данные с чипа приходят в цифровом виде по SPI протоколу. Читать их аналогом так же бесполезно, как пытаться разглядеть файлы на жестком диске в микроскоп :)
     
    Последнее редактирование: 22 дек 2018
    parovoZZ и ДеКодер нравится это.
  6. shiroi

    shiroi Нуб

    оскорблять не стоит, и где вы увидели что-нибудь про аналоговые порты?"термопара" у меня подключена к цифровым портам, или если у вас есть рекомендации по подключению термопары к mega 2560, то с радостью выслушаю
     
  7. b707

    b707 Гуру

    врать тоже не стоит. Если у вас используются цифровые порты, то опять остается только воскликнуть первое предложение из моего прошлого поста. Даже если б это была обычная термопара - ничего кроме 0 и 1 с цифрового порта вы не прочитали бы. Очень полезная информация с термопары - 0 и 1, правда? Вы именно нули и единички собирались на график выводить? :)
    Так что либо вы врете и использовали аналоговые (что видно по названиям "а0" "а1" и тд - либо вообще не понимаете, что делаете.

    Что касается правильного подключения - то для получения информации по температуре с чипа 6675 к нему надо подключится по SPI по специальному протоколу, который описан в том же даташите.на странице 5. Результат измерения температуры возвращается в виде 12-битного числа, которое надо декодировать
    Судя по вашим знаниям, самостоятельно вы принять температуру не сможете. Ищите готовую библиотеку.
     
    Последнее редактирование: 22 дек 2018
  8. ZAZ-965

    ZAZ-965 Гуру

    @b707, это просто не самые удачные имена переменных
    a0 = board.get_pin('d:7:i') - переменную а0 связывает с D7 input
     
  9. b707

    b707 Гуру

    Хорошо :) тогда два вопроса:
    - если у ТС это цифра, зачем он их во флоат переводит? :)
    - ну и главное - этот чип имеет интерфейс SPI. Читать значения с его пинов - что в цифре, что в аналоге - без протокола бесполезно.
     
  10. ZAZ-965

    ZAZ-965 Гуру

    Черт его знает, я в этих firmata`х, johnny-five и питонах не забираюсь
     
  11. ZAZ-965

    ZAZ-965 Гуру

    @shiroi, бегло посмотрел код StandardFirmataPlus и pyfirmata, поэтому могу ошибаться, но я вовсе не увидел там возможности работы с SPI. Что-то есть в ExtendedFirmata, но стыкуется ли она с pyfirmata - не знаю.
     
  12. parovoZZ

    parovoZZ Гуру

    а зачем брать значения с тактирующего пина и пина выбора кристалла??? Да и питон настолько непроворотлив, что выводить на экран нолики и единички лишино всяческого смысла.
    Итог - про питон забыть. Учить СИ.