Оглавление:
Видео: Велосипедный ручной сигнальный фонарь: 10 шагов (с изображениями)
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Цель этого проекта - создать светильник, который подходит для велосипедной перчатки и указывает в направлении предполагаемого поворота, чтобы улучшить видимость в ночное время. Он должен быть легким, простым в использовании и интегрированным с существующими движениями для сигнализации (минимальная настройка метода сигнала (вам не нужно нажимать кнопку, она просто срабатывает, когда вы сигнализируете)). Это станет отличным подарком к празднику.
Примечание: для этого требуются предварительные знания о том, как паять, и представление о том, как программировать AVR, является большим плюсом. Имея это в виду, получайте удовольствие, наберитесь терпения и разместите фотографии своего продукта ниже! Вот видео: А вот моя фотография:
Шаг 1: Детали
x1 ATmega 32L 8PU (www.digikey.com) x1 40-контактный разъем DIP (www.digikey.com) x1 8x8 LED Array (www.sparkfun.com) x1 74138 Демультиплексор (www.digikey.com) x2 Flex Sensors (www.sparkfun.com) x (Многие) Резисторы 180 Ом и 10 кОм x 2 Печатная плата (www.sparkfun.com) x6 Стойки (www.sparkfun.com) и винты для установки (в местном магазине оборудования) x1 Акселерометр на коммутационной плате (www.sparkfun.com) x2 разъема - штекер (www.sparkfun.com), женский (www.sparkfun.com) и прямоугольный (www.sparkfun.com) x1 LM7805 (www.digikey.com) x2 8-контактные разъемы (Я получил свою в Radio Shack) x1 батарея 9v x1 липучка для ног x1 велосипедная перчатка с полным пальцем x1 катушка полиэфирной нити x1 программатор (у меня есть этот) x1 инструмент для зачистки проводов и зажим x1 мультиметр Некоторые детали:
Шаг 2: Подготовьте доски
Сначала добавьте стойки. Вам нужно будет скрутить два винта, чтобы получить нужную высоту. Убедитесь, что стойки спускаются со стороны КВАДРАТНЫХ подушек. Таким образом, вы можете соединить контактные площадки с припоем снизу и перемыть общую контактную площадку сверху для подключения к земле. Затем добавьте светодиодную матрицу и припаяйте ее. Она должна быть как можно дальше от края платы с двумя стойками, если YS обращена к противоположной стороне. Штифт в нижнем левом углу - это штырь 1. (Он также отмечен на картинке.) Затем добавьте два 8-контактных разъема одно поверх другого, чтобы сформировать одно 16-контактное гнездо. Убедитесь, что слева есть одно пространство, а затем припаяйте его. Затем разделите вилку и розетку на 10- и 11-контактные секции. Вам понадобится вдвое больше женских заголовков. Припаиваем их, как показано на фото. Что касается штекерных разъемов, вам нужно сдвинуть штифт так, чтобы их количество было одинаковым с каждой стороны пластика. Проще всего посмотреть на картинку, чтобы понять, что я имею в виду, поэтому взгляните на №6. Я использовал плоскогубцы, и они сработали довольно хорошо. Теперь, если вы возьмете мужские заголовки и поместите их между двумя женскими заголовками, вы увидите, что теперь они имеют правильный размер для соединения верхней и нижней платы вместе.
Шаг 3: Добавьте резисторы
Эти резисторы проходят между светодиодной матрицей и 74138 (заземлением) для защиты матрицы. Сложите один из выводов резистора сверху так, чтобы два вывода были параллельны. Установите их на контакты 7, 9, 10, 11, 12, 13, 14 и 15 и припаяйте. Я обнаружил, что лучше всего работает, если вы меняете направление резистора, как вы можете видеть на втором и третьем изображениях.
Шаг 4: соедините верхнюю часть
Это, безусловно, самый длинный этап проекта, поэтому я очень надеюсь, что вам понравится пайка! Просто следуйте схеме ниже и обязательно проверьте целостность с помощью мультиметра. Если вы хотите знать, как я пришел к нам со схемой, посмотрите таблицу данных для массива и 74138.
Шаг 5: заполните нижнюю часть
Пришло время разместить наши основные компоненты на нижней плате. Сначала мы сделаем 40-контактный DIP-разъем, который находится как можно ближе к левому верхнему углу, оставляя один ряд места с левой стороны. (См. Рисунок № 1.) Припаяйте это, а затем поместите заголовки. Самый простой способ сделать это - соединить верхние и нижние, используя ваши модифицированные мужские заголовки. Если вы все сделали правильно, у вас должны получиться три верхних контакта на левом разъеме рядом с правыми нижними контактами на сокете. Хорошо. Мы используем только крайнюю нижнюю булавку справа, и, как вы можете видеть, у нас есть четкий выстрел с другой стороны. Теперь добавьте регулятор напряжения, как показано на картинке. Я закрепил свой через отверстие в металлическом радиаторе винтом и гайкой. Радиатор - это еще один способ заземления микросхемы, и прикручивание его к плате обеспечивает надежный контакт с общим соединением. Он соединен как с нижней, так и с верхней частью, потому что они соединены металлическими стойками. Однако, если вы не используете общее соединение для заземления, НЕ прикручивайте радиатор к плате, так как радиатор служит заземлением, и вы, вероятно, что-то закоротите. Далее провод в зажиме аккумулятора. Красный идет к контакту слева (с радиатором вверх и контактами вниз) черный к середине, а правый контакт дает + 5В. Теперь вы можете подключить питание к верхней части (см. Рисунок №2). Теперь о соединителе программатора. У меня есть адаптер, который я сделал для своего программиста, но вы, вероятно, захотите включить в свой дизайн 6-контактный разъем (3x2). Однако, если у вас есть такой адаптер, как у меня, вот что я сделал. Я взял прямоугольный и женский разъем и спаял их вместе (Фото № 3). Затем я прикрепил его к плате с первым контактом, подключенным к контакту 6. Теперь вам нужно питание и заземление чипа, а также проводку в резисторе, чтобы сбросить высокий уровень сброса. Я подключил резистор 10 кОм от контакта 9 к контакту 10, а затем подключил контакт 10 к + 5 В. Следующий штифт (11) идет к общему контакту (Земля). Наконец, посмотрите на картинку №4, чтобы закончить этот шаг (это довольно понятно).
Шаг 6: Подключите нижнюю часть
Помните тот действительно забавный шаг, когда вам нужно было проложить более 30 проводов, чтобы заставить работать светодиодную матрицу? Теперь ты можешь сделать это снова! Снизу!. Этот немного быстрее, но не очень. Еще раз посмотрите на схему и проверьте все свои соединения с помощью мультиметра. Не волнуйтесь, это последний крупный кусок пайки в проекте, и вы почти закончили.
Шаг 7: гибкие датчики и акселерометр
Сначала мы займемся датчиками изгиба, но в плане оборудования вы на финише. Я думаю, что картинки ниже в значительной степени объясняют, что делать. Подключите один вывод к + 5В, другой к третьему или четвертому выводу сверху на правой стороне AVR (микроконтроллер в основе этого проекта). Когда я впервые собрал все это вместе, я подумал, что это все, что мне нужно было сделать, но оказалось, что для того, чтобы AVR считывал датчики изгиба, вам нужно подключить резистор к контакту датчика, идущему к AVR, на землю (см. Рисунки # 10 и 11). Я использовал 10к. Это делит напряжение, поступающее на АРН, что практически удваивает чувствительность датчика. Теперь об акселерометре. Поскольку акселерометр всего на волосок выше, чем расстояние между двумя платами, и поскольку мы, возможно, захотим когда-нибудь его заменить, я решил использовать заголовки, чтобы вытащить его из платы и подключить. Используйте разъем под прямым углом для подключения к 6 контактам на коммутационной плате. Теперь возьмите другой разъем под прямым углом и припаяйте женский разъем к коротким контактам, а затем припаяйте его в нижнем левом углу вашей платы. Подключите акселерометр, чтобы убедиться, что он подходит, отключите его, а затем подключите правильные контакты к Vcc (+ 5 В) и Gnd. Затем подключите вывод X к контакту 40 и Y к контакту 39. Теперь вы должны быть настроены на добавление IC (интегральных схем) и включение питания.
26 декабря 2009 г.: Я обнаружил, что способ установки датчика изгиба указательного пальца привел к ухудшению качества материала, соединяющего датчик со штифтами. С тех пор я купил датчик для замены и приклеил к датчику кусок тонкого пластика, чтобы предотвратить его изгиб в этой области. Я отметил место на фото ниже.
Шаг 8: Добавление микросхем и первой программы
Вероятно, это самый простой этап всего процесса. Еще раз помогите картинка. Убедитесь, что у вас есть чипы правильным образом, как показано на рисунке №3. Я сначала подключал питание, когда ничего не было подключено, и касался радиатора на регуляторе напряжения. Если он горячий, значит, что-то происходит короткое замыкание, и вам нужно вернуться и проверить свои соединения. Поступайте таким образом, добавляя по одной микросхеме за раз, чувствуя тепло, и, когда все встало на свои места, затяните гайки на нижней плате, чтобы две платы были надежно скреплены друг с другом. Далее вы запрограммируете AVR. Если вы никогда не делали этого раньше, быстрый поиск в Google дает множество результатов. На вашем месте я бы поместил свой AVR на макетную плату и запрограммировал бы там, прежде чем вы попробуете это на своей тяжелой работе. Я написал простую программу для вывода информации, получаемой от гибких датчиков, на светодиодную матрицу. Это должно дать вам общее представление о том, что работает, а что нет в вашей схеме. Вот видео кода в действии …… и вот код: #define F_CPU 800000UL # include #include #include void ADCINIT () { ADMUX = 0b01100000; ADCSRA = 0b10000000;} int main () {int a; а = 0; int b; b = 0; DDRD = 0xFF; DDRB = 0xFF; DDRA = 0b11100000; ADCINIT (); а (1) {ADMUX = 0b01100011; ADCSRA | = 0b01000000; в то время как (bit_is_clear (ADCSRA, ADIF)); ПОРТА = 0b00000000; PORTD = ADCH; _delay_ms (1); PORTD = 0x00; ADMUX = 0b01100010; ADCSRA | = 0b01000000; в то время как (bit_is_clear (ADCSRA, ADIF)); ПОРТА = 0b11100000; PORTB = ADCH; _delay_ms (1); PORTB = 0x00; }}
Шаг 9: прикрепление круга к перчатке
Я думаю, что есть много способов прикрепить вашу схему к руке, и какое-то время думал, что оставлю это на усмотрение читателя, но затем решил, что инструкции не будут полными без этого закрытия. Я пошел в свой местный магазин велосипедов и получил самую дешевую перчатку с полным пальцем, какую смог найти. Полный палец необходим, потому что в противном случае вы не сможете очень хорошо прикрепить гибкие датчики. Затем я пошла в магазин тканей и купила полиэфирную нить и липучку. Я надел перчатку и надел схему на руку. Часть позиционирования - это комфорт, другая часть - датчики изгиба. Они должны проходить по середине двух пальцев. Я сшил петли вокруг трех стоек, чтобы удерживать основную плату (см. Рисунок № 2), а затем сделал свободные петли на 3/4 пути вниз по каждому пальцу датчика изгиба (№ 3 и 4). Убедитесь, что вы не зашейте перчатку закрытой. Затем я приклеил кусок липучки к большому пальцу сбоку, чтобы удерживать батарею. После тестирования я обнаружил, что это действительно окупается, потому что палка не прослужит слишком долго. Затем я обматываю петлю липучкой вокруг 9V (Фото 5). Кажется, эта установка работает очень хорошо. Как вы видите на изображениях на первом и последнем слайдах, я добавил гильзы для датчиков гибкости, но если у вас нет времени, петли подойдут. Когда вы закончите свой проект, опубликуйте фотографии готового продукта. ниже. Хотелось бы увидеть, что вы придумали, чтобы прикрепить схему!
Шаг 10: Настоящий код
Спасибо за терпение. Имейте в виду, что мой код несовершенен. Я обнаружил, что нужно немного научиться, чтобы сигнал работал правильно. Я буду продолжать попытки усовершенствовать свою систему и буду обновлять эту страницу новым кодом, как только напишу его. 26 декабря 2009 г.: НОВЫЙ КОД! Он размещен там, где был старый код. Большое спасибо Джейкобу за упрощение. Это действительно хорошо работает. Вот. Спасибо за чтение и не забудьте проголосовать! #include #include #include // Устанавливает или очищает биты в регистрах #define setBit (sfr, bit) (sfr | = (1 << bit)) #define clearBit (sfr, bit) (sfr & = ~ (1 << bit)) #define flipBit (sfr, bit) (sfr ^ = (1 << bit)) #define FALSE 0 #define TRUE 1 #define matrixX (x) (PORTA = (x - 1) << 5) #define matrixGY (y) (PORTD = y) #define matrixRY (y) (PORTB = y) void delay (unsigned int delay) {unsigned int x = 0; в то время как (x <задержка) {x ++; }} void initMatrix () {DDRD = 0xFF; // Зеленый элемент управления DDRB = 0xFF; // Красный элемент управления DDRA = 0xE0; // наземный контроль} void matrixRowDraw (char greenmask, char redmask, char column) {matrixX (column); int я = 0; для (я = 0; я <8; я ++) {matrixGY (зеленая маска & (1 << я)); matrixRY (красная маска & (1 << i)); _delay_us (150); } matrixGY (0x00); matrixRY (0x00); } void matrixLeft () {matrixRowDraw (0x10, 0, 1); matrixRowDraw (0x20, 0, 2); matrixRowDraw (0x40, 0, 3); matrixRowDraw (0xFF, 0, 4); matrixRowDraw (0xFF, 0, 5); matrixRowDraw (0x40, 0, 6); matrixRowDraw (0x20, 0, 7); matrixRowDraw (0x10, 0, 8); } void matrixRight () {matrixRowDraw (0x18, 0, 1); matrixRowDraw (0x18, 0, 2); matrixRowDraw (0x18, 0, 3); matrixRowDraw (0x18, 0, 4); matrixRowDraw (0x99, 0, 5); matrixRowDraw (0x5A, 0, 6); matrixRowDraw (0x3C, 0, 7); matrixRowDraw (0x18, 0, 8); } void adcInit () {ADMUX = 0x60; ADCSRA = 0x80; } char adcGet (char chan) {ADMUX = 0x60 | чан; ADCSRA | = 0x40; в то время как (bit_is_clear (ADCSRA, ADIF)); вернуть ADCH; } char adcAvg (char chan, char avgnum) // Только усреднить до 256 выборок {int i = 0; беззнаковое int total = 0; для (я = 0; я <среднее; я ++) {всего + = adcGet (chan); } return total / avgnum; } int main () {initMatrix (); adcInit (); while (1) {while (adcAvg (3, 50)> 0x45 & adcAvg (2, 50)> 0x70) // Шестнадцатеричные значения здесь должны быть изменены в зависимости от настроек пользователя для определения чувствительности датчиков гибкости. {если (adcAvg (1, 50)> 0x4F) {matrixRight (); } если (adcAvg (1, 100) <0x4F) {matrixLeft (50); }}} return 0; } Особая благодарность Чемберленам, моим родителям и друзьям, которые помогли.
Финалист конкурса "Самодельные праздники"