This is an old revision of the document!


BMW E36 Instrument Cluster

Introducere

  • Voi realiza un simulator de curse folosind un ceas de bord de la un BMW Seria 3 E36 pentru a afisa diferite informatii din Asseto Corsa, necesare unui pilot de curse.

Descriere generală

  • Utilizatorul se va juca Asseto Corsa, iar ceasurile de bord vor indica viteza, turatia, nivelul de combustibil si temperatura apei din motor.
  • Voi face acest lucru folosind Shared Memory, pentru a comunica intre procese.
  • Pentru Shared Memory, am folosit Python pentru ca exista module specializate in acest sens, iar codul se scrie mult mai repede decat s-ar face in C/C++.

Schema bloc

Componente

Schema Electrica

Ceasurile de bord

Pinii din spate:

Componente arse

Software Design

Pentru a realiza acest proiect, am folosit diferite biblioteci de Python:

  • mmap (alocare memorie)
  • ctypes (pentru c_int32, c_float si c_wchar)
  • serial (comunicare intre Python si Seriala de Arduino)

Alte biblioteci ce pot fi folosite pentru implementarea cu o singura placuta de Arduino:

  • struct - realizeaza o conversie intre valorile din Python si structurile de C, care in Python sunt reprezentate ca obiecte bytes

Cum functioneaza codul?

Folosind un script de Python, preiau informatiile din Assetto Corsa, pe care ulterior, folosind biblioteca Serial, le trimit catre doua placute de Arduino. Cele doua placute de Arduino asteapta un numar exact de octeti pe seriala (4 bytes), pentru a fi sigur ca datele primite sunt aceleasi cu cele trimise.

In functie de valoarea primita, folosind metoda de map() pentru a translata spatiul de valori 750 rpms (motor la relantiu) → 7500 rpms (turatia maxima) in spatiul de valori 50Hz → 350Hz. Ceasurile de E36 functioneaza pe baza de frecventa. Pe masina, viteza si turatia sunt citite de niste senzori magnetici. Senzorul de viteza se afla in diferential. Un ciclu in diferential, ca si la arbore, este reprezentat de un dinte si o pauza. Astfel, in Arduino as avea nevoie de un semnal dreptunghiular care specifica frecventa, avand un duty cycle de 50%. Acest lucru este oferit de functia tone() din Arduino.

Diferential de E36:

Senzor viteza:

De ce am folosit 2 placute de Arduino?

Probleme intalnite

O problema de care m-am lovit in timp ce testam codul a fost aceasta: numarul de octeti asteptati de catre Arduino. Initial, asteptam un numar pozitiv de octeti, ceea ce nu era corect. Existau situatii in care primeam 3 sau 5 octeti, iar viteza se schimba de la 140 km/h la 3 km/h. Teribil!

Rezultate obtinute

Cu ajutorul cunostintelor de PM si SO dobandite in acest semestru, plus muuuuulte ore de cautat pe internet si testat, am reusit sa duc la bun sfarsit acest proiect, pe care eu il vad original. Am trecut prin foarte multe stari emotionale, de la agonie la extaz si inapoi, dar pot spune ca satisfactia de la final a meritat fiecare efort.

Concluzii

Ii incurajez pe toti cei care si-au gasit o pasiune sa isi depaseasca mereu limitele si sa devina din ce in ce mai buni.

Download

Demo magie

Bibliografie

pm/prj2021/avaduva/bmw_e36_instrument_cluster_-_racing_simulator.1622472503.txt.gz · Last modified: 2021/05/31 17:48 by dragos.manolea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0