Реклама: Индивидуальные средства управления для электрокресла.

Расширенный поиск      

Хочешь стать куратором любимой темы?

* Комментарии к новостям

1. Электросамокат или моноколесо? (Электросамокаты) от магнитчик 2. Десульфатация АКБ, теория и практика. (Свинцовые аккумуляторы) от Cyberpapa 3. Прошу сделать голосование по удалению из раздела самокаты темы про моноколёса (Электросамокаты) от ReSharVladimir 4. Скутеры для инвалидов, всё про них и вокруг них (Инвалидные коляски на электротяге) от SergioL 5. Kugoo M2 - разбор полётов (Электросамокаты Kugoo M серии и аналоги) от kponom 6. Помогите начинающему... электрифицировать велосипед (Электровелосипеды) от Linkov1959
7. BMS с контролем напряжений ячеек по bluetooth (Системы управления аккумуляторными батареями (BMS)) от Igor63 8. Гаражные войны (Свинцовые аккумуляторы) от AKI 9. Как научиться кататься на моноколесе? Уроки мастерства! (Моноколеса (электроунициклы)) от Ivanych666 10. Kugoo g-booster 48V max 2400 Вт 20Ah/10Ah (Электросамокаты Kugoo M серии и аналоги) от satell 11. Halten (Voyager1200) - 11", мотор 1200Вт(2х1200), батарея 48в21,6Ач(52в23,4Ач) (Электросамокаты) от магнитчик 12. Как нужно собирать батарейки (Литий-ионные (Li-Ion) и литий-полимерные (Li-Pol) аккумуляторы) от satell
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

Прочитано 72 раз

0 Пользователи и 1 Гость просматривают эту тему.

22 Фев 2019 в 20:56
Прочитано 72 раз
Оффлайн

NikolayS

Москва Сообщений: 923
Попросили меня помочь человеку, почти полностью парализованному (пальцы немного двигаются) - сделать ну очень "легкий" джойстик для электрокресла. Вообще такие бывают штатные, приезжает к вам инжиненер из Европы, все настраивает. обходится тысяч в 200. А тут кресло БУ, да итальянское, да ввезенное из Финляндии. Жизнь она такая - иногда приходится крутится... Ни инженера ни 200кр)) Есть только я и ардуино нано))

И стали мы думать - а как вообще это должно быть по хорошему. И пришли к такому результату, пока. Родной джойстик становится "родительским" и остается "приоритетным", т е любое его отклонение блокирует второй облегченный джойстик. Устанавливается он на спинку кресла. При запуске активен именно родительский.

Облегченный джойстик... За "бесплатно"... Как-то сделали для PS3 4pins джойстики на "холлах", типа вечные, без элементов трения (переменных резисторов)- магнитики поворачиваются. И на али они рублей по 250 (ссылка).
Хорошая весчь! Если у него подрезать (укоротить) пружинку, то усилие страгивания можно опустить до нуля. Ну нам надо чтобы грипса не падала. Сделано - ума здесь не нужно - пару сломать и наловчиться)) Легче не бывает - иначе грипса упадет под собственным весом.
Сложность здесь в электронике. У него два выхода на ось и выход -  +-50мВ. Это очень мало. Два выхода как я понял - типа для компенсации температурного дрейфа (сам не понял). Поэтому если вы это понимаете - можно выводы сложить (предварительно инвертировав один операционным усилителем ОУ), а можно просто использовать один увеличив вывод опять же ОУ. Вот тут есть пример, человек сначала сложил - потом увеличил.

У нас две оси - нужно два ОУ. Нет ничего популярнее, наверно каждая вторая микросхема с 8 ножками - двойной ОУ. Особо качественный нам не нужен. Любой сойдет. Ну LM358 как пример двойного. А если вы уперлись то lm324 - четверной, для всех выходов. По сути это вопрос места около джойстика и вашего усердия в достижении идеала. ОУ надо размещать максимально близко от джойстика (под ним - к примеру) - он усиливает настолько маленькое напряжение, что уже возникает проблема наводок от той же 220в сети. Ну не тянуть же экранированные провода, в самом деле...
ОУ усиливает значение входящего напряжения в количество раз заданное отношением двух резисторов я взял 270кОм (обратная связь) и 10кОм (на вход) и получил 28раз. Т е 50*28=1400мВ. Или от 1.1В до 3.9В. Больше делать не надо поскольку я использовал простенький ОУ - в нижнюю сторону он может еще "работать" а вот к 5В - мертвая зона. Использовать большее усиление вы конечно можете. но получите ассиметричный сигнал - верх обрежется на около 4В. Нам и не нужна большая амплитуда, главное чтобы ардуинка четко разбирала, а ей уже 500мВ достаточно для четкого отслеживания угла наклона джойстика. (в ардуино нано 10бит ацп, 5мВ различает теоретически и бери 10мВ практически, можно было бы и напрямую попробовать работать с 50мВ, но оставлю эти пробы последователям), про 12битные ацп (разрешение типа 1.25мВ на 5В) слышал и про проблемы с ними, тоже можно попробовать, но опять же помним про наводки, провода) Еще один аргумент - попробовать работать с 50мВ напрямую - люди которые будут это использовать, гонять не будут - 5 теоретических "ступенек" они могут и не заметить, главное чтобы не дергало. Зато можно легко использовать оба выхода, суммировать их программно. И это сильно проще. Но тогда надо тянуть много проводов к основному джойстику, или использовать две ардуинки. Т е немного в другом сложность поднабирается.
Для работы ОУ нужен источник опорного напряжения в 2.5В (половина от наших 5В) (есть на схеме в видео) это решается TLE2426ILP - я брал с пошире температурной зоной работы.

А что будет если джойстик залип? Мы же пружинку подрезали, а вдруг грязь. Эти джойстики - не влаго-пыле защищенные. А как переключаться на облегченный? Обязательно нужен второй контур управления! И его я реализовал в виде сенсорной кнопки. Есть готовые модули. Есть  на TTP223 по 20р, но не берите их ссылка
Проблема в том что при долгом нажатии она сбасывается. Но за 20р - возьмите пару удостовериться)
А брать надо на TTP224 4хканальный за 40р ссылка
Да, нам не надо 4 канала, но и бог с лишними, зато эта микросхема не сбрасывается, работает как часы и настроек имеет больше (хоть и не потребовались). На практике я этот модуль опилил раза в четыре уменьшив).
Значит так. Кратковременное касание - управление переходит к облегченному джойстику. Долгое (у меня 1.25с) - вернется на родительский. Причем как только коснулся - значение с джойстика не берется - кресло встает. Это защита на случай залипания, иных проблем. Сенсорным я сделал головку винтика вплотную к джойстику - под тот же палец.

Как подрубить все это к родным мозгам. Ничего лучше как в разрыв между родным джойстиком и мозгами - я не придумал. Там 8жил. 5В, земля, 2 канала - Х, 2 канала - Y, отсутствующая кнопка (но провод есть и он нужен), и переключение выходов. ссылка
По два канала на Х и Y для проверки работоспособности джойстика - я их также завел на ардуинку и как положено - сравниваю, зачем урезать безопасность если этого можно не делать. А вывод с ардуинки приходится делать с помощью двух платок ЦАП по 60р MCP4725 ссылка
Никаким шимом тут не отделаешься, и думаю делать фильтры типа RC тоже не умно. А ЦАП дает отличный аналоговый 12бит сигнал. Нам нужно от 1.1В до 3.9В, здесь также мы видим защиту от замыкания на плюс или ноль - кресло сразу уходит в ошибку, и правильно. 
5В для питания всего я беру с разъема родного джойстика, там на 0.5А вроде как стабилизатор - за глаза. Ардуинка - внутри основного родительского модуля джойстика, 5В на облегченный джойстик через резистор 220Ом - а вдруг вода попадет в легкий джойстик - ничего не погорит.

Про цены вы все поняли - берите все в тройном размере. Если ничего не сжег - значит не работал. Очень полезны стартовые наборы ардуино с али! Провода я использовал стандартные ардуиновские но они толстоваты для размещения ардуинки внутри, лучше тоньше. Для соединения сенсорного модуля с площадкой, которой касается винтик я использовал 2см экранированного кабеля 1.2мм с али - не знаю надо ли но у меня много его. Длинный провод к облегченному джойстику - те же dupont только в термоусадке, довольно жесткий кабель получился, лучше что помягче сделать. Корпус от ссылка
плата для монтажа ссылка
у 4х пинового джойстика 2мм шаг контактов. Добавил пищалку - сигнализировать о проблемах, пока только о поломке основного джойстика (думаю невероятное событие, выпендреж). Разъем родного джойстика 2х4 2мм шаг - я купил колодку 2х5, обкусил и проводов типа dupont 2мм шаг ссылка ссылка

Пробовать все сначала на столе на бредборде!

Короче - обычный детский конструктор на пользу общества! Можно использовать самую разнообразную физику для управления - джойстик это боян. Я НЕ программист, я НЕ электронщик. Я вообще никто, и знаю что теоретически много кто есть, но страна в одном месте и инвалиды сами по себе - ну не смогли найти никого кроме меня...)) Зато теперь вы знаете - это боян. Да, не на пять минут но за полгодика - любой освоится с конструктором для старшеклассников и справится. За то потом и поднастроить можно что хочешь, я сразу режимы дополнительные добавил. И вообще технических проблем у инвалидов много.

Скетч
#include <Wire.h>
#include <EEPROM.h>
#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac0;
Adafruit_MCP4725 dac1;
int x;
int y;
int xh;
int yh;
int a;
int b;
int c;
int d;
int bt;
int speedK;
int trig=1;
int trig1=0;
int trig2=0;
int trig3=0;
unsigned long tm1;
unsigned long tm2;
unsigned long tm3;


void setup() {
//Serial.begin(9600);
pinMode(13,INPUT);
pinMode(2,OUTPUT); 
digitalWrite(2,LOW);
dac0.begin(0x61);
dac1.begin(0x60);

//EEPROM.write(0, 0);
speedK = EEPROM.read(0); //здесь задаем тонко скорость
if(analogRead(A7)>650) EEPROM.write(0, max(speedK-1,0));
 else if(analogRead(A7)<350) EEPROM.write(0, min(speedK+1,4));
if(analogRead(A6)>650) EEPROM.write(0, 0);
speedK = EEPROM.read(0);
}


void loop() {
a = analogRead(A0); //4 выхода с основного и два с облегченного
b = analogRead(A1);
c = analogRead(A2);
d = analogRead(A3);
yh = analogRead(A6);
xh = analogRead(A7);
bt = digitalRead(13); //сенсорная кнопка на 13ом пине, диод удалить

if(a>550 || a<480 || c>550 || c<480) trig=1; //перехват родительским пультом
if(bt != trig3){
  trig1=trig2;
  trig2=trig3;
  trig3=bt;
  tm1=tm2;
  tm2=tm3;
  tm3=millis();   
}
if(trig1==0 && trig2==1 && trig3==0 && millis()-tm2<1250) trig=0;
if(bt==1) trig=1;

if(abs(a-b)<50 && abs(c-d)<50){
  if(trig==0) { //легкий
   if(yh<=560) y = map(yh,275,512,3196-200*speedK,2048); //центр 560 512 c резистором 220ом
   if(yh>560) y = map(yh,512,660,2048,900+200*speedK); //центр 560 512 c резистором
   //if(yh>510 && yh<=610) y = 2048;
   if(xh<=472) x = map(xh,237,440,3196-200*speedK,2048); //центр 472 440 c резистором
   if(xh>472) x = map(xh,435,660,2048,900+200*speedK);} //центр 472 440 c резистором
   //if(xh>422 && xh<=522) x = 2048;
   if(((x-2048)/10)*((x-2048)/10)+((y-2048)/10)*((y-2048)/10)<225){ //мертвая зона кругом радиус 150
    x=2048;
    y=2048;
   }
   
  if(trig==1){ //родительский
   x = 4*c;
   y = 4*a;}
 
  dac0.setVoltage(x, false); //посылаем на ЦАПы
  dac1.setVoltage(y, false);
  }
  else{ //пищит если сломался родной джойстик
  digitalWrite(2,HIGH);
  delay(500);
  digitalWrite(2,LOW);
  delay(500);
  }

}