Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Сегодняшний аппаратный пятничный проект Coding4Fun воскрешает в памяти ряд воспоминаний. От собственного детства, сборки машин и гонок на Pinewood Derby(*), до родителя гонщика и споров, чья машина выиграла. Короче, я хотел бы представить…
Проект – Таймер для Grand Prix (Pinewood Derby) Timer
Поэтому позвольте мне ввести вас в курс дела (в случае, если вы не участвовали в соревнованиях Awana Grand Prix или Boy Scouts Pinewood Derby будучи ребенком). Вам 9 лет и вы, а также ваш папа (или мама) потратили пару выходных, собирая машину из сосновых брусков. Всё уже покрашено, оси и колеса отполированы и смазаны. Вы уверены, что ваша машина – самая быстрая. Настало время гонки. Автомобиль выходит на трек вместе с тремя соперниками. Пошел обратный отсчет … старт …гонка началась. Машины стартуют, спускаясь вниз по треку, в то время как родители столпились на финишной линии, ожидая кто же придет … но погодите!!! Сразу две машины финишируют одновременно. Теперь родители перематывают пленку в своих видеокамерах и следующие несколько минут «обсуждают» кто же действительно выиграл.
Есть ответ на этот вопрос, и он не подразумевает перемотки лент в видеокамерах (или, если хотите, быстрого повтора). Это таймер гонки. В продаже существуют доступные устройства, но смысл этих соревнований – провести время с детьми, поэтому почему бы не собрать его самим?
При нашей церкви был такой трек, но он был поврежден несколько лет тому назад настолько, что не имело смысла его восстанавливать. В прошлом году позаимствовали трек другой церкви, но таймер не работал как следует, потому что только показывал позиции (1-й, 2-й, 3-й и т. д. ) Поэтому после гонок наш руководитель гонок, Денни, поставил задачу построения своего трека, а я вызвался смастерить таймер.
На следующих страницах я опишу исследование, конструирование и постройку таймера, а также приведу связанные материалы. Также я планирую опубликовать все схемы, исходные коды и перечень использованных материалов, чтобы и другие могли им воспользоваться. Помните, что работа не завершена и находится в процессе выполнения. Я объявлю, когда перечень материалов и планы будут определены. Если у вас есть вопросы, пожалуйста, задавайте.
Проект – Таймер Grand Prix (Pinewood Derby), стр. 2 - конструирование
IR LED
Чтобы определить оптимальный способ подключения ИК-излучателей, я использовал Мастер светодиодов, расположенный здесь, и получил спецификации светодиодов и итоговую сумму. Он предложил пару вариантов и я решил остановиться на втором. Я запитываю их от 5 В и они соединяются последовательно с ограничивающим резистором (27 Ом 0,5 Вт). На макетной плате это работает прекрасно, и компоненты не нагреваются даже поле нескольких минут работы. Замечание: после окончательной сборки и работы в течение какого-то времени ограничительные резисторы стали довольно горячими. После анализа схемы я понял, что использовал резисторы мощностью 0,25 Вт, а не 0,5 Вт. Они будут заменены перед следующей гонкой из соображений безопасности.
Диаграммы работы и схемы
Эти диаграммы и схемы использованы для документирования конструкции таймера. Я сделал некоторые образцы и макеты, чтобы проверить, как это будет работать. Я применил такой же подход при написании кода и сборке. Однако после сборки таймера и написания кода я понял, что некоторые функции мне не нужны (вроде функции проверки статуса), или же мне понадобилось изменить конструкцию после начала сборки и поэтому документы не точно отражают состояние устройства и кода, использованного в модели. С учетом всего сказанного здесь, вы в состоянии разработать свой собственный таймер, но если возникнут проблемы, пожалуйста, дайте мне знать.
...
И фрагмент кода, https://gprt.codeplex.com
public static void Main()
{
// which lanes will be used during the race, default to all in use
Lane_1_Enabled = true;
Lane_2_Enabled = true;
Lane_3_Enabled = true;
Lane_4_Enabled = true;
Lane_5_Enabled = true;
Lane_6_Enabled = true;
Lane_7_Enabled = true;
Lane_8_Enabled = true;
for (int i = 1; i <= timerResolution; i++)
{
timerRes = timerRes + "9";
}
//setup the LCD
LCD.Clear();
LCD.SetCursor(0, 0);
LCD.BacklightBrightness = 40;
//create interrupt event handlers one for each GPIO setup.
Lane_1.OnInterrupt += new NativeEventHandler(Lane_1_OnInterrupt);
Lane_2.OnInterrupt += new NativeEventHandler(Lane_2_OnInterrupt);
Lane_3.OnInterrupt += new NativeEventHandler(Lane_3_OnInterrupt);
Lane_4.OnInterrupt += new NativeEventHandler(Lane_4_OnInterrupt);
Lane_5.OnInterrupt += new NativeEventHandler(Lane_5_OnInterrupt);
Lane_6.OnInterrupt += new NativeEventHandler(Lane_6_OnInterrupt);
Lane_7.OnInterrupt += new NativeEventHandler(Lane_7_OnInterrupt);
Lane_8.OnInterrupt += new NativeEventHandler(Lane_8_OnInterrupt);
StartGate.OnInterrupt += new NativeEventHandler(StartGate_OnInterrupt);
//write out startup text
LCD.Clear();
LCD.WriteText("Grand Prix Tim" +
"er v0.1 By: " +
"JarrodSinclair" +
"Hold Button 4 " +
"for Status " +
"Check ");
Thread.Sleep(1500);
if (Button.Read() == false)
{
//button is being pressed during boot... call StatusCheck
LCD.Clear();
LCD.WriteText("STATUS CHECK: " +
"Be sure Start " +
"Gate is closed" +
" " +
"Hold Button " +
"to continue. ");
// let the user read the message
Thread.Sleep(1000);
while (Button.Read())
{
// waiting for use to press button
Thread.Sleep(250);
}
StartStatusCheck();
}
LCD.Clear();
LCD.WriteText("Grand Prix Tim" +
"er v0.1 By: " +
"JarrodSinclair" +
"@Hotmail.com " +
" " +
"READY TO RACE ");
COM1.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataRecieved);
COM1.Open();
//prepare the timer and lanes for a race
Reset();
// ....
}
}
Вы скажете излишество? Единственным излишеством было бы, если результаты выкладывались в твиттер и делался бы снимок … ( хм…не рассказывал ли я, как организовать публикацию в Twitter из Netduino … и еще, где использовалась камера?… хм) .
(*) Pinewood Derby – гонки самодельных машинок, собранных с участием родителей, популярные среди скаутов Северной Америки.