Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Игровые автоматы с лазерным запуском Время прохождения круга GLCD Дисплей

Компоненты и расходные материалы

Arduino Mega 2560
× 1
KY 008 Laser
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Введение

Я купил пару лазерных модулей KY008 и соответствующий датчик, и я знал, что мне нужно сделать с ними какой-нибудь крутой проект. Итак, взял пару и создал электрические ворота для отсчета времени для трека слот-машины, который уже был на столе для моего проекта с самоуправляемым слот-автомобилем.

Оборудование

Три основных компонента:лазерный модуль, датчик лазерного приемника и экран GLCD.

Мне очень нравится использовать GLCD, вы можете найти информацию о распиновке здесь:https://playground.arduino.cc/Code/GLCDks0108/

А скачать библиотеку можно отсюда:

https://bitbucket.org/bperrybap/openglcd

Я создал для него красивый и простой соединитель, как показано на изображении ниже.

Лазерный модуль KY008 имеет 3 контакта, -, + и S, я просто сокращаю S и + до 5V. Если вы не хотите, чтобы лазер был включен все время, подключите вывод S к цифровому выводу на Arduino. когда вы установите его высоко, лазер включится.

Датчик также имеет 3 контакта:GND, VCC и SIGNALE. подключите к источнику питания и входному контакту на Arduino.

Самой сложной задачей в этой сборке было согласовать все.

Вы можете посмотреть окончательный результат в этом ролике.


Код

  • Файл без названия
Файл без названия Arduino
 / ** Цифровой шлюз с сохранением времени * Код:Tal Ofer * [email protected]*/#include "openGLCD.h" // проходит infounsigned long currentRunStartMillis; unsigned long lastRunInMillis; unsigned long bestRunInMillis; int currentLap; unsigned long saveMillis; gText t1; // определим время выполнения позже gText t2; // определим среду выполнения позже gText t3; // время выполнения будет определено позже // глобально для displayint sec_val, milli_val; // лазерный вентиль const int gateSensorPin =2; // номер пина датчика ворот gateSensorState; // текущее показание датчика int lastgateSensorState =LOW; // предыдущее чтение от sensorunsigned long lastDebounceTime =0; // последний раз, когда вывод датчика был переключен int debounceDelay =50; // время дребезга; увеличить, если вывод мерцаетvoid setup () {// режим вывода pinMode (gateSensorPin, INPUT); задержка (50); // опаздываем срабатывание датчика и лазера, поэтому мы не сможем сработать круг. // запускаем GLCD GLCD.Init (NON_INVERTED); // определяем области t1.DefineArea (textAreaTOP, lcdnums14x24); t2.DefineArea (0, GLCD.CenterY, 8, 2, fixednums7x15); t3.DefineArea (GLCD.CenterX, GLCD.CenterY, 8, 2, фиксированные числа7x15); t3.SetFontColor (БЕЛЫЙ); // установить цвет шрифта t3.ClearArea (); // выводим текст GLCD.SelectFont (System5x7); GLCD.CursorTo (1, 4); GLCD.print («ПОСЛЕДНИЙ»); GLCD.CursorTo (11, 4); GLCD.print («ЛУЧШИЙ»); // сбросить параметры currentRunStartMillis =0; lastRunInMillis =0; bestRunInMillis =0; currentLap =0;} void loop () {// считываем состояние лазерного датчика:int reading =digitalRead (gateSensorPin); // Если переключатель изменился из-за шума или нажатия:if (reading! =LastgateSensorState) {// сбросить таймер устранения дребезга lastDebounceTime =millis (); } // завершаем, если // если прошло время устранения дребезга if ((millis () - lastDebounceTime)> debounceDelay) {if (reading! =gateSensorState) {gateSensorState =reading; // Если мы опустились на низкое значение, это означает, что луч был сломан if (gateSensorState ==LOW) {// сохраняем миллисекунды, чтобы все вычисления выполнялись с тем же значением. saveMillis =миллис (); // если это не первый круг if (currentLap>
 0) {// сохранить последний прогон lastRunInMillis =savedMillis - currentRunStartMillis; // если последний запуск был быстрее, то лучше всего if (lastRunInMillis 
 0) {calcResultFromMillis (savedMillis - currentRunStartMillis, &sec_val, &milli_val); } еще {calcResultFromMillis (0, &sec_val, &milli_val); } // конец, если // ТЕКУЩИЙ ЗАПУСК t1.CursorTo (3, 0); // столбец и строка относятся к текстовой области t1.Printf (F ("% 02d.% 03d"), sec_val, milli_val); // ПОСЛЕДНИЙ ЗАПУСК calcResultFromMillis (lastRunInMillis, &sec_val, &milli_val); t2.CursorTo (1, 1); // столбец и строка относятся к текстовой области t2.Printf (F ("% 02d.% 03d"), sec_val, milli_val); // ЛУЧШИЙ ЗАПУСК calcResultFromMillis (bestRunInMillis, &sec_val, &milli_val); t3.CursorTo (1, 1); t3.Printf (F ("% 02d.% 03d"), sec_val, milli_val);} // цикл wnd // вычисляем миллисекунды в 2 значения, секунды и миллисекунды для displayvoid calcResultFromMillis (unsigned long value, int * sec_val, int * milli_val) {* sec_val =int (значение / 1000); * milli_val =значение - * sec_val * 1000;} 

Производственный процесс

  1. Руководство по лазерной маркировке алюминия
  2. Руководство по лазерной маркировке
  3. Что такое маркировка волоконным лазером?
  4. Лазерная указка
  5. Американские горки
  6. Полупроводниковый лазер
  7. Твердотельный лазер
  8. Песочные часы
  9. Kuman TFT 3.5 RetroPie 2018
  10. Rpibot - Об обучении робототехнике