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

 

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

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

1. Эксплуатация свинцовых аккумуляторов: вопросы и ответы 2 (Свинцовые аккумуляторы) от Дм. (12.12.2019 в 06:21)2. Электро мотоцикл Kawasaki Z-1000 (Электромотоциклы ) от AndreiBaron (12.12.2019 в 06:10)3. Зетта - автомобиль с асинхронными безредукторными мотор-колёсами (Электромобили) от роман73 (12.12.2019 в 06:00)4. Из гироскутера (Детский электротранспорт) от verial (12.12.2019 в 06:00)5. Восстановление АКБ малыми токами по версии Branimir (Свинцовые аккумуляторы) от agarushka (12.12.2019 в 05:52)6. Тормозной сенсор (Электровелосипеды) от Monstersound (12.12.2019 в 05:29)
7. City Coco и всё о них (Электроскутеры) от Электросам (12.12.2019 в 05:29)8. Околомоноколесные обсуждения : ) (Моноколеса (электроунициклы)) от Игорь745 (12.12.2019 в 04:35)9. Суперконденсаторы(Ионисторы) (Источники питания) от Андрей3 (12.12.2019 в 03:57)10. Гироскутер, как источник мотор-колёс? (Электродвигатели и генераторы) от Paxxa (12.12.2019 в 03:54)11. почему электромобили никому не нужны.... (Электромобили) от AlexS4 (12.12.2019 в 03:42)12. Взаимодействие с другими участниками движения (пешеходы, коляски, собаки, авто...) (Моноколеса (электроунициклы)) от AlexS4 (12.12.2019 в 03:20)
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

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

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

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

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);
  }

}