Підключіть еліптичний тренер і pygame

Привіт, друзі! Я купив собі цей пристрій.



З його прямими обов'язками він справився досить задовільно, але був один «але», і це було те, що Speedometer був плутаний у читаннях, і тому продемонстрував різні результати над дистанцією. Якщо ви йдете досить повільно, то прискорювач повністю мовчить. І я вирішив зробити мій Speedometer з... добре, ви знаєте.


Як підключити тренажер і комп'ютер
Перш за все, ми вирішили розпочати роботу, щоб знайти спосіб отримання даних на комп'ютер. Середня лінія вирішила використовувати плату. Ардуїной
Чому? Ардуїно? Тому що немає нічого іншого на руці.
Під час перевірки було встановлено, що два дроти йдуть від тренажера до датчика.


Щоб підключити його до шпильк. Ардуїной І це те, що ми зробили з цим малюнком.


Контакти А0 Залежно від положення педалі буде отримано сигнал різної величини.
У ході експериментів, на цьому варіанті було постарано багато варіантів сигналізації з мікроконтролера до комп'ютера, а в кінці опрацьовано:
Символ постійно подається на комп'ютер "0."Потім, коли на тренажері подається крок,"1."й Наступний крок знову "0." І так далі.
Отримати ескіз.int pin = A0; int ledPin = 13; int minSignal = 600; bool держава Вступ = false; bool lastState = false; bool one Крок = false; void налаштування() {pinMode(pin, INPUT); Mode(ledPin, OUTPUT); Serial.begin(9600); } void loop() {int сигнал = аналоговийRead(pin); якщо (signal > minSignal){Up = false; {Up = true State; {stateppppppppppp = one; indatep=statep=statep=state/statep=state;


Гра.
Що ще писати на Пігра Якщо не гра?

Історія
elliptical trainer - це імітація катання на лижах, тому це буде катання на лижах. Кожен крок, прийнятий на тренажері, робить персонаж в грі. Спочатку я хотів зробити плавний рух / прискорення персонажа, але в кінці я вирішив віддати перевагу точності.

Розрахунок.
Експериментально було встановлено, що за «оптимальні» обставини, одна повна революція дорівнює 4 м. Це, швидше за все, не скільки людина проходить, але скільки центральних прокруток диска. Давайте просто візьміть його як axiom.
На віртуальній трасі 1 метр дорівнює 1пікселеві. Що це, кожен крок рухається пучок 4 пікселів вперед.
Швидкість буде розрахувати кожен крок.
вр до й Українськатент
й = 4 м.
тент - один крок.
Один крок - повна обертання тумб.

гемблинг
Так, будуть діаграми і швидкісний датчик з таймером, але ви хочете дух конкуренції.
Що робити, якщо ви не змагаєтеся з кимось іншим, але з собою? вчора? Покоївка, зроблено.
527192

На вершині сьогодні характер, на дні вчора. Для того, щоб бути більш точним - характер останнього забігу, але погоджуватися, перша версія звучить Cooler.

Технічні характеристики

База даних
Звичайно, якщо необхідно зберегти інформацію про забіги, вам потрібна база даних. Я вирішив використовувати його. м. Львівй У пітон Бібліотека МАГАЗИНИй Клас відповідає за взаємодіюГоловнай
Схема додається.


Приклад коду class DataManager: def_init_(self): self.time = час само.currentTimeForastRace=datetime() self.timeTime=self.time()self.speed=self-impulsive"self(host="self-time", db="ski"self-time"self-time"self-time"self-stemplate"(Race) = 0.Raced=self-time(Rest)=self.


Відео
Як ви можете побачити з скріншоту вище, графіка примітивна, але це головне тут. Бібліотека була використана для її реалізації. Піграй Я вже написаний.

Форми


Русский Українська English pyQtй
Приклад кодуEnglishDeutschPусский简体中文中國傳統EspañolالعربيةFrançaisελληνικάDanskАнглійскаябългарскиCatalàČeskýEestiSuomiGaeilgeहिन्दीHrvatskiMagyarIndonesiaIcelandicItalianoעברי日本の한국의LietuvosLatvijasмакедонскиMalayMaltiNederlandsNorskPolskiPortuguêsRomânescSlovenskýSlovenskiShqiptarCрпскиSvenskaไทยTürkçeYкраїнськийTiếng việtייִדישKiswahili

Дуже сподобалося процес оформлення вікон. Ні менше, ніж в Універсальні інженерні рішенняй
Створені форми в анексі Qt 4 Краторй
Імпортувати їх до uic.loadUi('%s/ui/frm_profile.ui'% DIR, self)
Зв'язані події та методи само.connect(self.bt_ok, SIGNAL("клацання()"), self.bt_ok_clicked) self.connect(self.bt_new, SIGNAL("клацнути()"), self.bt_new_clicked).connect(self.bt_addProfile, SIGNAL("клацнути()"), self.bt_addProfile_clicked.clicked).(IGlicked self-clicked, self-clicked(L.clicked).
І це зробив.
self.formProfile = FormProfile() self.formProfile.show()

Розклад


Русский EnglishРусскийУкраїнськаPolskiItalianoEspañol汉语Bahasa Indonesiaहिन्दीPortuguês日本語DeutschFrançaisภาษาไทยελληνικά اللغة العربية
Ось приклад коду. імпорт matplotlib.pyplot як plt def bt_averageSpeed_clicked(self): ... plt.plot_date(датки, значення, 'b') plt.plot_date(дата, середні значення, 'bo')Speed = len(значення) > 0 і (лямбда: сума(значення) / len(значення) або (ltbda: 0) plt.xlabel(u) "Mean-mean-average швидкість(Idate)(s) p.compate(values) p.g
Хочу зауважити, що для відображення Cyrillic необхідно підключитися до підтримки шрифтів.
від matplotlib імпорт rc font={'family': 'Droid Sans', 'вага': 'normal', 'розмір': 14} rc('font', **font)


Читання даних з arduino
Для цього використовується бібліотека. Про насй
Наступний код працює в окремому режимі.
def GetDataЗ альбомуSimulator(): глобальне значенняЗ альбомуSimulator, isRunnig ser = series.Serial('/dev/ttyACM0', 9600) в той час як isRunnig: значення = ser.readline() спробуйте: значенняЗ альбомуSimulator = int(value) крім:
Сортування valueЗ альбомуSimulator У іншому струмі використовується тільки для читання.
Запуск двох потоків.
t1 = різьблення. Нитка(target=main,args= (self.profileId, self.distanceId) t2 = різьблення.Thread(target=getDataЗ альбомуSimulator) t2.start() t1.start()
Відеодемонстрація бідної якості
Так само, як ви замовляєте.


Я зустрілася з коментарями, критиками та пропозиціями.
Всі джерела тут.

Джерело: habrahabr.ru/post/217891/