Stap 1: ARDUINO CODE
/******************************************
DOEL: Om te werken van een discobal
Gemaakt door George K Nkrumah
DATUM: 04/01/2015
*******************************************/
#include
#include
#include
#include //include de I2C-bibliotheek, dit is een standaard pakket library voor Arduino
#include
Dit is de speciale I2C LCD display bibliotheek bij het beeldscherm
LiquidCrystal_I2C myDisplay(0x27,16,2); Dit maakt een instantie van een LCD-object met de naam "myDisplay"
We het LCD-adres ingesteld op 0x27 (dit is een hexadecimaal getal, die gelijk aan 0b100111 is); Dit is de I2C
adres voor de PCF8574 poort extender-chip die de weergave bepaalt bus (zie video-tutorial)
en definieer het aantal kolommen (16) en rijen (2) van het display
Dit vertelt de methoden in de bibliotheek welke weergave die wij behandelen
#define pin1 0 / / dit zijn de Arduino pinnen die we gebruiken om te activeren spoelen 1-4 van de stappenmotor
#define pin2 1
#define pin3 2
#define pin4 3
#define delaytime 8 //delay tijd in ms om te controleren de stepper motor delaytime.
Onze tests is gebleken dat 8 over de snelste die kunnen betrouwbare werking w/o de ontbrekende stappen opleveren
int LED1 = 10;
int LED2 = 11;
int LED3 = 12;
int j = 0;
int m = 5;
int n = 10;
/************************set-up function******************************************************************/
VOID Setup
{
myDisplay.init(); initialiseren van de lcd - Hiermee stelt u het canvas karakter 5 x 8 pixels en sommige andere hardware specificaties
Opmerking: Deze methode .init() begint ook de I2C-bus, dus er hoeft niet te worden
een aparte "Wire.begin();" instructie in de setup.
myDisplay.backlight (); //this Hiermee schakelt u de achtergrondverlichting
Een bericht op het LCD-scherm afdrukt.
myDisplay.print ("Dj Kwame... Repping GH!");
delay(1000); 1000msec wachten
Initialiseer de 8 pin als uitgang:
pinMode (pin1, OUTPUT);
pinMode (pin2, OUTPUT);
pinMode (pin3, OUTPUT);
pinMode (pin4, OUTPUT);
pinMode (LED1, uitvoer);
pinMode (LED2, uitvoer);
pinMode (LED3, uitvoer);
}
/*************************main loop************************************************************************/
void loop
{
digitalWrite (LED1, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(1000); wachten op een tweede
digitalWrite (LED2, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(1000); wachten op een tweede
digitalWrite (LED3, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(1000); wachten op een tweede
Let's play met sommige van de methoden opgenomen in de bibliotheek:
int numberOfSteps = 2048;
step_OFF(); het uitschakelen van alle spoelen
while(numberOfSteps>0) {}
vooruit(); gaan vooruit
numberOfSteps--; //counting naar beneden het aantal stappen
Als (j < 15)
{
digitalWrite (LED1, laag); de LED inschakelen (HIGH is het spanningsniveau)
j ++;
}
Als (j > = 15)
{
digitalWrite (LED1, hoge); de LED inschakelen (HIGH is het spanningsniveau)
j = 0;
}
Als (m < 15)
{
digitalWrite (LED2, laag); de LED inschakelen (HIGH is het spanningsniveau)
digitalWrite (LED3, laag); de LED inschakelen (HIGH is het spanningsniveau)
m ++;
}
Als (m > = 15)
{
digitalWrite (LED2, hoge); de LED inschakelen (HIGH is het spanningsniveau)
digitalWrite (LED3, hoge); de LED inschakelen (HIGH is het spanningsniveau)
m = 0;
}
}
voor (int i = 0; ik < 10; i ++) {//this schuift de tekst 10 posities naar rechts
myDisplay.scrollDisplayRight();
delay(200);
}
voor (int i = 0; ik < 10; i ++) {//and terug naar de linkerzijde
myDisplay.scrollDisplayLeft();
delay(200);
}
delay(2);
step_OFF(); het uitschakelen van alle spoelen
numberOfSteps = 2048;
while(numberOfSteps>0) {}
backward(); achterwaarts gaan
numberOfSteps--; //counting naar beneden het aantal stappen
}
delay(200);
digitalWrite (LED1, laag); de LED inschakelen (HIGH is het spanningsniveau)
delay(1000); wachten op een tweede
digitalWrite (LED2, laag); de LED inschakelen (HIGH is het spanningsniveau)
delay(1000); wachten op een tweede
digitalWrite (LED3, laag); de LED inschakelen (HIGH is het spanningsniveau)
delay(1000); wachten op een tweede
Dit wordt de cursor van het beeldscherm ingesteld op de tweede rij en 9e tekenpositie in die rij
myDisplay.setCursor(1,8);
vervolgens drukken we vanaf de cursorpositie
myDisplay.print ("See you Later!");
Bekijk de andere interessante methoden voor het bedienen van dit LCD die zijn opgenomen in de bibliotheek!
Laad het .h bibliotheekbestand in een teksteditor en lees de lijst met methodes... de meeste zijn zelf verklarend, wordt meer detail gevonden in het bestand .cpp
}
Stepper-bibliotheek:
deze functies stellen de pin-instellingen voor elk van de vier stappen per omwenteling van de motor (keepp in het achterhoofd dat de motor in de kit is gericht naar beneden,
d.w.z. zijn er vele stappen nodig per rotatie
VOID Step_A() {}
digitalWrite (pin1, hoge); //turn op spoel 1
digitalWrite (pin2, laag);
digitalWrite (pin3, laag);
digitalWrite (pin4, laag);
}
VOID Step_B() {}
digitalWrite (pin1, laag);
digitalWrite (pin2, hoge); //turn op spoel 2
digitalWrite (pin3, laag);
digitalWrite (pin4, laag);
}
VOID Step_C() {}
digitalWrite (pin1, laag);
digitalWrite (pin2, laag);
digitalWrite (pin3, hoge); Spoel 3 inschakelen
digitalWrite (pin4, laag);
}
VOID Step_D() {}
digitalWrite (pin1, laag);
digitalWrite (pin2, laag);
digitalWrite (pin3, laag);
digitalWrite (pin4, hoge); Spoel 4 inschakelen
}
ongeldig step_OFF() {}
digitalWrite (pin1, laag); alle spoelen uitgeschakeld
digitalWrite (pin2, laag);
digitalWrite (pin3, laag);
digitalWrite (pin4, laag);
}
deze functies uitgevoerd het bovenstaande configuraties in voorwaartse en omgekeerde volgorde
de richting van een stappenmotor hangt af van de volgorde waarin de spoelen zijn ingeschakeld.
VOID vooruit() {//one tand vooruit
Step_A();
delay(delaytime);
Step_B();
delay(delaytime);
Step_C();
delay(delaytime);
Step_D();
delay(delaytime);
}
VOID backward() {//one tand achteruit
Step_D();
delay(delaytime);
Step_C();
delay(delaytime);
Step_B();
delay(delaytime);
Step_A();
delay(delaytime);
}