1. GPPSoft - 24 Февраля, 2014 - 04:57:33 - перейти к сообщению
Здравствуйте. Решил собрать робота на колесах под управление Raspberry pi с веб камерой на борту. Поназаказывал разных комплектующих, среди которых есть данный аккумулятор. Хотелось бы сделать индикатор зарада, т.е некий контролер который бы подключался к Rpi к примеру по шине i2c и передавал уровень заряда. Ну или еще какие-нибудь варианты. Я просто больше по части программирования... Электронникой занимался очень давно, еще в школе. Вот захотелось смастерить. И правильно ли я сделал что заказал данные конвертеры? Хочется чтобы все питалось от одного аккумулятора. Т.е драйверы двигателей и сама плата будет запитана от одного аккумулятора. Заранее спасибо за ответы!
2. elmot - 24 Февраля, 2014 - 09:03:00 - перейти к сообщению
1) Это литий, заводим через делитель на АЦП и меряем любым МК.
2) Не удивляйтесь, если вдруг реальная емкость акка окажется не 8000мАч, а где-нибудь 2000. Оч подозрительно выглядит. Маловат. А китайцы такие китайцы... Литий лучше покупать в проверенных местах, а не на ебеях или китайских биржах.
3)Конвертер - бог знает, непонятно, что у него с токами. Выглядит нормально, но чота больно дешев. По баксу - недорого, если что не так не оч жалко такой.
4) Я делал видео через распберри, мне не понравилось. Лучше получается через роутер. Распебрри на боте вообще какая-то странная штука. Для простых задач слишком много жрет и слишком много наворотов, а для сложных, типо распознавания - слишком туп. Плюс проблемы с USB и отсутствие других интерфейсов.
на правах рекламы:
http://roboforum.ru/wiki/OR-WRT
2) Не удивляйтесь, если вдруг реальная емкость акка окажется не 8000мАч, а где-нибудь 2000. Оч подозрительно выглядит. Маловат. А китайцы такие китайцы... Литий лучше покупать в проверенных местах, а не на ебеях или китайских биржах.
3)Конвертер - бог знает, непонятно, что у него с токами. Выглядит нормально, но чота больно дешев. По баксу - недорого, если что не так не оч жалко такой.
4) Я делал видео через распберри, мне не понравилось. Лучше получается через роутер. Распебрри на боте вообще какая-то странная штука. Для простых задач слишком много жрет и слишком много наворотов, а для сложных, типо распознавания - слишком туп. Плюс проблемы с USB и отсутствие других интерфейсов.
на правах рекламы:
http://roboforum.ru/wiki/OR-WRT
3. GPPSoft - 24 Февраля, 2014 - 14:49:26 - перейти к сообщению
Спасибо за ответ!
А можно немного по подробнее? Не очень-то шарю.
Да вот уже тоже понял что тупанул. Но вроде он толстенький. Спросил у продавца, он заверил что может быть чуть ниже. Если не устроит, то обещал вернуть деньгу.
Ну не знаю... У меня просто супер показывает. Задержки практически нет. Ну или нет вообще если не придираться и не всматриваться. Вы наверное python или php юзали?
Мне часа-полтора покатушек вполне устроят
Платформу взял такую .
p.s: весь софт буду писать сам.
elmot пишет:
Это литий, заводим через делитель на АЦП и меряем любым МК.
А можно немного по подробнее? Не очень-то шарю.
elmot пишет:
Не удивляйтесь, если вдруг реальная емкость акка окажется не 8000мАч, а где-нибудь 2000. Оч подозрительно выглядит. Маловат. А китайцы такие китайцы... Литий лучше покупать в проверенных местах, а не на ебеях или китайских биржах.
Да вот уже тоже понял что тупанул. Но вроде он толстенький. Спросил у продавца, он заверил что может быть чуть ниже. Если не устроит, то обещал вернуть деньгу.
elmot пишет:
Я делал видео через распберри, мне не понравилось.
Ну не знаю... У меня просто супер показывает. Задержки практически нет. Ну или нет вообще если не придираться и не всматриваться. Вы наверное python или php юзали?
elmot пишет:
Распебрри на боте вообще какая-то странная штука. Для простых задач слишком много жрет и слишком много наворотов, а для сложных, типо распознавания - слишком туп. Плюс проблемы с USB и отсутствие других интерфейсов.
Мне часа-полтора покатушек вполне устроят
Платформу взял такую .
p.s: весь софт буду писать сам.
4. elmot - 24 Февраля, 2014 - 19:59:30 - перейти к сообщению
GPPSoft пишет:
А можно немного по подробнее? Не очень-то шарю.
elmot пишет:
Это литий, заводим через делитель на АЦП и меряем любым МК.
А можно немного по подробнее? Не очень-то шарю.
http://www.meanders.ru/delitnapr.shtml
На борту любого МК есть АЦП, которым можно померять поделенное напряжение. Напрямую подавать нельзя - сгорит. Там еще есть кое-каки тонкости, но преодолимые.
Цитата:
Ну не знаю... У меня просто супер показывает. Задержки практически нет. Ну или нет вообще если не придираться и не всматриваться. Вы наверное python или php юзали?
elmot пишет:
Я делал видео через распберри, мне не понравилось.
Ну не знаю... У меня просто супер показывает. Задержки практически нет. Ну или нет вообще если не придираться и не всматриваться. Вы наверное python или php юзали?
Нет, конечно. mjpeg-streamer. Роутер явно лучше работал. Мне было с чем сравнить.
Цитата:
Да ради бога. Начинайте с загрузчика
Для начала пойдет, но тоже есть недостатки.
- У таких колес сцепление с поверхностью посредственное, будет мешать.
- Слишком длинная и узкая колесная база, будут проблемы с поворотами.
А вот моторы сразу с энкодерами - толково.
5. GPPSoft - 25 Февраля, 2014 - 04:00:20 - перейти к сообщению
elmot пишет:
Да ради бога. Начинайте с загрузчика
Да в качестве "загрузчика" Linux-a хватит . Имелся в виду софт для управления железом и передачи-приема изображения. Управление из браузера и мобильного Android устройства. Говорю же, для меня главная "проблема" это железная часть... Так что я тут еще успею "намусорить" в разделах. С софтом думаю проблем не будет.
elmot пишет:
Нет, конечно. mjpeg-streamer. Роутер явно лучше работал. Мне было с чем сравнить.
Возможно. Но много факторов влияет на скорость и качество. Я же использую интерфейс V4L и java обертку над ним. Очень советую ее для тех кто программирует на java. Так же отличная библиотека для работы с GPIO и д.р.pi4j . Прикупил еще датчик положения и серву для поворота камеры . Хочется графически отображать положение и заряд аккумулятора на кадрах.
elmot пишет:
Конвертер - бог знает, непонятно, что у него с токами. Выглядит нормально, но чота больно дешев.
Еще вот такой взял.
elmot пишет:
А вот моторы сразу с энкодерами - толково.
Да как я понял там тупо диск с прорезями. Самих датчиков нет. Посоветуете?
Огромное спасибо за советы!
6. elmot - 25 Февраля, 2014 - 13:03:07 - перейти к сообщению
GPPSoft пишет:
Возможно. Но много факторов влияет на скорость и качество. Я же использую интерфейс V4L и java обертку над ним.
elmot пишет:
Нет, конечно. mjpeg-streamer. Роутер явно лучше работал. Мне было с чем сравнить.
Возможно. Но много факторов влияет на скорость и качество. Я же использую интерфейс V4L и java обертку над ним.
Собственно mjpeg-streamer тоже работает через v4l, только на С и без оберток, так что не думаю, что прога на яве внезапно покажеллучшие результаты. ну да дело хозяйское.
GPPSoft пишет:
Да как я понял там тупо диск с прорезями. Самих датчиков нет. Посоветуете?
Огромное спасибо за советы!
Да как я понял там тупо диск с прорезями. Самих датчиков нет. Посоветуете?
Огромное спасибо за советы!
Не, не посоветую. у меня такие моторы без энкодеров. Барахляленькие, но работают.
7. GPPSoft - 09 Апреля, 2014 - 15:54:19 - перейти к сообщению
elmot пишет:
Собственно mjpeg-streamer тоже работает через v4l, только на С и без оберток, так что не думаю, что прога на яве внезапно покажеллучшие результаты. ну да дело хозяйское.
Собственно mjpeg-streamer тоже работает через v4l, только на С и без оберток, так что не думаю, что прога на яве внезапно покажеллучшие результаты. ну да дело хозяйское.
Вот. Все таки собрал.
8. GPPSoft - 22 Апреля, 2014 - 15:25:05 - перейти к сообщению
Пытаюсь замерить напряжение аккумулятора с помощью Atmega168 на внутреннем резонаторе 8Mhz с использованием делителя на резисторах.
Код:
Но почему-то точность хромает очень сильно. В то время когда мой китайский мультиметр показывает 12.3 вольта, то МК вычисляет 12.10. Интересно, что если я меряю напряжение за конвертером на котором установлено к примеру 8.48, то показания довольно точные, почти один в один. Объясните пожалуйста природу этих отклонений. Спасибо!
Код:
CODE:
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 10000.0;
float R2 = 1000.0;
int value = 0;
void setup() {
analogReference(INTERNAL);// опираемся на 1.1 вольт
}
--------------------------------------------------------
void getBatteryStatus(){
value = analogRead(analogInput);
vout = (value * 1.1) / 1023.0;
vin = vout / (R2/(R1+R2));
Serial.println(vin);
}
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 10000.0;
float R2 = 1000.0;
int value = 0;
void setup() {
analogReference(INTERNAL);// опираемся на 1.1 вольт
}
--------------------------------------------------------
void getBatteryStatus(){
value = analogRead(analogInput);
vout = (value * 1.1) / 1023.0;
vin = vout / (R2/(R1+R2));
Serial.println(vin);
}
Но почему-то точность хромает очень сильно. В то время когда мой китайский мультиметр показывает 12.3 вольта, то МК вычисляет 12.10. Интересно, что если я меряю напряжение за конвертером на котором установлено к примеру 8.48, то показания довольно точные, почти один в один. Объясните пожалуйста природу этих отклонений. Спасибо!
9. elmot - 22 Апреля, 2014 - 16:00:13 - перейти к сообщению
Ну это не большое отклонение, ок 2%.
А потом, если от силовой части помеха идет, то там что угодно намеряться может. Надо усреднять. Гуглить скользящее среднее.
А потом, если от силовой части помеха идет, то там что угодно намеряться может. Надо усреднять. Гуглить скользящее среднее.
10. GPPSoft - 22 Апреля, 2014 - 17:19:45 - перейти к сообщению
elmot пишет:
Ну это не большое отклонение, ок 2%.
А потом, если от силовой части помеха идет, то там что угодно намеряться может. Надо усреднять. Гуглить скользящее среднее.
А потом, если от силовой части помеха идет, то там что угодно намеряться может. Надо усреднять. Гуглить скользящее среднее.
Т.е все нормально? Вот человек на одном альтернативном форуме отписался:
Цитата:
Чего тут объяснять? У мультиметра разрешение около 20 бит, у авр - 10 бит. Итог: 5/1024 = 0,00488 v. Чтоб мерить 12 вольт, нужен делитель не менее /3. Итог: 0,00488 * 3 = 0,0146 вольт. Это минимальное разрешение ацп. Теперь возьмем гуляние данных 1 разряд (это елси все очень хорошо сделано). Итог: 0,0146 * 2 = 0.03 вольта.
Почему делим на 1023 ????
Завязывай с флоат...
Чего тут объяснять? У мультиметра разрешение около 20 бит, у авр - 10 бит. Итог: 5/1024 = 0,00488 v. Чтоб мерить 12 вольт, нужен делитель не менее /3. Итог: 0,00488 * 3 = 0,0146 вольт. Это минимальное разрешение ацп. Теперь возьмем гуляние данных 1 разряд (это елси все очень хорошо сделано). Итог: 0,0146 * 2 = 0.03 вольта.
Почему делим на 1023 ????
Завязывай с флоат...
P.S: вот, когда вчера с этими делителями-ххх разбирался... Сжег одну Raspberry Pi. Фатально. Чертовы провода
11. Роботов - 22 Апреля, 2014 - 17:55:22 - перейти к сообщению
Резисторы-то какие стоЯт? +/- 10% наверное. Отсюда и неточность измерения.
12. GPPSoft - 23 Апреля, 2014 - 09:10:22 - перейти к сообщению
Роботов пишет:
Резисторы-то какие стоЯт? +/- 10% наверное. Отсюда и неточность измерения.
Да, как выяснилось резисторы не очень точные. . Ну и опорное не ровно 1.1. Вообщем совместил, но точность до DT380 не дотягивает . Ну и скачат данные. Как я понял нужно еще искать скользящее среднее. Может еще что-то посоветуете? Спасибо!
Код:
CODE:
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 9990.0;
float R2 = 1015.0;
int value = 0;
//Не очень пока разбираюсь в "низкоуровневом" программировании под МК
//Но как я понял этот код изменяет попорное до 1.1 и меряет его.
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1125300L / result; // Back-calculate AVcc in mV
return result;
}
void getBatteryStatus(){
value = analogRead(analogInput);
vout = (value * (readVcc()/1000.0)) / 1023.0;
vin = vout / (R2/(R1+R2));
Serial.println(vin);
delay(500);
}
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 9990.0;
float R2 = 1015.0;
int value = 0;
//Не очень пока разбираюсь в "низкоуровневом" программировании под МК
//Но как я понял этот код изменяет попорное до 1.1 и меряет его.
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1125300L / result; // Back-calculate AVcc in mV
return result;
}
void getBatteryStatus(){
value = analogRead(analogInput);
vout = (value * (readVcc()/1000.0)) / 1023.0;
vin = vout / (R2/(R1+R2));
Serial.println(vin);
delay(500);
}
Вывод(DT830B показывает 12.30):
CODE:
12.57
12.65
12.45
12.57
12.57
12.68
12.53
12.51
12.54
12.68
12.56
12.60
12.57
12.68
12.53
12.48
12.57
12.68
12.53
12.57
12.57
12.68
12.59
12.57
12.57
12.65
12.57
12.57
12.57
12.57
12.57
12.54
12.57
12.65
12.45
12.57
12.57
12.68
12.53
12.51
12.54
12.68
12.56
12.60
12.57
12.68
12.53
12.48
12.57
12.68
12.53
12.57
12.57
12.68
12.59
12.57
12.57
12.65
12.57
12.57
12.57
12.57
12.57
12.54
Не знаю плохо это или хорошо?
13. elmot - 24 Апреля, 2014 - 12:51:14 - перейти к сообщению
Для без усреднения - весьма неплохо. 2% амплитуды. На уровне хорошего стрелочного вольтметра.