Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Slot Cars Laser-getriggerde rondetijd GLCD-display

Componenten en benodigdheden

Arduino Mega 2560
× 1
KY 008 Laser
× 1

Apps en online services

Arduino IDE

Over dit project

Inleiding

Ik kocht een paar KY008-lasermodules en een bijpassende sensor, en ik wist dat ik er een cool project mee moest maken. Dus nam het paar, en maakte een elektrische poort voor het bijhouden van de tijd voor de slotcarbaan die al op tafel lag voor mijn zelfrijdende slotcar-project.

De hardware

De 3 hoofdcomponenten zijn de lasermodule, de laserontvangersensor en het GLCD-scherm.

Ik ben dol op het gebruik van GLCD, je kunt hier informatie over de pin-out vinden:https://playground.arduino.cc/Code/GLCDks0108/

En je kunt de bibliotheek hier downloaden:

https://bitbucket.org/bperrybap/openglcd

Ik heb er een mooie en gemakkelijke connector voor gemaakt, zoals te zien is in de onderstaande afbeelding.

De KY008 lasermodule heeft 3 pinnen, -, + en S, ik kort zowel de S als de + in tot de 5V. Als u niet wilt dat de laser altijd aan staat, sluit u de S-pin aan op een digitale pin op de Arduino. als je het ooit hoog zet, gaat de laser aan.

De sensor heeft ook 3 pinnen, GND, VCC en SIGNALE. sluit aan op de voeding en de ingangspin op de Arduino.

De moeilijkste uitdaging in deze build was om alles op één lijn te krijgen.

Je kunt het eindresultaat in deze clip bekijken.


Code

  • Naamloos bestand
Naamloos bestandArduino
/** Tijdregistratie digitale poort* Code door:Tal Ofer* [email protected]*/#include "openGLCD.h"// laps infounsigned long currentRunStartMillis;unsigned long lastRunInMillis;unsigned long bestRunInMillis;int currentLap;unsigned lang opgeslagenMillis;gText t1; // zal runtime latergText t2 definiëren; // zal runtime latergText t3 definiëren; // zal de runtime later definiëren// globaal voor displayint sec_val, milli_val;// laser gate const int gateSensorPin =2; // het nummer van de poortsensor pinint gateSensorState; // de huidige waarde van de sensorint lastgateSensorState =LAAG; // de vorige lezing van sensorunsigned lange lastDebounceTime =0; // de laatste keer dat de sensorpin werd omgeschakeld in debounceDelay =50; // de debouncetijd; verhogen als de output flikkertvoid setup () {// pin-modus pinMode (gateSensorPin, INPUT); vertraging (50); // te laat de sensor en laser werken, dus we krijgen de ronde niet geactiveerd. // start GLCD GLCD.Init (NON_INVERTED); // definieer gebieden t1.DefineArea (textAreaTOP, lcdnums14x24); t2.DefineArea(0, GLCD.CenterY, 8, 2, fixednums7x15); t3.DefineArea(GLCD.CenterX, GLCD.CenterY, 8, 2, fixednums7x15); t3.SetFontColor (WIT); // stel letterkleur in t3.ClearArea(); // print tekst GLCD.SelectFont (System5x7); GLCD.CursorTo(1, 4); GLCD.print("LAATSTE"); GLCD.CursorTo(11, 4); GLCD.print("BESTE"); // reset params currentRunStartMillis =0; lastRunInMillis =0; bestRunInMillis =0; currentLap =0;}void loop () {// lees de staat van de lasersensor:int reading =digitalRead (gateSensorPin); // Als de schakelaar is gewijzigd vanwege ruis of door te drukken op:if (lezing! =lastgateSensorState) { // reset de debounce-timer lastDebounceTime =millis (); } // end if // if passeert de debounce-tijd if ((millis() - lastDebounceTime)> debounceDelay) { if (reading! =gateSensorState) { gateSensorState =lezen; // Als we laag gingen, betekent dit dat de straal gebroken was if (gateSensorState ==LOW) { // sla de milli's op zodat alle wiskunde erop met dezelfde waarde wordt gedaan. opgeslagenMillis =millis(); // als het niet de eerste ronde is if (currentLap>
 0) { // sla de laatste run op lastRunInMillis =savedMillis - currentRunStartMillis; // als de laatste run sneller is dan de beste run if (lastRunInMillis 
 0) { calcResultFromMillis(savedMillis - currentRunStartMillis, &sec_val, &milli_val); } else { calcResultFromMillis(0, &sec_val, &milli_val); } // end if // HUIDIGE RUN t1.CursorTo(3, 0); // kolom &rij is relatief aan tekstgebied t1.Printf(F("%02d.%03d"), sec_val, milli_val); // LAATSTE UITVOERING calcResultFromMillis (lastRunInMillis, &sec_val, &milli_val); t2.CursorTo(1, 1); // kolom &rij is relatief aan tekstgebied t2.Printf(F("%02d.%03d"), sec_val, milli_val); // BEST RUN calcResultFromMillis (bestRunInMillis, &sec_val, &milli_val); t3.CursorTo(1, 1); t3.Printf(F("%02d.%03d"), sec_val, milli_val);} //wnd loop// bereken millis in 2 waarden, seconeds en millis voor displayvoid calcResultFromMillis(unsigned long value, int *sec_val, int * milli_val) { *sec_val =int(waarde / 1000); *milli_val =waarde - *sec_val * 1000;}

Productieproces

  1. Gids voor aluminium lasermarkering
  2. Gids voor lasermarkering
  3. Wat is fiberlasermarkering?
  4. Laseraanwijzer
  5. achtbaan
  6. Halfgeleiderlaser
  7. Solid State Laser
  8. Zandloper
  9. Lasergeleide raket
  10. Kuman TFT 3.5 RetroPie 2018
  11. Rpibot – Over het leren van robotica