Pendelbaan werkt niet zoals verwacht
7 berichten
• Pagina 1 van 1
Pendelbaan werkt niet zoals verwacht
Ik heb een pendelbaantje gebouwd (N-spoor) waarop een analoge bus tussen 2 stations heen en weer moet pendelen.
Ik gebruik IR-reflectiesensoren (zender en ontvanger naast elkaar) en later IR-lichtsluisjes (zender tegenover ontvanger(.
Ik heb het volgende probleem: de bus rijdt eerst een stukje richting sensor1, stopt, wacht 10 sec. en rijdt dan een stukje richting sensor2, dit herhaalt zich zonder een sensor te triggeren.
Ik heb geen idee wat er fout gaat, hopelijk iemand anders wel.
De sketch:
Ik gebruik IR-reflectiesensoren (zender en ontvanger naast elkaar) en later IR-lichtsluisjes (zender tegenover ontvanger(.
Ik heb het volgende probleem: de bus rijdt eerst een stukje richting sensor1, stopt, wacht 10 sec. en rijdt dan een stukje richting sensor2, dit herhaalt zich zonder een sensor te triggeren.
Ik heb geen idee wat er fout gaat, hopelijk iemand anders wel.
De sketch:
- Code: Alles selecteren
[code]
int pSensor_1 = 3; //sensor bij station A
int pSensor_2 = 4; //sensor bij station B
int pRichting_v = 5; //Vooruit rijden A naar B,naar IN1 op L298
int pRichting_a = 6; //Achteruitrijden rijdenB naar A,naar IN2 op L298
int pRijspanning = 9; //PWM-pin naar ENA op L298
bool bRichting = 1; //Rijrichting, 1 = vooruit
int iRijSpanning = 0; //Waarde tussen 0 (0V) en 255 (5V)
const char* stateNames[] = {
"stWachtenStation",
"stAanzetten",
"stRijden",
"stAfremmen"
};
enum States {
stWachtenStation,
stAanzetten,
stRijden,
stAfremmen
};
enum States states = stWachtenStation;
void setup() {
pinMode(pSensor_1, INPUT);
pinMode(pSensor_2, INPUT);
pinMode(pRichting_v, OUTPUT);
pinMode(pRichting_a, OUTPUT);
pinMode(pRijspanning, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.print("Current State: ");
Serial.println(stateNames[states]);
Serial.println("Richting: ");
Serial.println(bRichting);
switch (states)
{
// Wachten op het station, voor 10 seconden (10000ms)
case stWachtenStation:
setDirection(bRichting);
delay(10000);
states = stAanzetten;
break;
case stAanzetten:
// In stapjes van 2ms weer optrekken (tot aan 255, wat vaak 1 is)
for (int i = 0; i < 255; i++)
{
iRijSpanning++;
analogWrite(pRijspanning, i);
delay(2);
}
states = stRijden;
break;
case stRijden:
// Deze state blijft aangeroepen worden tijdens het rijden tot dat 1 van de
// pSensor_1 of pSensor 2 wordt gespot, daarna gaat hij afremmen
if (bRichting == 1)
{
if (digitalRead(pSensor_2) == 0)
{
states = stAfremmen;
bRichting = 0;
}
}
else
{
if (digitalRead(pSensor_1) == 0)
{
states = stAfremmen;
bRichting = 1;
}
}
break;
// Afremmen in stapjes van 2ms, je zou de delay weg kunnen halen voor instant stop.
case stAfremmen:
for (int i = 0; i < 255; i++)
{
iRijSpanning--;
analogWrite(pRijspanning, iRijSpanning);
delay(2);
}
states = stWachtenStation;
break;
}
}
void setDirection(int richting)
{
// Beetje overkill, maar hier wordt alles uitgezet
digitalWrite(pRichting_v, LOW);
digitalWrite(pRichting_a, LOW);
delay(100);
// vooruit
if (richting == 0)
{
digitalWrite(pRichting_v, HIGH);
digitalWrite(pRichting_a, LOW);
}
//Achteruit
else
{
digitalWrite(pRichting_v, LOW);
digitalWrite(pRichting_a, HIGH);
}
}
[/code]
Advertisement
Re: Pendelbaan werkt niet zoals verwacht
hij doet een halve seconde over afremmen prima maar welke richting is afremmen? dus een paar statussen erbij zetten zoals rijden links rijden rechts remmen links en remmen rechts en ook nog festopt links en rechts.
en je mag best de status of zoiets in de monitor zetten dan zie je wat actief is. hou er verder rekening mee dat het programma heel erg snel is dus veel sneller dab sensoren
en je mag best de status of zoiets in de monitor zetten dan zie je wat actief is. hou er verder rekening mee dat het programma heel erg snel is dus veel sneller dab sensoren
paul deelen
shooter@home.nl
shooter@home.nl
- sterretjeToo
- Berichten: 45
- Geregistreerd: 05 Feb 2023, 13:30
Re: Pendelbaan werkt niet zoals verwacht
Geen idee welke sensoren je gebruikt. Misschien hebben deze sensoren een open-collector uitgang; in dat geval moet je de uitgang via een weerstand aan Vcc knopen (of de interne pull-up gebruiken)
Wat je nu hebt is misschien een zwevende ingang en die kan storingen uit de omgeving oppiken en daar reageert je programma op.
Wat je nu hebt is misschien een zwevende ingang en die kan storingen uit de omgeving oppiken en daar reageert je programma op.
Re: Pendelbaan werkt niet zoals verwacht
Testen kan ik het programma niet maar er zijn wat verdachte statements.
- Code: Alles selecteren
case stRijden:
// Deze state blijft aangeroepen worden tijdens het rijden tot dat 1 van de
// pSensor_1 of pSensor 2 wordt gespot, daarna gaat hij afremmen
if (bRichting == 1)
{
if (digitalRead(pSensor_2) == 0)
{
states = stAfremmen;
bRichting = 0;
}
}
else
{
if (digitalRead(pSensor_1) == 0)
{
states = stAfremmen;
bRichting = 1;
}
}
break;
Re: Pendelbaan werkt niet zoals verwacht
Nu het hele verhaal:
Testen kan ik het programma niet maar er zijn wat verdachte statements.
if (rRichting == 1) is overbodig alleen de sensor test is bepalend.
Verder loop de i in de for loop samen met de IRijSpanning.
Testen kan ik het programma niet maar er zijn wat verdachte statements.
if (rRichting == 1) is overbodig alleen de sensor test is bepalend.
- Code: Alles selecteren
case stRijden:
// Deze state blijft aangeroepen worden tijdens het rijden tot dat 1 van de
// pSensor_1 of pSensor 2 wordt gespot, daarna gaat hij afremmen
if (digitalRead(pSensor_2) == 0)
{
states = stAfremmen;
bRichting = 0;
}
if (digitalRead(pSensor_1) == 0)
{
states = stAfremmen;
bRichting = 1;
}
break;
Verder loop de i in de for loop samen met de IRijSpanning.
- Code: Alles selecteren
while (iRijSpanning < 255)
{
iRijSpanning++;
analogWrite(pRijspanning, iRijSpanning);
delay(2);
}
.........
while (iRijSpanning > 0)
{
iRijSpanning--;
analogWrite(pRijspanning, iRijSpanning);
delay(2);
}
Re: Pendelbaan werkt niet zoals verwacht
Alles goed en wel maar:
a) de rijrichting maakt toch niets uit, hij moet na het passeren van een sensor omkeren.
b) ik ga het eens proberen met Hall sensoren en een magneet onder de bus.
Mvg, Willem
a) de rijrichting maakt toch niets uit, hij moet na het passeren van een sensor omkeren.
b) ik ga het eens proberen met Hall sensoren en een magneet onder de bus.
Mvg, Willem
Re: Pendelbaan werkt niet zoals verwacht
[quote="Who2020"
b) ik ga het eens proberen met Hall sensoren en een magneet onder de bus.
Mvg, Willem[/quote]
Welk sensortype wordt gebruikt heeft geen invloed op de werking van het programma.
Zelf gebruiken wij ook IR sensoren maar onze programma opbouw is anders dan deze complexe case vorm.
Wij programmeren meer met procedures die sequentieel aangeroepen worden waardoor eerder duidelijk wordt waar er wat anders gebeurd dan verwacht. Het maakt het miz ook makkelijker om te kunnen controleren of het bereiken van een sensor veel langer duurt dan normaal. Als dat laatste het geval is, dan is er wat mis en wordt bij ons een failure procedure in werking gezet.
b) ik ga het eens proberen met Hall sensoren en een magneet onder de bus.
Mvg, Willem[/quote]
Welk sensortype wordt gebruikt heeft geen invloed op de werking van het programma.
Zelf gebruiken wij ook IR sensoren maar onze programma opbouw is anders dan deze complexe case vorm.
Wij programmeren meer met procedures die sequentieel aangeroepen worden waardoor eerder duidelijk wordt waar er wat anders gebeurd dan verwacht. Het maakt het miz ook makkelijker om te kunnen controleren of het bereiken van een sensor veel langer duurt dan normaal. Als dat laatste het geval is, dan is er wat mis en wordt bij ons een failure procedure in werking gezet.
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten