Как работать с аналоговыми показаниями с помощью 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, мне просто нужно выполнить эти шаги, но я до сих пор не знаю, как это сделать.
@coelhudo, 👍1
1 ответ
Лучший ответ:
Похоже, что Firmata не предоставила возможность изменять аналоговый эталонный источник. Вы ссылались на один из открытых для него вопросов, но я нигде не вижу, чтобы он был привязан к текущей основной ветке.
У Arduino нет возможности считывать напряжение без какой-либо ссылки, и, как вы видите, ссылка по умолчанию-Vcc. Это означает, что все должно сравниваться с Vcc, и если вы сравните Vcc с самим собой, вы всегда обнаружите, что Vcc равен Vcc.
Запрос на извлечение для реализации находится здесь, так что вы можете поиграть с ним самостоятельно.
- Динамически обновить масштаб виджета Tkinter из портов Arduino с помощью python и firmata
- серийные данные портятся
- Как получить команды на запущенную программу arduino от raspberry pi?
- Последовательная связь Arduino с Python: отправка массива
- Отправьте несколько значений int из Python в Arduino, используя pySerial
- Сброс последовательного порта Arduino в последовательном мониторе и Python
- Установите Arduino IDE в Raspberry Pi 3 модели B.
- Код для 2 ультразвуковых датчиков
Итак, вы хотите сказать, что даже если я использую метод send_sysex (который, я все еще не уверен, может решить мою проблему), это не будет иметь значения, поскольку модификация аналоговой ссылки не реализована в текущей версии Firmata?, @coelhudo
Я не эксперт по Firmata, но я просмотрел исходный код для кода firmata, который будет работать на Arduino, и там не было, реализует ли он что-либо, что устанавливает аналоговую ссылку., @jose can u c