Fiets Generator laadstation (8 / 10 stap)

Stap 8: I2C LCD User-Interface en Menu


Er zijn vele manieren om de code van de user-interface en de menu met behulp van een Arduino en LCD shield. Onze schild heeft 2 rijen van scherm voor 16 tekens per stuk, vier directionele knoppen, een knop die bestemd voor een "select" functie, en een reset-knop. Codering proces vereenvoudigen, we alleen de vier directionele knoppen gebruikt, gemaakt van een nogal ruwe als-lusstructuur en instantievariabelen gebruikt voor een heleboel dingen. Voor degenen die meer comfortabel met C++, raden we u een gegevensstructuur (als hier wordt voorgesteld) of iets eleganter dan ook-veel-als-lussen. We wilden de gebruiker opgeslagen Toegangsstatistieken zoals de hoogste tijd pedaled in één keer, de totale "gedistantieerd" pedaled op deze fiets en de totale watturen gegenereerd sinds dag een. De gebruiker pedalen, maar we willen het scherm om statistieken te tonen zoals de tijd sinds gebruiker trappen, snelheid in kilometer per uur (omdat km is een onder gewaardeerd eenheid in de VS), energie wordt gegenereerd, watturen gegenereerd tijdens het fietsen. Voor lezers die niet gebruik hebben gemaakt van een I2C LCD schild voor, hier is een goede plaats om te beginnen.

De berekeningen voor deze statistieken waren niet moeilijk; voor RPM en km/s verdeeld we het aantal cycli pedaled tegen de tijd dat het nam voor de gebruiker om het pedaal dat vele cycli, en omgezet van de eenheden. We de straal van het achterwiel van onze fiets gemeten en vond de straal zich 28 cm. De omtrek is dus 175.929 cm, 0.00109317 mijlen of 0.00175929km. We berekend de afstand gefietst met behulp van afstand = tarief * tijd. Voor power gegenereerde, macht = huidige * spanning (P = IV). Als u een watturen gegenereerd, we de toevoeging van een Riemann-som-achtige uitgevoerd door te vermenigvuldigen met de tijd die verstreken (0.5 seconden) momentane macht en toe te voegen dat elke halve seconde de gebruiker heeft pedaled.

Wat betreft het menu we elk scherm geïndexeerd en gebruikt een dummy variabele tellen om door de schermen te navigeren. Op en neer zou aftrekken of toevoegen aan de dummy variabele, terwijl links keert ons terug naar de hogere trapsgewijze menu en rechts neemt ons mee naar de submenu's.

Hier is een schematische voorstelling van onze menukaart

Hoofdmenu

> top tijd

>> waarde weergeven

> de totale afgelegde afstand

>> waarde weergeven

> totale vermogen gegenereerd

>> waarde weergeven

> over

>> welke informatie er over de fiets is.

de volledige code vindt u op het einde van dit Instructable

de vette code is wat wij toevoegen aan de code van bovenaf

de code van de bibliotheek omvatten:

#include < Wire.h >

#include < Adafruit_MCP23017.h >

#include < Adafruit_RGBLCDShield.h >

#include < EEPROM.h > //for lange termijn opslag van de informatie op Arduinos

Dit gedeelte neemt woord voor woord van Adafruit de tutorial, die we gekoppeld hierboven

Het schild gebruikt de I2C SCL en SDA pinnen. Op klassieke Arduinos
Dit is analoog 4 en 5 zodat u niet die voor analogRead() meer kunt

Echter kunt u verbinden met andere I2C-sensoren de I2C-bus en het aandeel

de I2C-bus. Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

Deze #defines maken het gemakkelijk om de kleur van de achtergrondverlichting instellen

#define RED 0x1

#define gele 0x3

#define groen 0x2

#define TEAL 0x6 gemaakt

#define BLUE 0x4

#define VIOLET 0x5

#define WHITE 0x7

Hier begint het deel dat we gecodeerd

int ptr = 0; menu aanwijzer

int minuten, seconden, kmh;

lange termijn opslag variabelen

int timeAddress = 0;

int distanceAddress = 1;

int powerAddress = 2;

byte timeValue, distanceValue, powerValue;

Boole isHome = waar;

VOID Setup {}

LCD.begin (16, 2);

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

lcd.setBacklight(WHITE);

timeValue = EEPROM.read(timeAddress);

distanceValue = EEPROM.read(distanceAddress);

powerValue = EEPROM.read(powerAddress);

root(); instellen beeldscherm naar hoofdmenu

}

uint8_t ik = 0; We zetten dit, omdat de tutorial opgenomen (niet precies weet wat het is voor)

void loop {}

menuFunction(); Zie als de knop wordt ingedrukt

Als (motorV > 1.0 & &! hasBeenOn) {}

LCD.Clear();

lcd.setCursor(0,0);

LCD.Print ("Warming-up...");

lcd.setCursor(0,1);

LCD.Print ("Keep trappen.");

lcd.setBacklight(GREEN);

digitalWrite (cc, hoge); Druk op start op de heffing controller

lcd.setBacklight(YELLOW);

delay(3500); Druk op start 3,5 seconden

cyclus = 0;

t0 = millis();

digitalWrite (cc, laag); stoppen op start te drukken

Nu moet worden opladen van de batterij

LCD.Clear();

lcd.setCursor(0,0);

hasBeenOn = true;

LCD.Print ("opladen batterij");

lcd.setBacklight(RED);

lcd.setCursor (3, 1);

timeOn = millis();

tijd van hoe lang persoon heeft zijn trappen

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

delay(wait);

isHome = false;

}

anders als (motorV > 1.0 & & hasBeenOn) {}

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

minuten = int(secs/60);

SEC = int(secs%60); Dit kan ook geschreven worden als een aparte functie

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print(mins);

lcd.setCursor (2, 0);

het aantal seconden sinds begin fietsen afdrukken

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(); Deze prints W, Wh

getkmh(); Dit drukt km/h

}

else {}

Als (timeValue > (millis()-timeOn/1000/60)) {}

timeValue = int(millis()-timeOn/1000/60);

EEPROM.write (timeAddress, timeValue);

}

if(!isHome) {}

root();

}

}

}

ongeldig getkmh() {}

kmh = rpm * 60,0 * revolutie;

lcd.setCursor (0, 1);

LCD.Print(kmh);

lcd.setCursor(2,1);

LCD.Print ("km/h");

}

ongeldig getCurrent() {}

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

lcd.setCursor (6, 0);

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

lcd.setCursor(8,0);

LCD.Print("W");

WH = Wh + zweven (wachten) /3600.0*current*13.0;

lcd.setCursor(10,0);

LCD.Print(WH);

lcd.setCursor(13,0);

LCD.Print("Wh");

}

ongeldig menuFunction() {}

delay(200);

uint8_t knoppen = lcd.readButtons();

Als (knoppen) {}

Als (knoppen & BUTTON_UP) {}

scrollUp(ptr);

}

Als (knoppen & BUTTON_DOWN) {}

if(PTR >0) {}

scrollDown(ptr);

}

}

Als (knoppen & BUTTON_LEFT) {}

Als (ptr > = 1 & & ptr < = 4) {}

root();

}

anders als (ptr > = 5) {}

menu();

}

}

Als (knoppen & BUTTON_RIGHT) {}

scrollRight();

}

}

}

ongeldig menu() {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("MENU (scroll V)");

lcd.setCursor (0, 1);

LCD.Print ("Top tijden");

PTR = 1;

}

ongeldig root() {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("fiets naar Charge!");

lcd.setCursor (0, 1);

LCD.Print ("Menu (rechts >)");

PTR = 0;

isHome = true;

}

ongeldig scrollRight() {}

Serial.println(PTR);

if(PTR == 0) {}

menu();

}

anders if(ptr == 1) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("hoogste tijd");

lcd.setCursor (0, 1);

LCD.Print(TimeValue); HERINNER ME NUMMER!!! HOOGSTE TIJD

lcd.setCursor(13,1);

LCD.Print("min");

PTR = 5;

}

anders if(ptr == 2) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("totale afstand");

lcd.setCursor (0, 1);

LCD.Print(distanceValue); HERINNER ME NUMMER!!! TOTALE AFSTAND

lcd.setCursor(14,1);

LCD.Print("Mi");

PTR = 6;

}

anders if(ptr == 3) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("totale energie");

lcd.setCursor (0, 1);

LCD.Print(powerValue); HERINNER ME NUMMER!!! TOTALE WATTHOURS

lcd.setCursor(15,1);

LCD.Print("J");

PTR = 7;

}

anders if(ptr == 4) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("Scroll naar beneden naar");

lcd.setCursor (0, 1);

LCD.Print ("Lees meer!!! (V)"); HERINNER ME NUMMER!!! TOTALE WATTHOURS

PTR = 8;

}

}

VOID scrollDown(int i) {}

Serial.println(i);

Als (ik == 1) {}

lcd.setCursor (0, 1);

LCD.Print ("totale afstand");

PTR = 2;

}

anders als (ik == 2) {}

lcd.setCursor (0, 1);

LCD.Print ("totale energie");

PTR = 3;

}

anders als (ik == 3) {}

lcd.setCursor (0, 1);

LCD.Print ("About!");

PTR = 4;

}

anders als (ik == 8) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("elektronica fiets");

lcd.setCursor (0, 1);

LCD.Print ("werkte aan door:");

PTR = 9;

}

anders als (ik == 9) {}

LCD.Clear();

lcd.setCursor (0, 0);

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

lcd.setCursor (0, 1);

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

PTR = 10;

}

anders als (ik == 10) {}

LCD.Clear();

lcd.setCursor (0, 0);

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

lcd.setCursor (0, 1);

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

PTR = 11;

}

anders als (ik == 11) {}

LCD.Clear();

lcd.setCursor (0, 0);

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

lcd.setCursor (0, 1);

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

PTR = 12;

}

anders als (ik == 12) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("For His Majesty");

lcd.setCursor (0, 1);

LCD.Print ("Dwight Whitaker");

PTR = 13;

}

anders als (ik == 13) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("Phys 128");

lcd.setCursor (0, 1);

LCD.Print ("Pomona College");

PTR = 14;

}

anders als (ik == 14) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("betaald door de");

lcd.setCursor (0, 1);

LCD.Print (SIO en Dept van");

PTR = 15;

}

anders als (ik 15 ==) {}

LCD.Clear();

lcd.setCursor (0, 0);

LCD.Print ("fysica en");

lcd.setCursor (0, 1);

LCD.Print ("astronomie.");

PTR = 16;

}

}

VOID scrollUp(int i) {}

Als (ik == 2) {}

menu();

}

Als (ik > 2) {}

scrollDown(i-2);

}

}

Gerelateerde Artikelen

Fiets Generator

Fiets Generator

het is mijn eerste poging om een generator van de fiets en heb ik veel verbeteringen aan het project. Bekijk mijn nieuwe instructable BikeGen voor de nieuwe generator die 2 AA-batterijen oplaadt en bevoegdheden van de verlichting. BikeGen kan ook wor
Ultieme 10 Watt USB fiets Generator

Ultieme 10 Watt USB fiets Generator

Dit Instructable is over het maken van een ultieme 10 Watt USB fiets generator systeem combineren dynamo en zonne-energie! Het combineert mijn vorige Instructables voor Solar USB Charger en fiets Solar/Dynamo USB lader + achterlichten met een nieuwe
How To Build een fiets Generator

How To Build een fiets Generator

Het is de bedoeling van dit project te bouwen een ongecompliceerd menselijke aangedreven generator van een gebruikte fiets en te gebruiken om macht gloeilampjes, mixers, mobiele telefoons, laptops en andere kleine apparaten. Dit project zal helpen on
Motor + fiets + Generator vliegdekschip, intrekbare!

Motor + fiets + Generator vliegdekschip, intrekbare!

Hier vindt u mijn unieke intrekbare motor carrier project met 38 foto's en gedetailleerde uitleg...Stap 1: Oude One! Toen wij onze camper, het reeds uitgerust is met een "vervoerder" op het kocht.Ontwerp van deze luchtvaartmaatschappij was echt
Fiets Generator Patio meubilair gemaakt uit gerecycleerde materialen w / Voltage geregeld Battery Charging System

Fiets Generator Patio meubilair gemaakt uit gerecycleerde materialen w / Voltage geregeld Battery Charging System

voor dit project dat ik sommige van de lessen die ik heb geleerd verfijnd bouwen (of proberen op te bouwen) fiets generatoren in het verleden in een poging om een dat was rustig, minder opdringerig in onze leefruimte, en kunnen worden gebruikt door e
Hoe het bouwen van een fiets-Generator

Hoe het bouwen van een fiets-Generator

gebruikend een paar toegankelijke delen, kunt u een fiets-generator die verschillende elektronische apparaten, zoals laptops en batterijen kan aandrijven!Benodigde materialen:Fiets StandFiets frame24V DC scooter motorDC-DC de lader van de batterijEen
Fiets Generator gemaakt van opruiming onderdelen

Fiets Generator gemaakt van opruiming onderdelen

Mijn fiets generator is opgebouwd uit een oude hometrainer, en gebruikt een ketting en kettingwiel aandrijving die een auto voorruit ruitenwisser motor draait. De aandrijving is een overbrengingsverhouding van 1:30, wat betekent dat een complete revo
USB fiets Generator

USB fiets Generator

de USB fiets Generator is een kleine fiets gemonteerd elektriciteit produceren apparaat geoptimaliseerd voor stroomvoorziening voor twee USB-poorten.  Er zijn zo veel kleine elektronica die kunnen worden aangedreven of vanaf een USB-aansluiting die a
Stationaire fiets Generator van wasmachine

Stationaire fiets Generator van wasmachine

toen onze oude wasmachine stierf, ik niet kon dragen om te gooien van de motor. Dus ik heb sommige graven en het blijkt dat ze ideaal stroomaggregaten maken. Dit instructable documenteert hoe maakte ik een excersize fiets die kan het aandrijven van a
DIY fiets Generator

DIY fiets Generator

leren hoe te maken van een generator voor uw fiets, zodat u macht kunt lichten en andere koele toevoegingen hebt! Dit is mijn eerste kunnen instrueren en wil graag om dit In de epilog challenge. Ik ben een jonge jongen die probeert om een baan te kri
DIY BIKE HACK DC fiets GENERATOR LED verlichting Light Emitting Diode

DIY BIKE HACK DC fiets GENERATOR LED verlichting Light Emitting Diode

Deze video toont dat de kracht van permanente magneet motoren van DC gebruikt in omgekeerde als een generator. De motor wordt aangepast zodat het een zeer hoog toerental bieden een bruikbare gelijkstroom draait. De oefening DIY fiets kan aandrijven e
Maak van een ultra-goedkope generator voor uw fiets (met goedkope middelen uit bijna vuil!)

Maak van een ultra-goedkope generator voor uw fiets (met goedkope middelen uit bijna vuil!)

Vandaag wil ik u tonen hoe te bouwen een zeer goedkope nog werkende fiets generator. Mijn idee is niet concurreren met een winkel koopt "dynamo", maar in plaats daarvan leer je een leuk project gemaakt van afval (en sommige van de wetenschap ach
Elektrische fiets tot elektrische generator - eenvoudige DIY mobiele interactieve wetenschapsmuseum

Elektrische fiets tot elektrische generator - eenvoudige DIY mobiele interactieve wetenschapsmuseum

ik hoor en ik vergeet. Ik zie en ik onthoud. Ik doe en ik begrijp.Toeschrijven aan Confucius (~ 500 v.Chr.).  Nu nog steeds waar 2500 jaar later.Toen ik was 7 of 8 jaar oud op een ellendig koude grijze dag in februari mijn ouders mijn broer en zuster
Gereglementeerde [5v] fiets Dynamo licht & USB oplader

Gereglementeerde [5v] fiets Dynamo licht & USB oplader

hoewel, er zijn tal van "Dynamo fietsverlichting" instructies op deze site, ik dacht dat ik zou delen mijnen.   Het grote nieuws, zijn er geen weerstanden in mijn circuit.    Het heeft een vaste 5 volt uitgang, zodat u zo snel als je wilt zonder