Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Slot Cars Laser Triggered Lap Time Display GLCD

Componentes e suprimentos

Arduino Mega 2560
× 1
KY 008 Laser
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





Introdução


Comprei um par de módulo laser KY008 e um sensor correspondente, e sabia que tinha que fazer um projeto legal com ele. Então peguei o par e criei um portão elétrico de cronometragem para a pista do carro caça-níqueis que já estava na mesa para meu projeto de carro caça-níqueis autônomo.





O Hardware


Os 3 componentes principais são o módulo de laser, o sensor receptor de laser e a tela GLCD.

Eu realmente amo usar GLCD, você pode encontrar informações sobre a pinagem aqui:https://playground.arduino.cc/Code/GLCDks0108/

E você pode baixar a biblioteca aqui:

https://bitbucket.org/bperrybap/openglcd

Criei um conector bacana e fácil para ele, como mostra a imagem abaixo.

O módulo laser KY008 tem 3 pinos, -, + e S, eu apenas encurto o S e o + para 5V. Se você não quiser que o laser fique ligado o tempo todo, conecte o pino S a um pino digital no Arduino. sempre que você definir um valor alto, o laser será ativado.

O sensor também possui 3 pinos, GND, VCC e SIGNALE. conecte à alimentação e ao pino de entrada no Arduino.

O desafio mais difícil nesta construção foi alinhar tudo.

Você pode assistir o resultado final neste clipe.



Código

  • Arquivo sem título
Arquivo sem título Arduino
 / ** Tempo mantendo a porta digital * Código por:Tal Ofer * [email protected]*/#include "openGLCD.h" // voltas infounsigned long currentRunStartMillis; sem sinal longo lastRunInMillis; sem sinal longo bestRunInMillis; int currentLap; não assinado long SavedMillis; gText t1; // definirá o tempo de execução latergText t2; // definirá o tempo de execução latergText t3; // definirá o tempo de execução mais tarde // global para displayint sec_val, milli_val; // laser gate const int gateSensorPin =2; // o número do sensor de porta pinint gateSensorState; // a leitura atual do sensorint lastgateSensorState =LOW; // a leitura anterior de sensorunsigned long lastDebounceTime =0; // a última vez que o pino do sensor foi alternadoint debounceDelay =50; // o tempo de debounce; aumenta se a saída flickersvoid setup () {// modo pin pinMode (gateSensorPin, INPUT); atraso (50); // atrasar o sensor e o laser funcionar, então não vamos acionar a volta. // iniciar GLCD GLCD.Init (NON_INVERTED); // define áreas t1.DefineArea (textAreaTOP, lcdnums14x24); t2.DefineArea (0, GLCD.CenterY, 8, 2, números fixos 7x15); t3.DefineArea (GLCD.CenterX, GLCD.CenterY, 8, 2, números fixos 7x15); t3.SetFontColor (WHITE); // definir a cor da fonte t3.ClearArea (); // imprimir texto GLCD.SelectFont (System5x7); GLCD.CursorTo (1, 4); GLCD.print ("ÚLTIMO"); GLCD.CursorTo (11, 4); GLCD.print ("MELHOR"); // redefine os parâmetros currentRunStartMillis =0; lastRunInMillis =0; bestRunInMillis =0; currentLap =0;} void loop () {// lê o estado do sensor laser:int reading =digitalRead (gateSensorPin); // Se a chave mudou, devido a ruído ou ao pressionar:if (reading! =LastgateSensorState) {// zera o temporizador de debouncing lastDebounceTime =millis (); } // fim se // se passa o tempo de debounce if ((millis () - lastDebounceTime)> debounceDelay) {if (reading! =gateSensorState) {gateSensorState =reading; // Se baixamos, isso significa que o feixe foi quebrado if (gateSensorState ==LOW) {// salve os milis para que toda a matemática seja feita com o mesmo valor. saveMillis =millis (); // se não for a primeira volta if (currentLap>
 0) {// salvar a última execução lastRunInMillis =savedMillis - currentRunStartMillis; // se a última execução for mais rápida, é melhor executar if (lastRunInMillis 
 0) {calcResultFromMillis (savedMillis - currentRunStartMillis, &sec_val, &milli_val); } else {calcResultFromMillis (0, &sec_val, &milli_val); } // termina se // CURRENT RUN t1.CursorTo (3, 0); // coluna e linha são relativas à área de texto t1.Printf (F ("% 02d.% 03d"), sec_val, milli_val); // ÚLTIMA EXECUÇÃO calcResultFromMillis (lastRunInMillis, &sec_val, &milli_val); t2.CursorTo (1, 1); // coluna e linha são relativas à área de texto t2.Printf (F ("% 02d.% 03d"), sec_val, milli_val); // MELHOR EXECUÇÃO calcResultFromMillis (bestRunInMillis, &sec_val, &milli_val); t3.CursorTo (1, 1); t3.Printf (F ("% 02d.% 03d"), sec_val, milli_val);} // loop wnd // calcula milis em 2 valores, segundos e milis para displayvoid calcResultFromMillis (valor longo sem sinal, int * sec_val, int * milli_val) {* sec_val =int (valor / 1000); * milli_val =value - * sec_val * 1000;} 

Processo de manufatura

  1. Guia para marcação a laser em alumínio
  2. Guia para marcação a laser
  3. O que é marcação a laser a fibra?
  4. Ponteiro Laser
  5. Montanha russa
  6. Laser semicondutor
  7. Laser de estado sólido
  8. Ampulheta
  9. Kuman TFT 3.5 RetroPie 2018
  10. Rpibot - Sobre Aprendizado de Robótica