Licznik Rowerowy

Licznik Rowerowy

W tym projekcie zbudujemy  licznik rowerowy w całości oparty o arduino i wyswietlacz alfanumeryczny.

Pewnie spytacie po co, skoro taki licznik można kupić już za 15zł?

Wyjaśnie to sposobem wad i zalet.

Zalety:

  • Możliwość ustawienia wielkości obwodu koła. (nie każdy licznik ze sklepu ma taką opcje)
  • Może mierzyć temperaturę oraz sterować światłami. (Po dodaniu czujników)
  • Nauczenie się zasady działania kontaktronu i stosowaniu go do wzoru fizycznego V=s/t.
  • Niepowtarzalny design.

Wady:

  • Duże rozmiary (10x10x4) cm

 

Co nam będzie potrzebne:

1 rezystor 10Kohm

1 wyświetlacz alfanumeryczny 2X16 lub shield z wyświetlaczem.

1 Płytka arduino uno, ewentualnie nano/pro mini

1 Kontaktron

1 potencjometr montażowy 10Kohm

Przewody i płytka stykowa.

Magnes

 

Jak to zrobić:

Podłączamy wyświetlacz do arduino jak na schemacie poniżej

Wyświetlacz      lcd:
VSS –>  GND       Arduino
VDP –> 5V          Arduino
VO –> środkowe wyjście na potencjometrze (pozostałe nóżki potencjometru do 5V i GND w Arduino)
RS –> pin 12       Arduino
RW –> GND       Arduino
E  –> pin 11         Arduino
D4 –> pin 5        Arduino
D5 –> pin 4        Arduino
D6 –> pin 3        Arduino
D7 –> pin 2        Arduino
A –> 5V               Arduino
K –> GND           Arduino

 

Kontaktron:
jeden koniec –> 3.3V     Arduino
drugi koniec –> A0 Arduino i rezystor    10kΩ
druga nóżka rezystora do masy w Arduino

Po wykonaniu czynności wymienionych wyżej wystarczy wgrać kod:

#include <dht.h>  //ładujemy biblioteki
#include <LiquidCrystal.h>


dht DHT;

#define DHT11_PIN 7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);   //ładowanie pinów wyświetlacza
//servo name
//definition of variables
 long previous, triptime, time, impulses;
 float speedometer, dist, aspeed;
 int screen=1;
 
 float circuit=2.1; //Ustawiamy obwód koła (w metrach)
 
 void setup() {

 lcd.begin(16, 2);

  

  pinMode(A0, INPUT);
  pinMode(A1, INPUT);

lcd.setCursor(0, 0);                           //inicjacja licznika
  lcd.print("Licznik rowerowy");
  delay(1000);
  lcd.setCursor(3, 1);
  lcd.print("By jang130");
  delay(4000);
  lcd.clear();
  delay(500);
  lcd.setCursor(0, 0);
 
 } 



 void loop() {
  
   if(analogRead(A0)>=300){      //warunek w którym koło musi się kręcić
      impulses++;
      //count turn time
    time=(millis()-previous);    //czas między impulsami
    //count speed
    speedometer=(circuit / time)*3600.0;  //wylicznanie prędkości
  previous=millis();
 
   
  Lcd();
  delay(100);
 }
   
 }  
   
  
  
  
  
    void Lcd(){
       //jesli kliknięto przycisk
      if(analogRead(A0)>=1010){
        lcd.clear();
      screen++;
      if(screen==5){   //przełączają się opcje
          screen=1;
        }
      }
   
        if(screen==1){
      
        lcd.setCursor(0, 0);
        lcd.print("Speed:");    
        lcd.setCursor(7, 0);
        lcd.print(speedometer);          //wyswietla prędkość
        lcd.print("km/h ");
        lcd.setCursor(0, 1);
        lcd.print("Dist:");
       
       dist=impulses*circuit/1000.00;
      
       lcd.setCursor(6,1);
       lcd.print(dist);         //wyswietla dystans
       lcd.print("km");
       
      
        
        }
        
        if(screen==2){
          lcd.clear();
            int chk = DHT.read11(DHT11_PIN);
  lcd.setCursor(0, 0);
  lcd.print("Temperatura: ");
    lcd.print(DHT.temperature);
     lcd.setCursor(0, 1);
      lcd.print("Wilgotnosc: ");
        lcd.print(DHT.humidity);
     
  delay(300);
        }
       
        
        if(screen==3){
          lcd.setCursor(0, 0);
        lcd.print("Dist:");
       dist=impulses*circuit/1000.00;
       //dislays distance
       lcd.setCursor(6,0);
       lcd.print(dist);                    //wyswietla dystans
       lcd.print("km");
        aspeed=dist/(millis()/1000.0)*3600.0;
        lcd.setCursor(0, 1);
        lcd.print("a.speed ");
        lcd.setCursor(8, 1);
        lcd.print(aspeed);
        lcd.print("km/h");                    //srednia prędkość
        delay(300);
        }
        
        if(screen== 4){
          lcd.setCursor(0, 0);
        lcd.print("Dist:");
       dist=impulses*circuit/1000.00;  //liczenie przebytej drogi
    
       lcd.setCursor(6,0);
       lcd.print(dist);
       lcd.print("km");
        triptime=millis()/60000;
        
        lcd.setCursor(0, 1);
        lcd.print("Czas:");
        lcd.setCursor(7, 1);
        lcd.print(triptime);         //wyswietla czas podróży
        delay(300);
    
        
        }
        
       
        
      }                                                     
Licznik rowerowy

I umieścić w ładnej obudowie, w moim przypadku jest to obudowa wydrukowana w 3D.

Te obudowy będą pasować do licznika:

https://sklep.avt.pl/category/obudowy?filter=1

https://sklep.avt.pl/obudowa-plastikowa-z5a-49x90x110mm.html

Ewentualnie można wykonać własną obudowę, o wymiarach co najmniej 10cm X 10cm X 4 cm

Czytaj(długość X szerokość X Wysokość)

 

Adam Moszczyński

Create Account



Log In Your Account