Рывки сервопривода в связке с температурными датчиками
- Войдите на сайт для отправки комментариев
Сб, 18/04/2015 - 15:11
Всем доброго времени суток.
Прошу помощи у гуру.
К Arduino Uno подключены:
1. Сервопривод управляемый с помощью потенциометра
2. Два температурных датчика
Проблема заключается в том, что при одновременной работе датчиков и сервопривода, последний начинает постоянно подёргиваться, нет плавности хода. Если закоментировать все строки, связанные с датчиками температуры, то все работает прекрасно.
Может есть идеи? Заранее спасибо.
Вот мой код:
#include <OneWire.h> //Подключаем библиотеку температурных датчиков
#include <DallasTemperature.h> //Подключаем библиотеку температурных датчиков
#define ONE_WIRE_BUS 10 //Объясняем контроллеру, на какой порт подключены температурные датчики
OneWire oneWire(ONE_WIRE_BUS); //Настройка OneWire для работы с OneWire устройствами
DallasTemperature sensors(&oneWire); //Передача данных oneWire в dallasTemperature
DeviceAddress Thermometer1 = {
0x28, 0xA8, 0xB9, 0x89, 0x06, 0x00, 0x00, 0xC4 }; //Адресс датчика
DeviceAddress Thermometer2 = {
0x28, 0x0C, 0xB3, 0x89, 0x06, 0x00, 0x00, 0xF9 }; //Адресс датчика
#include <Servo.h> //Подключаем библиотеку сервопривода
Servo myservo; //Присваиваем имя сервоприводу
#define potenciometr A0 //Объясняем контроллеру, на какой порт подключен переменный резистор
int temp_1, temp_2; //Объявляем переменные температурных датчиков
int val; //Создаем переменную val
void setup()
{
sensors.begin(); //Запуск библиотеки
sensors.setResolution(Thermometer1, 10); //Установка разрешения 10 бит
sensors.setResolution(Thermometer2, 10); //Установка разрешения 10 бит
myservo.attach(11); //Указываем пин, к которому подключен сервопривод
pinMode(potenciometr, INPUT); //Определение режима работы вывода
Serial.begin(9600); //Открывам COM Port на скорости 9600
}
void printTemperature(DeviceAddress deviceAddress,const char* NumSensor ) //Функция вывода температуры для устройства
{
int tempC = sensors.getTempC(deviceAddress);
Serial.print(NumSensor); //Вывод значений
Serial.println(tempC); //Перенос на новую строку
}
void loop()
{
sensors.requestTemperatures(); //Отправляем команду для получения температуры
printTemperature(Thermometer1,"1 "); //Выводим значения первого датчика, начинающиеся с символов 1 + пробел
printTemperature(Thermometer2,"2 "); //Выводим значения второго датчика, начинающиеся с символов 2 + пробел
temp_1= sensors.getTempC(Thermometer1); //Получение данных в переменную с термометра 1
temp_2= sensors.getTempC(Thermometer2); //Получение данных в переменную с термометра 2
val = analogRead(potenciometr); //Считывает значение потенциометра (величина между 0 и 1023)
val = map(val, 0, 1023, 0, 179); //Масштабирует его для использования с сервоприводом (значение между 0 и 180)
myservo.write(val); //Устанавливает позицию серво в соответствии с масштабируемым значением
}
не используй библиотеку dallas
не используй библиотеку dallas
Я заметил, что проблемма в этом участке кода:
что у вас за система?
Система обычная: нажал кнопку и дома :)
а нуда! точно! а я главное ещё думаю зачем там потенциометр и два термодатчика а аказывается вон оно что. спасибо кеп! просветил!
не используй библиотеку dallas
Я заметил, что проблемма в этом участке кода:
В Dallas библиотеке задержка в 750мС от которой просто так вы не уйдете. Делайте на OneWire, код