Как работать с аналоговыми показаниями с помощью RPi и Firmata?

Для контекста: Я работаю над проектом, где мне нужно использовать датчики, чтобы выяснить текущее состояние окружающей среды. Этот процесс выполняется с помощью Arduino UNO и RPi. Самый простой способ, который я нашел для осуществления связи между обеими платами, - это загрузить стандартные Firmata и прочитать код из RPi с помощью последовательной связи. Я использую pyfirmata для написания кода на Python на стороне RPI. Кроме того, Arduino питается от RPi с помощью USB-порта.

Моя проблема заключалась в следующем: компонент АЦП в Arduino использует в качестве аналогового эталона 5 В, обеспечиваемый USB. Когда я тестировал интеграцию, то пользовался своим ноутбуком. Итак, компьютер подавал 5 В на Arduino. Пока все хорошо. Когда я интегрировал плату Arduino в RPi, у меня возникли некоторые проблемы, связанные с точностью датчика. Я выяснил, что RPi дает только 4,75 В на плату Arduino. Это мешало моим показаниям, так как АЦП использовал 4,75 В, в то время как мой код имел 5 В для вычисления вещей. После корректировки кода все пошло по плану. И 4,75 В, и 5 В были жестко закодированы в моем коде.

Итак, вот мои вопросы:

  • Есть ли способ прочитать Vcc с помощью pyfirmata, чтобы определить правильное напряжение, не имея этого жесткого кода?
  • Есть ли способ изменить аналоговую ссылку, чтобы использовать ВНУТРЕННЮЮ ссылку 1.1 В?

Что касается аналоговой ссылки, то я нашел вот что: https://github.com/firmata/arduino/issues/39 ... Итак, pyfirmata реализует метод send_sysex, мне просто нужно выполнить эти шаги, но я до сих пор не знаю, как это сделать.

, 👍1


1 ответ


Лучший ответ:

2

Похоже, что Firmata не предоставила возможность изменять аналоговый эталонный источник. Вы ссылались на один из открытых для него вопросов, но я нигде не вижу, чтобы он был привязан к текущей основной ветке.

У Arduino нет возможности считывать напряжение без какой-либо ссылки, и, как вы видите, ссылка по умолчанию-Vcc. Это означает, что все должно сравниваться с Vcc, и если вы сравните Vcc с самим собой, вы всегда обнаружите, что Vcc равен Vcc.

Запрос на извлечение для реализации находится здесь, так что вы можете поиграть с ним самостоятельно.

,

Итак, вы хотите сказать, что даже если я использую метод send_sysex (который, я все еще не уверен, может решить мою проблему), это не будет иметь значения, поскольку модификация аналоговой ссылки не реализована в текущей версии Firmata?, @coelhudo

Я не эксперт по Firmata, но я просмотрел исходный код для кода firmata, который будет работать на Arduino, и там не было, реализует ли он что-либо, что устанавливает аналоговую ссылку., @jose can u c