Текущее время: 28 мар 2024, 14:55

Калининград & ХОББИ

Занятие любимым хобби - это путь к счастливой жизни!

Велокомпьютер на Ардуино

Тут собраны схемы различных устройств сделанных на контроллерах Ардуино, Лазерный гравер на Ардуино, Металлоискатель на Ардуино, Метеостанция, Кодовый замок, и множество других устройств и изобретений
Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Велокомпьютер на Ардуино

Сообщение -=dp=- » 09 апр 2017, 12:39

Велокомпьютер на Ардуино

Для реализации проекта по определению самого дальнобойного приемника 433 МГЦ мне понадобился счетчик расстояния, ну и как всегда решил убить двух зайцев одним выстрелом :D
Решил сделать вело-компьютер на Ардуино!

Основными функциями вело-компьютера будут измерение пройденного пути в метрах и определение скорости в км. час.
А так же, будут дополнительные функции, которые попросил меня реализовать хозяин велосипеда, мой сын ;)
Это световые эффекты, ходовые огни, стробы как у полиции, указатели поворотов, сигналы аварийной остановки, сирена и гудок.

Для изготовления вело-компьютера на Ардуино мне понадобились следующие детали:
Контроллер Ардуино про мини - 1 шт
Дисплей 16х2 I2C - 1 шт
Модуль часов реального времени DS1307 - 1 шт
Датчик Холла.
Светодиоды разноцветные,
Резисторы для светодиодов,
Кнопки,
Монтажный провод,
Корпус.


Вложения
1.jpg
Вело-компьютер на Ардуино

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Велокомпьютер на Ардуино

Сообщение -=dp=- » 09 апр 2017, 12:50

После того как мы подготовили все комплектующие, я начал сборку.
Конструкция вело-компьютера получилась довольно простая.
Модуль часов реального времени и дисплей 1602 I2C подключаются параллельно к аналоговым входам Ардуино А4 и А5, ну и питание VCC и GND также параллельно.
С кнопками и светодиодами пришлось немного заморочиться, но это все из-за дополнительных функций :D
Для мигания большим количеством светодиодов я применил транзисторные ключи, так же подключил звуковой бузер через такой ключик, сигнал стал очень громкий.

Выкладываю фото самодельного вело-компьютера на Ардуино


Вложения
1.jpg
Самодельный велокомпьютер на Ардуино
2.jpg
Велокомпьютер на Ардуино
3.jpg
Вело-компьютер на Ардуино

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Велокомпьютер на Ардуино

Сообщение -=dp=- » 09 апр 2017, 12:56

Для программного оживления всех модулей нам понадобятся вот эти библиотеки для Ардуино

Time.h
Wire.h
DS1307RTC.h
LiquidCrystal_I2C.h

А так же мой скетч ;)

Код: выделить все
// VELOSPEEDOMETR na Arduino v.1.0
#include <Time.h> 
#include <Wire.h> 
#include <DS1307RTC.h>
#include <LiquidCrystal_I2C.h>
int meter,meter1, meter2, meter3 = 0;
int V,T,S,tim1,tim2,svet,zvuk = 0;
int but1,but2,but3,but4,but5, but6 = 0;
LiquidCrystal_I2C lcd(0x3F,16,2);

void setup()  {
pinMode(2, INPUT_PULLUP);
pinMode(3, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
attachInterrupt(0, Reset, FALLING);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
 
  lcd.init();
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.print("VELOSPEEDOMETR");
  lcd.setCursor(0, 1);
  lcd.print("NA ARDUINO v.1.0");
  Serial.begin(9600);
  while (!Serial) ; // wait until Arduino Serial Monitor opens
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
 digitalWrite(3, HIGH);
 digitalWrite(10, HIGH);
 digitalWrite(11, HIGH);
 //digitalWrite(12, HIGH);
 digitalWrite(13, HIGH);
 if(timeStatus()!= timeSet)
 Serial.println("Unable to sync with the RTC");
 else
 Serial.println("RTC has set the system time"); 
 delay(1000);
 lcd.clear();
 digitalWrite(3, LOW);
 digitalWrite(10, LOW);
 digitalWrite(11, LOW);
 digitalWrite(12, LOW);
 digitalWrite(13, LOW);


}

void loop()
{
if (tim1==0){meter1=meter; };
if (tim1==6){
 meter2=meter;
 meter3=meter2-meter1;
 S=meter3 / 6;
 T=S*3600;
 V=T / 1000;
  };
  lcd.setCursor(0, 1);
  lcd.print(meter);
  lcd.print(" ");
  lcd.setCursor(8, 1);
  lcd.print(V); 
  lcd.print("  ");
  lcd.setCursor(14, 1);
  lcd.print(zvuk);
  lcd.setCursor(15, 1);
  lcd.print(svet);
  if (timeStatus() == timeSet) {
    digitalClockDisplay();
  };
 but1 = digitalRead(4);
 but2 = digitalRead(5);
 but3 = digitalRead(6);
 but4 = digitalRead(7);
 but5 = digitalRead(8);
 but6 = digitalRead(9);
//---------RIGHT----------
if (but1 == LOW){
 for (int i=0; i <= 20; i++){
 digitalWrite(3, HIGH);
 delay(500);
 digitalWrite(3, LOW);
 delay(500);
   };
};
//------------LEFT-----------------------
if (but6 == LOW){
 for (int i=0; i <= 20; i++){
 digitalWrite(10, HIGH);
 delay(500);
 digitalWrite(10, LOW);
 delay(500);
   };
};
//------RESET COUNT--------------------------------
if (but2 == LOW){
meter=0;
meter1=0;
meter2=0;
};
//----------SVET-EFFECT-------------------------
if (but3 == LOW){
delay(700);
svet=svet+1;
};
//------------ZVUK-SIRENA--------------------------
if (but4 == LOW){
for (int i=0; i <= 10; i++){
digitalWrite(13, HIGH);
digitalWrite(11, LOW);
digitalWrite(3, LOW);
digitalWrite(10, HIGH);
tone(12, 1500, 400);
delay(400);
digitalWrite(3, HIGH);
digitalWrite(10, LOW);
digitalWrite(13, LOW);
digitalWrite(11, HIGH);
tone(12, 1000, 400);
delay(400);
};
};
//---------------SIGNAL------------------------
if (but5 == LOW){
for (int i=0; i <= 5; i++){
  digitalWrite(13, HIGH);
  digitalWrite(11, HIGH);
   digitalWrite(3, HIGH);
  digitalWrite(10, HIGH);
 tone(12, 300, 100);
 delay(100);
   digitalWrite(13, LOW);
  digitalWrite(11, LOW);
   digitalWrite(3, LOW);
  digitalWrite(10, LOW);
 tone(12, 300, 100);
 delay(100);
};
};

if (svet==1){
 digitalWrite(13, HIGH);
  digitalWrite(11, HIGH);
};

if (svet==2){
 digitalWrite(13, HIGH);
  digitalWrite(11, HIGH);
  delay(200);
  digitalWrite(13, LOW);
  digitalWrite(11, LOW);
  delay(200);
};

if (svet==3){
 digitalWrite(13, HIGH);
  digitalWrite(11, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  digitalWrite(11, LOW);
  delay(100);
};

if (svet==4){
 digitalWrite(13, HIGH);
  delay(200);
   digitalWrite(13, LOW);
  digitalWrite(11, HIGH);
   delay(200);
  digitalWrite(11, LOW);
};

if (svet==5){
 digitalWrite(13, HIGH);
  delay(50);
   digitalWrite(13, LOW);
    delay(50);
   digitalWrite(13, HIGH);
  delay(50);
   digitalWrite(13, LOW);
   delay(50);
 digitalWrite(11, HIGH);
  delay(50);
   digitalWrite(11, LOW);
    delay(50);
   digitalWrite(11, HIGH);
  delay(50);
   digitalWrite(11, LOW);
};

if (svet==6){
 digitalWrite(13, HIGH);
 digitalWrite(3, HIGH);
  delay(100);
   digitalWrite(3, LOW);
    digitalWrite(13, LOW);
    delay(100);
   digitalWrite(3, HIGH);
   digitalWrite(13, HIGH);
  delay(100);
   digitalWrite(3, LOW);
   digitalWrite(13, LOW);
   delay(100);
 digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  delay(100);
   digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    delay(100);
   digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
  delay(100);
   digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    delay(100);
};

if (svet==7){
 digitalWrite(13, HIGH);
 digitalWrite(10, HIGH);
  delay(100);
   digitalWrite(10, LOW);
    digitalWrite(13, LOW);
    delay(100);
   digitalWrite(10, HIGH);
   digitalWrite(13, HIGH);
  delay(100);
   digitalWrite(10, LOW);
   digitalWrite(13, LOW);
   delay(100);
 digitalWrite(3, HIGH);
  digitalWrite(11, HIGH);
  delay(100);
   digitalWrite(3, LOW);
    digitalWrite(11, LOW);
    delay(100);
   digitalWrite(3, HIGH);
    digitalWrite(11, HIGH);
  delay(100);
   digitalWrite(3, LOW);
    digitalWrite(11, LOW);
    delay(100);
};

if (svet==8){
 digitalWrite(13, HIGH);
  digitalWrite(11, HIGH);
   digitalWrite(3, HIGH);
  digitalWrite(10, HIGH);
  delay(300);
   digitalWrite(3, LOW);
  digitalWrite(10, LOW);
  delay(300);
};

if (svet>=9){
svet=0;
  digitalWrite(11, LOW);
  digitalWrite(13, LOW);
};

if (zvuk>=9){
zvuk=0;
};

}

void digitalClockDisplay(){
  if (second()<10){
  tim1=second();
  };
  if (second()>=10){
  tim1=second()-10;
   if (second()>=20){
  tim1=second()-20;
   if (second()>=30){
  tim1=second()-30;
   if (second()>=40){
  tim1=second()-40;
   if (second()>=50){
  tim1=second()-50;
  };
  };
  };
  };
  };
 
 lcd.setCursor(11, 0);
  if (hour()<10){
  lcd.print("0");
  lcd.print(hour());
  lcd.print(":");
  } else {
  lcd.print(hour());
  lcd.print(":");
  };
 
  if (minute()<10){
  lcd.print("0");
  lcd.print(minute());

  } else {
  lcd.print(minute());
  };
 
 
 lcd.setCursor(0, 0);
   if (day()<10){
  lcd.print("0");
  lcd.print(day());
  lcd.print(".");
  } else {
  lcd.print(day());
  lcd.print(".");
  };


   if (month()<10){
  lcd.print("0");
  lcd.print(month());
  lcd.print(".");
  } else {
  lcd.print(month());
  lcd.print(".");
  };

  lcd.print(year());

}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

void Reset() {
meter=meter+1;
delay(100);
    };




Для подключения датчика Холла я использовал вход Ардуино D2 с аппаратным прерыванием


Вложения
Temporizzatore1.jpg
Схема подключения модуля часов к Ардуино
23.jpg
Схема подключения дисплея LCD 1602 I2C
23.jpg (71.44 KiB) Просмотров: 34945
VeloSpeed1.zip
Скетч вело-компьютера на Ардуино
(1.59 KiB) Скачиваний: 1809

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Велокомпьютер на Ардуино

Сообщение -=dp=- » 09 апр 2017, 13:17

Общую схему соединения я нарисовал "по быстрому" вручную :D


Вложения
35.jpg
Схема вело-компьютера на Ардуино

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Велокомпьютер на Ардуино

Сообщение -=dp=- » 09 апр 2017, 17:42

Выкладываю исправленную схему вело-компьютера

А тут видео с демонстрацией работы вело-компьютера https://youtu.be/hE4WWLyNNQE


Вложения
velospeedometr.jpg
Схема вело-компьютера на Ардуино

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Велокомпьютер на Ардуино

Сообщение -=dp=- » 09 апр 2017, 17:57

Исправил несколько ошибок, улучшил сигнал ГУДОК, изменил время мигания поворотников, изменил работу СИРЕНЫ.

Выкладываю обновленную прошивку "скетч"

Ну и фото как я его прошивал :D


Вложения
VeloSpeed1.rar
Обновленная прошивка велокомпьютера на Ардуино
(1.56 KiB) Скачиваний: 1876
34.jpg
Самодельный вело-спидометр

Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Велокомпьютер на Ардуино

Сообщение -=dp=- » 31 мар 2020, 20:27




 
Сообщений: 1
Зарегистрирован: 19 июл 2020, 09:50

Re: Велокомпьютер на Ардуино

Сообщение getqri2014 » 19 июл 2020, 09:58

скетчь не заливается пишет ошибку




Вернуться в Устройства на Ардуино

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8