Inhoudsopgave:
- Stap 1: 3D-model ontwerpen
- Stap 2: 3D-model en afwerkingen afdrukken
- Stap 3: Componenten
- Stap 4: Coderen (Arduino & Verwerking)
- Stap 5: Circuit
- Stap 6: Prototypetest
- Stap 7: Echte mock-up
- Stap 8: GENIET
Video: Informatiesysteem treinzitplaatsbeschikbaarheid - FGC - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Dit project is gebaseerd op de implementatie, op schaal, van een trein die de mensen die zich in het station bevinden, laat weten welke stoelen vrij zijn. Om het prototype uit te voeren, wordt de Arduino UNO-software gebruikt samen met de Processing voor het grafische gedeelte.
Dit concept zou het mogelijk maken om een revolutie teweeg te brengen in de wereld van het openbaar vervoer, aangezien het alle zitplaatsen van de trein maximaal zou optimaliseren, het gebruik van alle wagons zou garanderen, samen met de mogelijkheid om gegevens te verzamelen en studies uit te voeren die later nauwkeurig zijn. Aan.
Stap 1: 3D-model ontwerpen
Allereerst hebben we uitgebreid onderzoek gedaan naar treinmodellen. Met alle verzamelde informatie is gekozen voor de GTW-trein (geproduceerd door Stadler Rail) die wordt gebruikt op FGC (Ferrocarrils de la Generalitat de Catalunya).
Het werd later ontworpen met de 3D-software PTC Creo het model voor het daaropvolgende 3D-printen.
Stap 2: 3D-model en afwerkingen afdrukken
Zodra de trein is ontworpen, wordt deze doorgegeven aan 3D-printen. Zodra het stuk is afgedrukt, moet het worden gepolijst om een glad oppervlak te krijgen.
Dit project kan ook gedaan worden met bestaande treinmodellen.
Eenmaal gedrukt, worden de definitieve afwerkingen gegeven.
Stap 3: Componenten
Voor de ontwikkeling van dit project zijn de volgende onderdelen nodig:
- FSR 0,04-4,5LBS (Druksensor).
- 1.1K ohm weerstanden
Stap 4: Coderen (Arduino & Verwerking)
Nu is het tijd om de Arduino-code te schrijven waarmee de sensoren een teken naar de verwerkingssoftware kunnen sturen die de informatie grafisch zal verzenden.
Als sensoren hebben we 4 druksensoren voor Arduino die de weerstand variëren afhankelijk van de kracht die erop wordt uitgeoefend. Het doel is dus om te profiteren van het signaal dat door de sensoren wordt verzonden (wanneer de passagiers gaan zitten) om de grafische schermen in Processing te wijzigen.
Vervolgens creëren we het grafische gedeelte waarin we rekening hebben gehouden met het grafische ontwerp van de Ferrocarrils de la Generalitat de Catalunya, om de realiteit op de best mogelijke manier na te bootsen.
Tijdens de verwerking is er een code geschreven die rechtstreeks is verbonden met de arduino-software, op deze manier verandert elke keer dat iemand op een stoel zit, van kleur, zodat de gebruiker op het perron in realtime weet of er stoelen beschikbaar zijn in de trein.
Hier zie je de codering
ARDUINO:
int-pot = A0; // Verbind de middelste pin van de pot met deze pinint pot2 = A1; int pot3 = A2; int pot4 = A3; int lectura1;// variabele voor het opslaan van de potwaarden;
int lectura2;int lectura3; int lectura4;
void setup () {// initialiseer seriële communicatie met een baudrate van 9600 Serial.begin (9600); }
void loop() { String s = ""; // //Llegir sensor1 lectura1 = analogRead (pot); // lectura de analoge waarde if (lectura1 > 10) { s = "1"; vertraging (100); } anders { s = "0"; vertraging (100); } Serie.println(s);
}
VERWERKEN:
importverwerking.serienummer.*; // deze bibliotheek verwerkt de seriële talk String val=""; PImage s0000, s0001, s0010, s0011, s0100, s0101, s0110, s0111, s1000, s1001, s1010, s1011, s1100, s1101, s1110, s1111; Seriële myPort; // Maak een object van de seriële klasse
void setup()// dit wordt maar één keer uitgevoerd{ fullScreen(); background(0);// achtergrondkleur instellen op zwart myPort = new Serial(this, "COM5", 9600);// parameters geven aan object van seriële klasse, zet de com waarmee je arduino is verbonden en de baudrate
s0000 = loadImage ("0000.jpg"); s0001=loadImage("0001.jpg"); s0010=loadImage("0010.jpg"); s0011=loadImage("0011.jpg"); s0100=loadImage("0100.jpg"); s0101=loadImage("0101.jpg"); s0110=loadImage("0110.jpg"); s0111=loadImage("0111.jpg"); s1000=loadImage("1000.jpg"); s1001=loadImage("1001.jpg"); s1010=loadImage("1010.jpg"); s1011=loadImage("1011.jpg"); s1100=loadImage("1100.jpg"); s1101=loadImage("1101.jpg"); s1110=loadImage("1110.jpg"); s1111=loadImage("1111.jpg");
s0000.resize(displayWidth, displayHeight); s0001.resize(displayWidth, displayHeight); s0010.resize(displayWidth, displayHeight); s0011.resize(displayWidth, displayHeight); s0100.resize(displayWidth, displayHeight); s0101.resize(displayWidth, displayHeight); s0110.resize(displayWidth, displayHeight); s0111.resize(displayWidth, displayHeight); s1000.resize(displayWidth, displayHeight); s1001.resize(displayWidth, displayHeight); s1010.resize(displayWidth, displayHeight); s1011.resize(displayWidth, displayHeight); s1100.resize(displayWidth, displayHeight); s1101.resize(displayWidth, displayHeight); s1110.resize(displayWidth, displayHeight); s1111.resize(displayWidth, displayHeight);
val = trim(val);} void draw() { if (val!=null) {
if (val.equals("0001")) { afbeelding(s0001, 0, 0); } else if (val.equals("0010")) { image(s0010, 0, 0); } else if (val.equals("0011")) { image(s0011, 0, 0); } else if (val.equals("0100")) { image(s0100, 0, 0); } else if (val.equals("0101")) { image(s0101, 0, 0); } else if (val.equals("0110")) { image(s0110, 0, 0); } else if (val.equals("0111")) { image(s0111, 0, 0); } else if (val.equals("1000")) { image(s1000, 0, 0); } else if (val.equals("1001")) { image(s1001, 0, 0); } else if (val.equals("1010")) { image(s1010, 0, 0); } else if (val.equals("1011")) { image(s1011, 0, 0); } else if (val.equals("1100")) { image(s1100, 0, 0); } else if (val.equals("1101")) { image(s1101, 0, 0); } else if (val.equals("1110")) { image(s1110, 0, 0); } else if (val.equals("1111")) { image(s1111, 0, 0); } else { afbeelding(s0000, 0, 0); } } }
void serialEvent (Serial myPort)// wanneer een seriële gebeurtenis plaatsvindt, wordt deze uitgevoerd{ val = myPort.readStringUntil('\n'); // zorg ervoor dat onze gegevens niet leeg zijn voordat u doorgaat if (val != null) { //trim witruimte en opmaaktekens (zoals harde return) val = trim(val); println(val); } }
Stap 5: Circuit
Na al het programmeren is het tijd om alle sensoren met het Arduino UNO-bord te verbinden.
De sensoren worden op 4 zetels geplaatst (die later met een doek worden afgedekt) en aan kabels gelast die rechtstreeks naar het moederbord van Arduino UNO gaan. Het signaal dat op het bord wordt ontvangen, wordt verzonden naar een computer die via USB is aangesloten en die de informatie in realtime naar Processing stuurt, waardoor de kleur van de stoel verandert.
U ziet een schema van de verbindingen.
Stap 6: Prototypetest
Zodra de code is geüpload naar het arduino-bord en het verwerkings- en arduino-programma is ingeschakeld, worden de sensoren getest. Op het scherm ziet u de veranderingen in de stoelen als gevolg van de verandering van afbeeldingen op het display die informeren over de stoelen die bezet zijn en nee.
Stap 7: Echte mock-up
De echte applicatie zou proberen het op treinen en platforms van het FGC-netwerk te installeren om reizigers te bedienen.
Stap 8: GENIET
Je hebt eindelijk een Force Sensor Train (prototype) gemaakt waarmee de gebruiker op het perron in realtime weet welke stoel beschikbaar is.
WELKOM IN DE TOEKOMST!
Project gemaakt door Marc Godayol & Federico Domenech