Hi,
ich bin doch sehr neu was Arduinos betrifft.
Ich habe hier eine IKEA Ps lampe die ich mit einem Arduino Uno
und einem 28BYJ-48 Schrittmotor betreiben will.
Der max und min Schalter soll ein Potentiometer sein, anstatt oben und unten Schalter anzubringen.
Durch einen Test, mit dem ich die Werte der offenen und geschlossenen Stellung der Lampe, ausgelesen habe, bin ich auf geschlossen Wert 1 und offen wert 67 gekommen.
Da dieser olle Motor nicht so einfach zum fahren zu bringen war, habe ich mit dem ein oder anderem Sketch aus dem Forum herumexperimentiert und die besagten 2 Kabel gedreht.
Soweit so gut. Leider ist das Ganze jetzt relativ langsam und Ich bin leider noch zu doof diese Entwerte für die jeweilige Position mit in den Kontext zu bringen.
Der Code sieht zur Zeit so aus:
//declare variables for the motor pins
int motorPin1 = 8; // Blue - 28BYJ48 pin 1
int motorPin2 = 9; // Pink - 28BYJ48 pin 2
int motorPin3 = 10; // Yellow - 28BYJ48 pin 3
int motorPin4 = 11; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
int motorSpeed = 2000; //variable to set stepper speed
int count = 0; // count of steps made
int countsperrev = 2048; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
int potPin = 2; //potentiometer connected to A2
int potValue = 2; //variable to read A0 input
//////////////////////////////////////////////////////////////////////////////
void setup() {
//declare the motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}
//////////////////////////////////////////////////////////////////////////////
void loop(){
if(count < countsperrev )
anticlockwise();
else if (count == countsperrev * 2)
count = 0;
else
clockwise();
count++;
potValue = analogRead(potPin);
Serial.println(potValue);
}
//////////////////////////////////////////////////////////////////////////////
//set pins to ULN2003 high in sequence from 1 to 4
//delay "motorSpeed" between each pin setting (to determine speed)
void anticlockwise()
{
for(int i = 0; i < 8; i++)
{
setOutput(i);
delayMicroseconds(motorSpeed);
}
}
void clockwise()
{
for(int i = 7; i >= 0; i--)
{
setOutput(i);
delayMicroseconds(motorSpeed);
}
}
void setOutput(int out)
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));
digitalWrite(motorPin2, bitRead(lookup[out], 1));
digitalWrite(motorPin3, bitRead(lookup[out], 2));
digitalWrite(motorPin4, bitRead(lookup[out], 3));
}
Wie man sehen kann, kamen meine Künste nicht über den Wert auslesen und im Serialmonitor anzeigen und die Anzahl der jeweiligen Umdrehungen durch "int countsperrev = 2048" hinaus.
Geplant ist eigentlich jetzt die Endwerte in die Bewegung Clockwise und anticlockwise als Endpunkte zu übernehmen und dann später noch einen Pir-sensor auf A0 zu legen, der die Bewegung der Lampe dann triggert.
Wie designe ich die Schleife, dass die jeweiligen Endwerte berücksichtigt werden?
Wie baue ich die Abfrage des PIr sensors in die Schleife mit ein?
Hat da jemand noch den ein oder anderen Tipp für mich?
Danke im Voraus