Inhaltsverzeichnis:
- Schritt 1: Materialien
- Schritt 2: Das Design verstehen
- Schritt 3: Codieren von VHDL
- Schritt 4: Arduino codieren
- Schritt 5: Verdrahten der Hardware
Video: Kraftstoffeffizienz-Detektor - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Von: Danica Fujiwara und William McGrouther
Autos sind heute das wichtigste Fortbewegungsmittel der Welt. Insbesondere in Kalifornien sind wir von Straßen, Autobahnen und Mautstraßen umgeben, auf denen täglich Tausende von Autos fahren. Autos verbrauchen jedoch Benzin und Kalifornien verbraucht am meisten Benzin als jeder andere Bundesstaat der USA, etwa 4.500 Gallonen pro Tag. Für unser CPE 133 Final-Projekt haben wir uns entschieden, ein System zu entwickeln, mit dem es die Geschwindigkeit eines Autos verfolgen und feststellen kann, ob es die effizienteste Geschwindigkeit für den besten Benzinverbrauch oder Kraftstoffverbrauch überschreitet. Dieses Projekt würde den Fahrern helfen, sich ihres Kraftstoffverbrauchs bewusst zu werden, was ihnen hoffentlich helfen würde, Geld zu sparen, weniger Benzin zu verbrauchen und weniger Luftverschmutzung zu verursachen.
Schritt 1: Materialien
Benötigte Materialien für dieses Projekt:
- Basys 3 FPGA
- Arduino Uno
- Steckbrett
- Adafruit BNO055 Absoluter Orientierungssensor
- Männlich zu männlichen Drähten
Schritt 2: Das Design verstehen
Endliches Zustandsdiagramm
Dieses Projekt hat zwei verschiedene Zustände innerhalb des oben gezeigten endlichen Zustandsdiagramms. Das Licht kann entweder eingeschaltet (durch „1“dargestellt) oder ausgeschaltet (durch „0“dargestellt) sein. Der Zustand ändert sich abhängig von der Eingabe der Nachführgeschwindigkeit (ts) und der konstanten optimalen Geschwindigkeit.
Black-Box-Diagramm
Oben befindet sich auch ein Black-Box-Diagramm des Fuel Efficiency-Moduls, das das Schema des Geschwindigkeitskomparators und der Sieben-Segment-Anzeige enthält, die weiter unten erläutert werden. Dieser VHDL-Code erhält einen 8-Bit-Eingang aus den Messungen des Beschleunigungsmessers, der mit dem Arduino verbunden ist.
Schritt 3: Codieren von VHDL
Für dieses Projekt gibt es drei VHDL-Dateien, die unser Design aufbauen, das Fuel_Efficency_FinalProject-Modul, das Speed_Comparator-Modul und das sseg_dec-Modul, wobei sich Speed_Comparator und sseg_dec auf der unteren Ebene befinden, um das Fuel Efficiency-Modul zu bilden.
Das Geschwindigkeitskomparatormodul
Dieses Modul nimmt eine 8-Bit-Geschwindigkeit in Meilen pro Stunde auf und vergleicht sie mit der optimalen Geschwindigkeit für den geringsten Gasverbrauch. Die durchschnittliche optimale Geschwindigkeit für den besten Benzinverbrauch eines Autos beträgt etwa 55 Meilen pro Stunde und weniger. Dies kann jedoch von Auto zu Auto variieren und kann innerhalb des Moduls angepasst werden. Die Zeile 45 des Codes, die zur persönlichen Optimierung geändert werden kann, ist unten gezeigt
if (tracking > "00110111") then
Wobei „00110111“(55 in binärer Form) in eine beliebige 8-Bit-Zahl für die ideale Geschwindigkeit Ihres persönlichen Autos für den geringsten Kraftstoffverbrauch geändert werden kann.
Wenn die Geschwindigkeit über dem optimalen Wert liegt, schaltet sich das Licht ein und weist darauf hin, dass das Auto nicht die maximale Kraftstoffeffizienz verbraucht.
Das Sieben-Segment-Anzeigemodul
Dieses Modul nimmt eine 8-Bit-Geschwindigkeit in Meilen pro Stunde auf und zeigt die Geschwindigkeit auf der Sieben-Segment-Anzeige an. Dies würde es dem Benutzer ermöglichen, zu wissen, wie schnell er wissen wird, ob er oder sie langsamer werden muss. Dieses Modul wurde uns in unserer Klasse gegeben und wurde von Bryan Meally geschrieben, das die Komponenten bin2bcdconv enthält, die die binäre 8-Bit-Eingabe in eine BCD-Form umwandeln, die einfacher zu decodieren ist, und clk_div, damit das Display eine Zahl mit 3 Ziffern visuell anzeigen kann durch Ändern des Anodenausgangs bei einer hohen Taktfrequenz. Dieser Code akzeptiert eine 8-Bit-Zahl, wandelt die Zahl in eine lesbare Anzeige auf dem basys 3-Board um.
Das Fuel Efficiency Modul
Dies ist die Hauptdatei, die die obigen Module als Komponenten verwendet. Seine Eingaben sind der Takt und die Tracking-Geschwindigkeit. Die Uhr ist auf der basys 3-Platine eingebaut und die Tracking-Geschwindigkeit wird durch den Ausgang des Arduino gegeben, der mit dem analogen Signal pmod-Port (XADC) verbunden ist. Jedes Bit der 8-Bit-Tracking-Geschwindigkeit wird den Ports zugeordnet, die im Verdrahtungsabschnitt in Schritt 4 gezeigt werden. Weitere Einschränkungen von Basys 3 finden Sie in Basys_3_Master.xdc.
Schritt 4: Arduino codieren
Dieses Projekt verwendet eine Haupt-Arduino-Datei, die die Verwendung mehrerer Bibliotheken erfordert, von denen einige bereits in Ihrem Arduino-Programm enthalten sind und andere entweder von dieser Anleitung oder der Adafruit-Website (Link unten) heruntergeladen werden müssen.
Bibliotheken
Link zur Adafruit BNO055-Seite:
Adafruit hat 2 Bibliotheken für die Verwendung des BNO055 entwickelt und gibt Beispiele für deren Verwendung. In diesem Projekt verwenden wir die.getVector-Funktion, damit das Arduino die Daten des Beschleunigungsmessers ausgibt.
Dieses Projekt verwendet auch einige Bibliotheken, die bereits im Arduino-Programm installiert sind, wie die Mathematikbibliothek.
Hauptdatei
Diese Datei verwendet die Beschleunigungsmesserdaten der.getVector-Funktion und verwendet mathematische Gleichungen, um sie in eine Geschwindigkeit in Meilen pro Stunde umzuwandeln, die dann in 8-Bit-Daten an das Basys 3 ausgegeben wird (weitere Informationen finden Sie im Abschnitt "Verdrahten der Hardware".) Information).
Schritt 5: Verdrahten der Hardware
Arduino-Verkabelung
Der Arduino sollte wie in den obigen Bildern mit dem Steckbrett verdrahtet werden.
Basys 3 Verkabelung
Die Ausgänge des Arduino werden den Eingängen des Basys 3 über die analogen Signal pmod JXADC-Ports zugeordnet. Jedes Bit der 8-Bit-Tracking-Geschwindigkeit kann mit einem der im Bild oben gezeigten Pins verbunden werden. Das niedrigstwertige Bit (digitaler Pin 7) wird mit ts(7) verbunden und das höchstwertige Bit (digitaler Pin 0) wird mit ts(0) verbunden.