Bike Generator laddningsstation (8 / 10 steg)

Steg 8: I2C LCD användargränssnitt och meny




Det finns många sätt att kod användargränssnitt och menyn med hjälp av en Arduino och LCD sköld. Vår sköld har 2 rader med display för 16 tecken vardera, fyra riktningsknapparna, en knapp avsedda för en "Välj" funktion, och en återställningsknapp. För att förenkla kodning processen, vi bara utnyttjas de fyra riktningsknapparna, gjort en ganska rå om-loop struktur, och använde förekomstvariabler för en massa saker. För de mer bekväm med C++, föreslår vi att du använder en datastruktur (som föreslås här) eller något mer elegant än för-många-om-loopar. Vi ville att användaren åtkomst sparas statistik som den högsta tiden cyklade på en gång, den totala "avstånd" cyklade på denna cykel och de totala wattimmar genereras sedan dag ett. Medan användaren pedals, vill vi skärmen för att visa statistik som tiden sedan användaren började trampa, hastighet i kilometer per timme (eftersom km är en under uppskattat enhet i USA), power som genereras, wattimmar genereras under cykling. För läsare som inte har använt en I2C LCD sköld innan, här är ett bra ställe att börja.

Beräkningarna för statistiken var inte svår. för RPM och km/s dividerade vi antalet cykler cyklade med den tid det tog för användaren att trampa som många cykler, och omvandlas till enheter. Vi mätta radien på bakhjulet av vår cykel och hittade radien vara 28 cm. Omkretsen är således 175.929 cm, 0.00109317 miles eller 0.00175929km. Vi beräknas avståndet cyklade med avstånd = ränta * tid. För power genererade, makt = ström * spänning (P = IV). För att få en wattimmar genereras, vi utfört en Riemann-summan-liknande tillägg genom att multiplicera Momentan effekt med den tid som gått (0,5 sekunder) och tillade att varje halv sekund användaren har cyklade.

Menyn, vi indexeras varje skärm och använde en dummy räknar variabel för att navigera genom skärmar. Upp och ner skulle dra ifrån eller lägga till den dummy variabeln, medan vänster returnerar oss till högre differentierade menyn och rätt tar oss till undermenyerna.

Här är en schematisk av vår meny

Rotmenyn

> top tid

>> visar värdet

> total sträcka reste

>> visar värdet

> total effekt genereras

>> visar värdet

> om

>> vilken information det finns om cykel.

fullständiga koden finns i slutet av detta Instructable

fetstil koden är vad vi lägga till koden från ovan

inkludera bibliotek-koden:

#include < Wire.h >

#include < Adafruit_MCP23017.h >

#include < Adafruit_RGBLCDShield.h >

#include < EEPROM.h > //for långsiktig lagring av information på Arduinos

Denna del tar ord för ord från Adafruit's tutorial, som vi länkade ovan

Skölden använder I2C SCL och SDA stiften. På klassiska Arduinos
Detta är Analog 4 och 5 så du inte kan använda de för analogRead() längre

Men kan du ansluta andra I2C sensorer till I2C bussen och andel

I2C bussen. Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

Dessa #defines gör det enkelt att ställa in bakgrundsljus färg

#define röd 0x1

#define gul 0x3

#define grön 0x2

#define kricka 0x6

#define blå 0x4

#define VIOLET 0x5

#define vit 0x7

här börjar den delen vi kodade

int ptr = 0; menyn pekaren

int minuter, sekunder, kmh;

långsiktig lagring variabler

int timeAddress = 0;

int distanceAddress = 1;

int powerAddress = 2;

byte TIDVÄRDE, distanceValue, powerValue;

booleska isHome = sant;

void setup() {

LCD.BEGIN (16, 2);

LCD.Print ("Hello, world!");

lcd.setBacklight(WHITE);

TIDVÄRDE = EEPROM.read(timeAddress);

distanceValue = EEPROM.read(distanceAddress);

powerValue = EEPROM.read(powerAddress);

root(); Ställ in displayen till rotmenyn

}

uint8_t jag = 0; Vi sätter detta i eftersom handledning ingår det (inte riktigt säker vad det är för)

void loop() {

menuFunction(); se om knappen trycks

om (motorV > 1.0 & &! hasBeenOn) {

LCD.Clear();

lcd.setCursor(0,0);

LCD.Print ("värmer upp...");

lcd.setCursor(0,1);

LCD.Print ("Behåll trampa.");

lcd.setBacklight(GREEN);

digitalWrite (cc, hög); Tryck på start på laddningsregulatorn

lcd.setBacklight(YELLOW);

Delay(3500); Tryck på start för 3,5 sekunder

Cycle = 0;

t0 = millis();

digitalWrite (cc, låg); sluta att trycka på start

nu bör batteriladdning

LCD.Clear();

lcd.setCursor(0,0);

hasBeenOn = sant;

LCD.Print ("ladda batteriet");

lcd.setBacklight(RED);

lcd.setCursor (3, 1);

timeOn = millis();

tiden för hur länge personen har trampa

LCD.Print((Millis()-timeOn)/1000);

Delay(Wait);

isHome = false;

}

annars om (motorV > 1.0 & & hasBeenOn) {

SEK = int((millis()-timeOn)/1000);

minuter = int(secs/60);

SEK = int(secs%60); Detta skulle också kunna skrivas som en separat funktion

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print(mins);

lcd.setCursor (2, 0);

skriva ut antalet sekunder sedan start cykling

LCD.Print(":");

lcd.setCursor (3, 0);

LCD.Print(secs);

lcd.setCursor (9, 1);

LCD.Print(rpm);

lcd.setCursor(13,1);

LCD.Print("rpm");

isHome = false;

getCurrent(); Detta tryck W, Wh

getkmh(); Detta alternativ skriver ut km/h

}

annat {

om (tidvärde > (millis()-timeOn/1000/60)) {

TIDVÄRDE = int(millis()-timeOn/1000/60);

EEPROM.write (timeAddress, tidvärde);

}

IF(!isHome) {

root();

}

}

}

void getkmh() {

KMH = rpm * 60,0 * revolution;

lcd.setCursor (0, 1);

LCD.Print(KMH);

lcd.setCursor(2,1);

LCD.Print ("km/h");

}

void getCurrent() {

Nuvarande = (float(analogRead(hall))-514.5) / 26,5;

lcd.setCursor (6, 0);

LCD.Print (int (nuvarande * 13));

lcd.setCursor(8,0);

LCD.Print("W");

WH = Wh + flyta (vänta) /3600.0*current*13.0;

lcd.setCursor(10,0);

LCD.Print(WH);

lcd.setCursor(13,0);

LCD.Print("WH");

}

void menuFunction() {

Delay(200);

uint8_t knappar = lcd.readButtons();

om (knappar) {

om (knappar & BUTTON_UP) {

scrollUp(ptr);

}

om (knappar & BUTTON_DOWN) {

IF(PTR >0) {

scrollDown(ptr);

}

}

om (knappar & BUTTON_LEFT) {

om (ptr > = 1 & & ptr < = 4) {

root();

}

annars om (ptr > = 5) {

Menu();

}

}

om (knappar & BUTTON_RIGHT) {

scrollRight();

}

}

}

void menu() {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("menyn (bläddra V)");

lcd.setCursor (0, 1);

LCD.Print ("Top gånger");

PTR = 1;

}

void root() {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("Bike till laddningen!");

lcd.setCursor (0, 1);

LCD.Print ("menyn (höger >)");

PTR = 0;

isHome = sant;

}

void scrollRight() {

Serial.println(PTR);

IF(PTR == 0) {

Menu();

}

annat if(ptr == 1) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("övre tid");

lcd.setCursor (0, 1);

LCD.Print(timeValue); MINNS NUMMER!!! BÄSTA TID

lcd.setCursor(13,1);

LCD.Print("min");

PTR = 5;

}

annat if(ptr == 2) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("Total distans");

lcd.setCursor (0, 1);

LCD.Print(distanceValue); MINNS NUMMER!!! TOTAL STRÄCKA

lcd.setCursor(14,1);

LCD.Print("mi");

PTR = 6;

}

annat if(ptr == 3) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("Total energi");

lcd.setCursor (0, 1);

LCD.Print(powerValue); MINNS NUMMER!!! TOTALA WATTHOURS

lcd.setCursor(15,1);

LCD.Print("J");

PTR = 7.

}

annat if(ptr == 4) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("bläddra ner till");

lcd.setCursor (0, 1);

LCD.Print ("Läs mer! (V)"); MINNS NUMMER!!! TOTALA WATTHOURS

PTR = 8.

}

}

void scrollDown(int i) {

Serial.println(i);

om (jag == 1) {

lcd.setCursor (0, 1);

LCD.Print ("Total distans");

PTR = 2;

}

annars om (jag == 2) {

lcd.setCursor (0, 1);

LCD.Print ("Total energi");

PTR = 3;

}

annars om (jag == 3) {

lcd.setCursor (0, 1);

LCD.Print ("om!");

PTR = 4;

}

annars om (jag == 8) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("elektronik bike");

lcd.setCursor (0, 1);

LCD.Print ("fungeras på av:");

PTR = 9.

}

annars om (jag == 9) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("A. McKay ' 13");

lcd.setCursor (0, 1);

LCD.Print ("J. Wong" 15");

PTR = 10;

}

annars om (jag == 10) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print("A.Karapetrova'15");

lcd.setCursor (0, 1);

LCD.Print ("S. Walecka" 15 ");

PTR = 11;

}

annars om (jag == 11) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("S. Li ' 17");

lcd.setCursor (0, 1);

LCD.Print ("N. Sandford ' 17");

PTR = 12.

}

annars om (jag == 12) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("för hans majestät");

lcd.setCursor (0, 1);

LCD.Print ("Dwight Whitaker");

PTR = 13.

}

annars om (jag == 13) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("Phys 128");

lcd.setCursor (0, 1);

LCD.Print ("Pomona College");

PTR = 14.

}

annars om (jag == 14) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("betalas av den");

lcd.setCursor (0, 1);

LCD.Print (SIO och Avd för");

PTR = 15.

}

annars om (jag == 15) {

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("fysik och");

lcd.setCursor (0, 1);

LCD.Print ("astronomi.");

PTR = 16.

}

}

void scrollUp(int i) {

om (jag == 2) {

Menu();

}

om (jag > 2) {

scrollDown(i-2);

}

}

Se Steg
Relaterade Ämnen

USB-Bike Generator

The USB cykel Generator är en liten cykel monterad elproducerande enhet optimeras för att ge kraft för två USB-portar. Det finns så många små elektronik som kan drivs eller ut från en USB-anslutning blir det först efter att människor kanske vill göra...

Bike Generator

det är mitt första försök på en cykel generator och jag har gjort många förbättringar till projektet. Kolla in min nya instructable BikeGen för nya generator som laddar 2 AA-batterier och driver lamporna. BikeGen kan också användas för att ladda du m...

Bike Generator från rensas delar

Min cykel generator är byggd av en gammal motionscykel och använder en kedjan och drevet enhet som förvandlar en fordons vindruta torkar motor. Drivlinan har en utväxling på 1:30, vilket innebär en fullständig revolution av pedalerna snurrar vindrute...

Bike Generator uteplats möbler tillverkade av återvunnet material med spänning regleras batteri laddning System

för det här projektet raffinerade jag några av de lärdomar jag har lärt mig bygga (eller försöker bygga) cykel generatorer tidigare i ett försök att bygga en som var tyst, mindre påträngande i vårt vardagsrum, och kan användas av en cykel utan ändrin...

DIY Bike Generator

Med lätt åtkomliga delar, är det möjligt att bygga din egen cykel generator som debiteras din mobiltelefon! Detta instructable är en förlängning av detta instructable görs av våra vänner. Så småningom, kommer att denna cykel stå på egen hand i våra s...

DIY cykel hacka DC BIKE GENERATOR ledde lampor Light Emitting Diode

Denna video visar kraften i permanentmagnet motorer från DC används i omvänt som en generator. Motorn är anpassad så att det snurrar en mycket höga varvtal som ger en användbar Likström. DIY övning cykel kan driva en rekreation fordon RV Fan, DC luft...

"No-svetsning" trampa generator stå

Förnybar energiinnovation har byggt ett antal pedal generatorer för både vuxna och barn. Pedal power hjälper till att demonstrera begreppen makt och energi på ett intressant sätt, samt att bidra till att cykling och alla saker pedal med.Det finns ett...

Bästa av 2009: bästa i varje kategori

För att fira slutet av året vi tittat redan på top 50 listor för kommentarer, åsikter och betyg, men denna gång ska vi bryta ner efter kategori. Nedan är den topp 10 listan för varje kategori i form av åsikter.Naturligtvis innebär är populära absolut...

3ModeStove Mini - Camping / akut spis

Mode1: Wood Gas (12V fläkt tvingas TLUD)Som en fortsättning på min hobby att bränna saker i burkaruppstod detta projekt från min fascination för trä gasar TLUD (Top Lit Updraft) spisar. Jag gynnade fläkten tvingade alternativ (läge 1), som producerar...

BikeGen

BikeGen är en liten elgenerator, monterad på en cykel, som laddar två AA batterierna medan du cyklar. Batterierna kan sedan användas för att driva lamporna på du cykel eller du kan ta ut dem och använda dem i dina andra elektroniska enheter. BikeGen...

Hur man installerar en dynamo drivs cykel ljus.

Som alla MC vet om du rider på natten en ljus är ett måste!i handledningen kommer jag visa dig hur man installerar den en dynamo drivs cykel ljusdetta ljus är perfekt för den som gillar vintage utseende men också gillar ett riktigt starkt ljus.Länk t...

Bike ljus generator

detta projekt kom eftersom batterierna går platt. Särskilt när du inte vill att de.Om du vill ha ett starkt ljus på framsidan av din cykel och inte vill ha besväret med att ladda batterier eller Gud förbjude att köpa nya, så kolla detta.Vissa kostnad...

Moving Picture Generator skrivbordslampa

IntroduktionJag tänkte på ett coolt sätt att tända mitt rum och eftersom 70-talet har länge gått nästa mest awesome lampan efter Lavalampa är Moving Picture Generator skrivbordslampa.Βasically det är en skrivbordslampa som lyser fortfarande upp bilde...

Bike Dynamo

' en enkel cykel dynamo med en motor som en generator.Varning becareful inte att få någon av delarna från detta projekt fångas upp i din cykel. Denna dynamo kan lägga ut mer än 12 volt becareful med dina delar eller de kunde få blåst.Material:1 motor...

Fyra bokstäver Word klocka med Akafugu ordet Generator och inspirerande fraser

Detta är min version av fyra brev ord klockan, en idé som har sitt ursprung tillbaka i 1970. Klockan visar en serie av fyra - brev ord som genereras från antingen en random ord generator algoritm eller från en databas med tillhörande fyra - brev ord....

Avancerade cookies cutter generator

Hej alla,Här är en enkel guide till hur design och 3D print sin egen cookie cutter!Min första 3D cookie design blev en 5 tum lång dinosaurie med 6 cookie limmas ihop med koncentrerad mjölk. Det var ganska skrämmande och välsmakande!Detta skript tillå...

Retro Electric Bike

This is a custom pedal/electric bike I designed and built for school. Detta bildspel visar start till slut bygga av projektet.Jag gör Metal Fabrication Engineering längs sidan en panna att göra lärlingsutbildning. Jag ser huvudet in i anpassade elekt...

12 volt batteri Generator

Billig 12 volt batteri back-up generator som inte är svårt att göra. Det kommer att driva det som räknas om strömmen går! Obs:Du måste ha kunskaper om el och elektriska kretsar att göra detta projekt annars du kan verkligen skada dig själv.Jag har dr...

12V-180kV: en ackumulatorn driv Marx Generator (och introduktion till elektronik)

Om du läser detta Instructable, en sak är förmodligen sant: du är intresserad av hög spänning! Om så, har du kommit till rätt ställe; Marx generatorer kan tillfredsställa din törst efter gnistor, lugg, och spänningen. Jag gjorde denna Marx Generator...