Самодельная умная подсветка на квадрик

raefa

Надоела статичная подсветка на квадрике. Решил немного оживить ее. Появилась идея сделать подсветку, зависимую от положения стиков пульта. На форуме уже решения имеются, но хотел бы описать свой вариант и представить его с максимально понятным описанием.
На лучи приклеены светодиодные полоски по 2шт на луч. Передние – белые, задние – красные. Делал аналогию с автомобилем, чтобы проще ориентироваться.
Работа подсветки должна осуществляться следующим образом: при исходном положении стиков (газ на минимуме, остальные в центре) подсветка не горит, при повышении газа подсветка загорается и постоянно подсвечиваются все лучи. Далее при отклонении стика рыскания сделать имитацию кругового вращения влево и вправо соответственно. При отклонении стиков крена и тангажа мигать подсветкой лучей в соответствующем направлении, оставшиеся лучи должны подсвечиваться постоянно. При отклонении стиков по диагоналям – мигать только одним. При возврате стиков (кроме газа) в центральные положения – прекращать мигания и включить все. Необходимо учесть триммеры стиков и возможные реверсы газа и тангажа.

Набросал картинку поведения:

Далее собираем схему. Понадобится AVR-контроллер, способный работать на 16МГц, 4 NPN транзистора (например BC846B ), светодиодные ленты на 12Вольт, кварцевый резонатор 16МГц, два конденсатора 22пф, 5 резисторов 1кОм, кнопка без фиксатора или перемычка. Перемычка служит для включения режима настройки границ срабатывания стиков (с учетом триммеров) и настройки реверса газа и тангажа (делалось под мою аппаратуру Turnigy 9x и полетный контроллер КК; в других конфигурациях возможно придется переписывать код). Под использование других напряжений и светодиодных лент необходимо сделать выбор других транзисторов.

Электрическая принципиальная схема:

Использовал контроллер ATMega8A из более дешевых и доступных. Для прошивки можно использовать как и «5и контактный» программатор, так и любой другой. Я использовал USBasp, т.к. он поддерживается средой разработки Arduino. На плате сделал разъем внутрисхемного программирования. Для начала необходимо выставить фьюзы на контроллере для использования внешнего кварца на 16МГц. Выставлял программой «eXtreme Burner – AVR». Фьюзы Low EF, High C9. Конденсаторы у кварца лучше использовать 22пф, но также должно работать и от 18 до 30пф. При подключении к приемнику коптера сделал параллельные соединения проводников, которые подключил к своему устройству. Запитал устройство (+5В) от свободных контактов приемника, светодиодные ленты(+11,1) от платы разводки питания с аккумулятора на регуляторы двигателей.

Устройство нуждается в настройке. Рекомендую производить со СНЯТЫМИ пропеллерами во избежание чего-либо ужасного, т.к. может сработать арминг во время движения стиков. Лучше даже будет откинуть проводки, идущие на полетный контроллер или обесточить его.
Порядок настройки:

  1.  Установить перемычку на устройство при отключенном питании.  
    
  2.  Включить пульт, приемник и устройство.  
    
  3.  Передние светодиоды моргнут длинным и коротким (\_.) и затем все будут быстро моргать короткими (………) в течение 15 секунд.  
    
  4.  Во время моргания надо по два раза отвести стики в крайние угловые положения. Я делал вращательными движениями против часовой стрелки.  
    
  5.  При завершении моргания светодиоды погаснут и задние моргнут длинным и коротким (\_.), показывая конец установки границ и запись в EEPROM. После этого перемычку снимаем.  
    
  6.  Далее отведено 5 секунд для установки реверса газа, в течение которых, по необходимости установить перемычку. Если перемычка не установлена, то реверса не будет, соответственно включится установка реверса, если перемычка установлена. По истечении 5и секунд мигнут левые передние и задние светодиоды. В этот момент опрашивается перемычка и производится запись в EEPROM. После этого перемычку снимаем.  
    
  7.  Далее отведено 5 секунд для установки реверса тангажа, в течение которых, по необходимости установить перемычку. Если перемычка не установлена, то реверса не будет, соответственно включится установка реверса, если перемычка установлена. По истечении 5и секунд мигнут правые передние и задние светодиоды. В этот момент опрашивается перемычка и производится запись в EEPROM. После этого перемычку снимаем.  
    
  8.  Отключаем устройство и включаем со снятой перемычкой.  
    
  9.  Далее необходимо проверить работу. Начинаем повышать газ и подсветка должна загореться. Если загорается при нижнем положении стика и гаснет при верхнем, то необходимо провести реверс настройки газа. Проверяем реакцию на отклонение рыскания. Подсветка должна мигать кругом в сторону отклонения. Проверяем отклонение крена и тангажа отдельно, а также вместе по диагоналям. Если при отклонении стика тангажа вверх, мигают задние светодиоды и отклонении вниз – передние, то необходимо провести реверс настройки тангажа. Для реверса необходимо опять выполнить настройку с начала(пункт 1).
    

После настройки, если снимались провода или питание с полетного контроллера, вернуть все подключения. Если после настройки устройства проводилось триммирование стиков, то настройку следует сделать повторно.

Hex файл во вложении.

Плюсы:
Динамичное оформление коптера.
Настройка реверсов.

Минусы:
После триммирования необходимо заново выполнить настройку.

Испытаний в полевых условиях пока не было. Будут в ближайшие дни. Может еще какие плюсы/минусы появятся. Видео немного позже. 😉
Если кому интересна идея – пробуем и делимся отзывами!

r_lights_v1.rar

sulaex

Если использовать в качестве подсветки, то нафик надо это мигание?
Если создания эффектов для публики, тогда уж добавьте регистров и сделайте полноценную подсветку.
Например при набирании высоты огоньки сбегаются создавая эффект собирания света в центр, опускаясь вниз наоборот огоньки разбегаются от центра.
Так же при маневрировании создавать эффекты отталкивания светом.
Представляю потом заголовки газет и новости об НЛО в вашем городе 😉
У нас тут на днях (видите ли у нас полярная ночь), запускали японские светильники, так все стояли с разинутыми ртами. Что будет при подсветке коптера, я промолчу 😃

raefa

Летать только учусь и визуализация думаю будет полезна. Пока просто лучи горели - ориентировался перед/зад. Теперь думаю еще и подсказки от стиков получить.😃
Ну и схемотехнику затронул, упростив кому-то поиски.

cylllka
raefa:

Летать только учусь и визуализация думаю будет полезна. Пока просто лучи горели - ориентировался перед/зад. Теперь думаю еще и подсказки от стиков получить.😃
Ну и схемотехнику затронул, упростив кому-то поиски.

Чем меньше морочатся с такой подсветкой, тем быстрее научитесь летать. Мигания вредны, ибо в момент потухания лампочки можно потерять ориентацию. Лучше непрерывное свечение. Стики учитесь руками чувствовать, настройте комфортное сопротивление пружинкой.
з.ы. Хотя за реализацию - молодец.
з.з.ы. И пока не научитесь делать восьмерки, то далеко и высоко не отлетайте от себя.

raefa

Мигает быстро. 50мс вкл / 50мс выкл. Спасибо, надо учиться. Пока в зале тренируюсь. На улице пока не ахти с КК.

mataor
cylllka:

Мигания вредны, ибо в момент потухания лампочки можно потерять ориентацию. Лучше непрерывное свечение.

не сказал бы… вначале пробовал статичную, потом подключил через виевский ледфлешер - большая разница, коптер намного более заметен что днем что ночью

а за идею - молодец… очень даже интересное решение)))

cylllka
mataor:

не сказал бы… вначале пробовал статичную, потом подключил через виевский ледфлешер - большая разница, коптер намного более заметен что днем что ночью

Заметность и читаемость направления разные вещи. С постоянным свечением я в полной темноте могу 3Д покрутить и пожечь, с миганием это черевато + ночью глаза напрягает мерцание

raefa
mataor:

потом подключил через виевский ледфлешер

Сергей, с этой платой не знаком. И что он из себя представляет? Как ведет себя подсветка? Еще лучше ссылку.

cylllka:

Заметность и читаемость направления разные вещи

Александр, “читаемостью” что имеется ввиду? Просто горят? Или ты бы предложил какой вариант читаемости с миганием?

mataor:

потом подключил через виевский ледфлешер

Сергей, с этой платой не знаком. И что он из себя представляет? Как ведет себя подсветка? Еще лучше ссылку.

cylllka:

Заметность и читаемость направления разные вещи

Александр, “читаемостью” что имеется ввиду? Просто горят? Или ты бы предложил какой вариант читаемости с миганием?

Попробовал полетать. Мигание при рыскании не очень понравилось. Сделал, чтобы мигали все одинаково 10мс вкл/10мс выкл. По крену и тангажу очень даже понравилось. Во вложении добавил версию без вращения по рысканию.

Завтра в плане полетать в зале. Видео выложу.

r_lights_v2_wo_yaw.rar

cylllka
raefa:

Александр, “читаемостью” что имеется ввиду? Просто горят? Или ты бы предложил какой вариант читаемости с миганием?

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

А тут сразу 4 квадрика в ночном небе

raefa

Александр, на первом видео какой контроллер?

cylllka
raefa:

Александр, на первом видео какой контроллер?

Кук родимый. Там у всех 4х КУКи. На них летать учились.

raefa

А то смотрю уж очень что-то знакомое)))

Zam888

Прочитав первый пост чуть не подскачил травить плату а тут вы всю охоту отбили. Автор молоток! Соглашусь на коптере эти маргания всякие будут не кстати. Но всеже займу завтра себя этой платкой, как раз регуль паленый валяется без дела.

cylllka
Zam888:

Автор молоток!

А нито и не спорит. 😃 Просто отписали мнения исходя из опыта. Но каждый для себя решает как летать

devv

Для мигания купил на концы лучей 4 стробоскопа (2 красных и 2 зеленых)
тут - www.ekits.ru/index.php?productID=2666
Всё поставить не могу
Но товарищ поставил уже и время вспышех у всех 4 разное чуть чуть и разбег получается…

raefa

У меня снизу тоже стоят на вид 2 одинаковых стробоскопа. Период моргания разный. Сначала хотел сделать отключаемую с аппы подсветку и спаял простенький RC-свитч (www.sentex.net/~mec1995/gadgets/rc-sw.htm), но то ли компоненты плыли по температуре, то ли от термоусадки что-то было не так, то ли конденсатор был древним, и из-за этого не прижилась у меня эта штука (после пропайки, и шевеления компонентов и включения сразу все работало, но стоит ночь не использовать, так больше все это дело не включается).

НО! Стробоскопы, включенные через этот RC-свитч - мигали в такт.

А мне все-таки больше нравится, когда есть разница, т.к. стоят не на лучах.

Кстати, кто что скажет про влияние данного устройства на работу полетного контроллера? Думаю ничего страшного не должно быть, но есть сомнения.

1 month later
shura2000

Ставил на Гексу вот такую фиговину www.hobbyking.com/hobbyking/…/uh_viewItem.asp?idPr…
вместо RGB ленты припаял обычные одноцветные. Получилось как бы 3 канала. На гексе наклеил их на противоположные лучи. Эффекты переключаются с аппы, от строба до бегущих огней.

Dreadnought

Идея и реализация мне понравились. Пожалуйста, как будут видео полётов- покажите и сюда тоже.

Dreadnought

Очень занятно вышло! А частота моргания же зависит от величины отклонения стика? то есть - чем больше отклонение тем больше интервалы?

raefa

Спасибо. Зависимости нет. Специально не делал, т.к. с малой разницей особо заметно не будет, а если большую разницу, то луч будет почти гаснуть, а тут уже ИМХО непонятки читаемости могут быть.

shura2000

лучше сделать подсветку с контролем напряжения акка. Как было на Руссокоптере. Падает напряжение до определенного значения, подсветка начинает моргать.

chanov

А исходный код глянуть то можно, или тайна за печатями? )
p/s себе решил такой огород не делать … смысла и информативности для меня в этой ёлке маловато, разве что для зевак хорошо ) …
p/p/s но включение по газу и просто мигание (затухание) перед-зад сделать конечно можно будет на гексу.

raefa

Вроде то ничего секретного нет. 😃
Если кто будет юзать код, то прошу все дополнения/изменения/предложения/улучшения/новые_идеи тоже выкладывать сюда.

#include <EEPROM.h> // подключить библиотеку
int a=100, b=100, t=0, y=0, r=0, p=0; // a= время включенного, b = время выключенного, t - throttle, y - yaw, r - roll, p - pitch
int jumper, writed=0, readed=0, temp, i; //джампер, записано в EEPROM, временная
int Tmin=20000, Tmax=0, Ymin=20000, Ymax=0, Rmin=20000, Rmax=0, Pmin=20000, Pmax=0; //Максимальные значения сигнала
int Tmi=0, Tma=0, Ymi=0, Yma=0, Rmi=0, Rma=0, Pmi=0, Pma=0; //Границы срабатывания
int Tinv=0,Pinv=0; //инвертирование Throttle и Pitch
//Tinv = 0 - газ не инвертирован; 1 - газ инвертирован
//Tinv = 0 - тангаж не инвертирован; 1 - тангаж инвертирован
//читается состояние перемычки после записи концов стиков

///////////////////////////////////////////////////////////////////////////
// подпрограммы записи и чтения Integer (2 байта) - указывать четные байты
///////////////////////////////////////////////////////////////////////////
void EW(int p_address, int p_value)
        {
        byte lowByte = ((p_value >> 0) & 0xFF);
        byte highByte = ((p_value >> 8) & 0xFF);
        EEPROM.write(p_address, lowByte);
        EEPROM.write(p_address + 1, highByte);
        }
unsigned int ER(int p_address)
        {
        byte lowByte = EEPROM.read(p_address);
        byte highByte = EEPROM.read(p_address + 1);
        return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
        }
///////////////////////////////////////////////////////////////////////////
void setup()
{
  delay(2000);
     digitalWrite(4, 1); digitalWrite(5, 1);
     delay(700);
     digitalWrite(4, 0); digitalWrite(5, 0);
     delay(100);
     digitalWrite(4, 1); digitalWrite(5, 1);
     delay(100);
     digitalWrite(4, 0); digitalWrite(5, 0);
     delay(100);
  pinMode(0, INPUT);    // вход throttle
  pinMode(1, INPUT);    // вход yaw
  pinMode(2, INPUT);    // вход roll
  pinMode(3, INPUT);    // вход pitch
  pinMode(4, OUTPUT);    // выход на подсветку FL
  pinMode(5, OUTPUT);    // выход на подсветку FR
  pinMode(6, OUTPUT);    // выход на подсветку RL
  pinMode(7, OUTPUT);    // выход на подсветку RR
  pinMode(8, INPUT);
  jumper=0;

jumper=digitalRead(8);
if (jumper==1) //если джампер установлен, то выполнять калибровку
{
for (int i=0; i <= 150; i++)//150 циклов для чтения отклонения стиков (15 секунд)
  {
  digitalWrite(4, 1); digitalWrite(5, 1); digitalWrite(6, 1); digitalWrite(7, 1);
  delay(10);
  t = pulseIn(0,HIGH,20000);
  y = pulseIn(1,HIGH,20000);
  r = pulseIn(2,HIGH,20000);
  p = pulseIn(3,HIGH,20000);
  if (t<Tmin) {Tmin=t;} //поиск минимальных/максимальных
  if (t>Tmax) {Tmax=t;}
  if (y<Ymin) {Ymin=y;}
  if (y>Ymax) {Ymax=y;}
  if (r<Rmin) {Rmin=r;}
  if (r>Rmax) {Rmax=r;}
  if (p<Pmin) {Pmin=p;}
  if (p>Pmax) {Pmax=p;}
  digitalWrite(4, 0); digitalWrite(5, 0); digitalWrite(6, 0); digitalWrite(7, 0);
  delay(10);
  }
  if (Tmin!=20000 && Tmax!=0 && Ymin!=20000 && Ymax!=0 && Rmin!=20000 && Rmax!=0 && Pmin!=20000 && Pmax!=0)
  {
  Tmi=Tmin+50; //граница начала срабатывания по газу
  Tma=Tmax-50;
  Ymi=(Ymin+Ymax)/2-40; Yma=(Ymin+Ymax)/2+40;//границы начал срабатываний
  Rmi=(Rmin+Rmax)/2-40; Rma=(Rmin+Rmax)/2+40;
  Pmi=(Pmin+Pmax)/2-40; Pma=(Pmin+Pmax)/2+40;
  if (writed==0)//если не записано, то писать
    {
      EW(0,Tmi);  delay(100); EW(2,Tma);  delay(100);
      EW(4,Ymi);  delay(100); EW(6,Yma);  delay(100);
      EW(8,Rmi);  delay(100); EW(10,Rma); delay(100);
      EW(12,Pmi); delay(100); EW(14,Pma); delay(100);
      EW(16,Tinv);delay(100); EW(18,Pinv);delay(100);
//запись минимума максимума для проверки
      EW(20,Tmin); delay(100); EW(22,Tmax); delay(100);
      EW(24,Ymin); delay(100); EW(26,Ymax); delay(100);
      EW(28,Rmin); delay(100); EW(30,Rmax); delay(100);
      EW(32,Pmin); delay(100); EW(34,Pmax); delay(100);
      EW(36,Tinv); delay(100); EW(38,Pinv); delay(100);
      writed=1;
    }//конец записи
  if (writed==1)//если записано, то мигнуть длинный и короткий
   {
     digitalWrite(6, 1); digitalWrite(7, 1);
     delay(700);
     digitalWrite(6, 0); digitalWrite(7, 0);
     delay(100);
     digitalWrite(6, 1); digitalWrite(7, 1);
     delay(100);
     digitalWrite(6, 0); digitalWrite(7, 0);
     delay(100);
     writed=2;
     jumper=0;
    } //конец мигания подтверждения конца

    for (i=0; i<=5000; i++)
    {
      Tinv=digitalRead(8); //проверка и запись состояния джампера инвертора газа
      delay(1);
    }
    EW(16,Tinv);delay(100);
     digitalWrite(4, 1); digitalWrite(6, 1);
     delay(700);
     digitalWrite(4, 0); digitalWrite(6, 0);
     delay(100);
     digitalWrite(4, 1); digitalWrite(6, 1);
     delay(100);
     digitalWrite(4, 0); digitalWrite(6, 0);
     delay(100);

    for (i=0; i<=5000; i++)
    {
      Pinv=digitalRead(8); //проверка и запись состояния джампера инвертора тангажа
      delay(1);
    }
    EW(18,Pinv);delay(100);
     digitalWrite(5, 1); digitalWrite(7, 1);
     delay(700);
     digitalWrite(5, 0); digitalWrite(7, 0);
     delay(100);
     digitalWrite(5, 1); digitalWrite(7, 1);
     delay(100);
     digitalWrite(5, 0); digitalWrite(7, 0);
     delay(100);
  } // конец сравнения всех
}


}
void loop ()
{
/////////////////////////////////////////////////////////////////////////////////////////
if (jumper==0)//если джампер снят, то выполнять программу
{
//считать с EEPROM
if (readed==0)//если не записано, то писать
  {
  Tmi=ER(0);   Tma=ER(2);
  Ymi=ER(4);   Yma=ER(6);
  Rmi=ER(8);   Rma=ER(10);
  Pmi=ER(12);  Pma=ER(14);
  Tinv=ER(16); Pinv=ER(18);
  readed=1;
  }
else if (readed==1)
{
//читать стики
t = pulseIn(0,HIGH,20000);
y = pulseIn(1,HIGH,20000);
r = pulseIn(2,HIGH,20000);
p = pulseIn(3,HIGH,20000);
if ((t<Tmi && Tinv==0) || (t>Tma && Tinv==1))    //Если газ низкий и нет инверсии, то выключить все (реверс)
  {
    digitalWrite(4, 0);
    digitalWrite(5, 0);
    digitalWrite(6, 0);
    digitalWrite(7, 0);
  }
  else
  if ((t>=Tmi && Tinv==0) || (t<=Tma && Tinv==1))  // При увеличении газа включить все
    {
      digitalWrite(4, 1);
      digitalWrite(5, 1);
      digitalWrite(6, 1);
      digitalWrite(7, 1);
      a=7, b=7;
      if (y<Ymi)    // YAW При развороте влево (ПРОВЕРИТЬ), иначе вправо
        {
        digitalWrite(4, 1); digitalWrite(5, 1); digitalWrite(6, 1); digitalWrite(7, 1);
        delay(a);
        digitalWrite(4, 0); digitalWrite(5, 0); digitalWrite(6, 0); digitalWrite(7, 0);
        delay(b);
        }
        else
        if (y>Yma)
          {
        digitalWrite(4, 1); digitalWrite(5, 1); digitalWrite(6, 1); digitalWrite(7, 1);
        delay(a);
        digitalWrite(4, 0); digitalWrite(5, 0); digitalWrite(6, 0); digitalWrite(7, 0);
        delay(b);
          }
          else
          {
      a=20, b=20;
          digitalWrite(4, 1);
      digitalWrite(5, 1);
      digitalWrite(6, 1);
      digitalWrite(7, 1);
        if (r<Rmi && (p>Pmi && p<Pma))    // ROLL При наклоне влево мигнуть, иначе вправо мигнуть (ПРОВЕРИТЬ)
      {
            digitalWrite(4, 0);
        digitalWrite(5, 1);
        digitalWrite(6, 0);
        digitalWrite(7, 1);
        digitalWrite(4, 1); digitalWrite(6, 1); delay(a);
        digitalWrite(4, 0); digitalWrite(6, 0); delay(a);
      }
      else if (r>Rma && (p>Pmi && p<Pma))
      {
          digitalWrite(4, 1);
          digitalWrite(5, 0);
          digitalWrite(6, 1);
          digitalWrite(7, 0);
          digitalWrite(5, 1); digitalWrite(7, 1); delay(a);
          digitalWrite(5, 0); digitalWrite(7, 0); delay(a);
      }
        if (((p<Pmi && Pinv==1) && (r>Rmi && r<Rma)) || ((p>Pma && Pinv==0) && (r>Rmi && r<Rma)))    // PITCH При наклоне назад мигнуть, иначе вперед мигнуть (ПРОВЕРИТЬ)
      {
        digitalWrite(4, 0);
        digitalWrite(5, 0);
        digitalWrite(6, 1);
        digitalWrite(7, 1);
        digitalWrite(4, 1); digitalWrite(5, 1); delay(a);
        digitalWrite(4, 0); digitalWrite(5, 0); delay(a);
      }
      else if (((p>Pma && Pinv==1) && (r>Rmi && r<Rma)) || ((p<Pmi && Pinv==0) && (r>Rmi && r<Rma)))
      {
          digitalWrite(4, 1);
          digitalWrite(5, 1);
          digitalWrite(6, 0);
          digitalWrite(7, 0);
          digitalWrite(6, 1); digitalWrite(7, 1); delay(a);
          digitalWrite(6, 0); digitalWrite(7, 0); delay(a);
      }
      if ((r<Rmi && (p<Pmi && Pinv==0)) || (r<Rmi && (p>Pma && Pinv==1))) //диагональ1, < - влево назад, > вправо вперед
        {
          digitalWrite(4, 1);
      digitalWrite(5, 1);
      digitalWrite(6, 0);
      digitalWrite(7, 1);
      digitalWrite(6, 1); delay(a);
      digitalWrite(6, 0); delay(a);
        }
        else if ((r>Rma && (p>Pma && Pinv==0)) || (r>Rma && (p<Pmi && Pinv==1)))
        {
          digitalWrite(4, 1);
      digitalWrite(5, 0);
      digitalWrite(6, 1);
      digitalWrite(7, 1);
      digitalWrite(5, 1); delay(a);
      digitalWrite(5, 0); delay(a);
        }
      if ((r<Rmi && (p>Pma && Pinv==0)) || (r<Rmi && (p<Pmi && Pinv==1)))//диагональ2, < - влево вперед, > вправо назад
        {
          digitalWrite(4, 0);
      digitalWrite(5, 1);
      digitalWrite(6, 1);
      digitalWrite(7, 1);
      digitalWrite(4, 1); delay(a);
      digitalWrite(4, 0); delay(a);
        }
        else if ((r>Rma && (p<Pmi && Pinv==0)) || (r>Rma && (p>Pma && Pinv==1)))
        {
          digitalWrite(4, 1);
      digitalWrite(5, 1);
      digitalWrite(6, 1);
      digitalWrite(7, 0);
      digitalWrite(7, 1); delay(a);
      digitalWrite(7, 0); delay(a);
        }
      } //YAW end
    } //throttle end
  } //readed end
} //jumper end
}