Hallo,
Bijgaande sketch werkte prima op een uno3.
Omwille van de afmeting heb ik een nano gekocht.
Tevens de IDE geupdate en de CH340 Driver geinstalleerd.
Na enig zoeken een board/com combinatie gevonden:
Arduino nano mini op com4. Moet dat af en toe weer wijzigen maar dat is niet het probleem.
Het programma draait goed maar loopt in een loop.
Reset maakt geen verschil.
I zie servo staan in je sketch en nu vermoed ik dat je de stroomvoorziening van je servo via je Nano laat gaan. Servo's moet je echt een eigen 5 volt stroombron geven die veel sterker is dan wat een Arduino nodig heeft en vervolgens alleen de witte signaaldraad en de zwarte aardedraad aan je nano (en beter ook Uno) hangen.
Jouw servo's trekken zoveel stroom en de electromotoren in de servo's genereren zoveel storing op de voedingsspanning dat je nano zichzelf reset.
Zo'n foto van je sketch kun je beter niet doen. Het is slecht te zien en mensen kunnen niet even je code kopieren om uit te proberen.
Code kopieren in de IDE mbv "Copy for Forum" en dan in je bericht plakken. Dan is het meteen zo geformatteerd dat we het binnen kunnen kopieren.
Hi
Klopt de (2) servo staan beide op 6.8V voeding, dus apart van de 5V voor de nano.
Ik was juist bezig de sketch te kopieren toen mijn vrouw ziek naar bed kwam. Mijn comp staat in dezelfde ruimte. Dus wist ik niet beter als snel een fotootje te nemen.
Kan morgen alsnog de sketch opnieuw mailen
Ik zou de spanning wat lager zetten, en als je de voltinput gebruikt juist wat hoger om 5V op je arduino te krijgen. kijk maar eens wat de spanning is op je nano.
Ik heb eerst alles omgebouwd naar de UNO. (morgen probeer ik het weer terug te bouwen naar de NANO).
Zo ziet de sketch er nu uit, de belangrijkste wijziging is dat de buttonstate nu '1' is terwijl die stond op 'LOW'.
Nu werkt hij wel maar de reset doet nog heel vreemd: na stroom erop: draait hij de loop tot aan servo_9.write(0); dan stopt hij en blijft zo staan.
Druk ik vervolgens op de Startknop dan maakt hij de loop af en stopt in de startpositie.
Dat laatste is goed.
Druk ik nu vervolgens op de startknop dan gaat het hele programma goed;
alleen moet ik ca 2-3 seconden op de startknop drukken voordat hij start.
Dat is véééél te lang want het systeem is bedoeld om bij een zeer geringe druk op de brievenbus klep
onmiddellijk te openen. Dit gaat middels een scherp afgestelde microswitch.
Ik kan een foto en een video sturen maar weet niet of dat toegelaten is in dit forum.
Ik zou heel blij zijn als die startvertraging opgelost raakt; de reset is raar maar daar kan ik wel mee leven.
MVG
Tom Hoekstra
Is de startknop de button die aan pin 2 zit?
Ik zie dat de servos geactiveerd worden, als die naar HIGH level wordt geschakeld. Hoe zit die precies aangesloten? Indien de startknop niet ingedrukt is, is pin 2 dan op dat moment nergens op aangesloten?
Dat moet nl niet, want een "zwevende" pin kan uit zichzelf naar zowel HIGH of LOW gaan op basis van een beetje statische electriciteit.
Daar is een simpele oplossing voor door de pin 2 naar de minpool te laten schakelen en
pinMode(2, INPUT);
te vervangen door
pinMode(2, INPUT_PULLUP);
Als de startknop dan niet ingedrukt is, zorgt de PULLUP ervoor dat de pin altijd als HIGH gezien wordt .
if (buttonState == 1) {
moet dan wel vervangen worden door
if (buttonState == 0) {
Tot slot, 1,5 seconden vertraging komt door:
delay(1500); // Wait for 1500 millisecond(s)
Als hij met die delay klaar is, gaat hij pas weer naar de startknop kijken, dus dat zorgt voor vertraging.
Haal die delay maar eens weg
int Position = 0; //aanpassen hoekverdraaiing mag ook wel weg, want die wordt nergens gebruikt
Om de servo's meteen in de beginpositie te laten starten na aanzetten, moet je voordat je het commando attach geef de servo's wel eerst vertellen in welke positie ze moeten starten
Ik heb het zo gewijzigd pinMode(2, INPUT_PULLUP); en ook if (buttonState == HIGH) aangepast.
Maar ik zie geen enkele verbetering.
Mijn schakelaar is wel naar de Gnd verbonden maar met een weerstandje van 220ohm ertussen.
Zou ik die moeten weghalen?
Verder omschrijf je niet wat er nu precies niet werkt, dus dan is het moeilijk om je verder te helpen. Voor een goede diagnose is het nodig dat je zo nauwkeurig mogelijk omschrijft hoe je de zaak hebt aangesloten. Wat je wil dat hij precies doet en op welk punt hij niet doet wat je wilt.
Ik dacht, laat ik toch maar even een testopstelling maken met een servopuls analyzer. Kennelijk is er wat veranderd in de servo library, want een servohoek opgeven voor het "attach" statement trekt zich niets aan van de min- max limieten in het attach commando.
Reactie op laatste 2 posts:
Ik heb vanochtend het nodige zitten lezen en proberen alleen helaas nog niet met het resultaat dat ik nodig heb.
Wat wél is opgelost is het continue doordraaien van de loop. Zodoende blijft er nog 1 cruciaal probleem over:
Nadat de startschakelaar is geactiveerd duurt het véél te lang voordat het programma gaat werken > zeker 2-3 seconden.
Dat moet terug naar 0.1-0.2sec maximaal.
Omdat ik al lezend vanalles heb zitten proberen, eerst maar even de sketch op dit moment:
Wat bedoel je met het continue doordraaien van de loop is een probleem? Dat is nu precies de bedoeling van een loop, dat hij continue "loopt".
Alles wat je maar eenmalig wil doorlopen staat in "setup" en alles wat continue moet doordraaien zet je in "loop".
Wat bedoel je nu met de startschakelaar? Een Arduino heeft zo'n schakelaar niet.
Als je de stroom er op aansluit, dan duurt het inderdaad 2 seconden voor z'n programma begint te draaien. ook als je de reset knop op je Arduino indrukt duurt het weer twee seconden voor je programma begint te lopen.
Als je programma eenmaal loopt en je drukt de knop in die aan pin 2 hangt gaat je servo onmiddelijk bewegen.
Mits je die delay(1500) er uit haalt, maar daar sprak ik al eerder over.
Toggle.h doet niets. Je maakt het beschikbaar voor je programma middels de include, maar je doet er nergens wat mee.
doordraaien van de loop: zeker maar hij moet wel stoppen aan het eind van de loop; en dat deed hij niet, maar dat is in orde nu.
startschakelaar: Aan D2 zit de startschakelaar (=knop) om de sketch te starten. stroom er op aansluit*:* stroom blijft er continu op staan. je drukt de knop in die aan pin 2 hangt gaat je servo onmiddellijk bewegen: Wel dàt is nu juist het punt, na lang indrukken (ca2sec) duurt het nóg eens 2-3 sec voordat de servo's gaan lopen. Dat is véél te lang. De knop (startschakelaar) is straks in de praktijk een microswitch.
Toggle.h doet niets: Idd geeft geen verbetering, dus weer verwijderd.
MAAR... Het verwijderen van de (1500) delay is de oplossing! Nu reageert de knop wél direct.
Waarom was die delay erin gezet? Op pin13 staan ook een serie LED's en die moeten een 1.5sec langer blijven branden nadat de servo's terug in beginstand staan.
Ik heb de LED's op pin 12 gezet en dààr de delay van 2sec aan vooraf laten gaan.
EN DAT WERKT!
Opgelost. Hartstikke bedankt voor de hulp- ik heb er veel van geleerd! Nu ga ik het hele zaakje inbouwen in de brievenbus, maar dat is mijn vakgebied (wtb) dat moet lukken.
Pin 12 of 13 maakt niks uit, maar het maakt wel uit of de delay(1500); binnen de haken van het if statement valt of erbuiten. (zie hieronder)
Nu worden de beide delays alleen geactiveerd als de knop is ingedrukt. Als de knop niet is ingedrukt wordt alles wat binnen de haken van het if statement valt steeds overgeslagen en is de loop alleen maar druk met continue naar de input pin (2) kijken of die al eens wordt ingedrukt
#include <Servo.h>
int Position = 0; //aanpassen hoekverdraaiing
int buttonState = 0;
Servo servo_9;
Servo servo_10;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(13, OUTPUT);
servo_9.attach(9, 500, 2500);
servo_10.attach(10, 500, 2500);
servo_9.write(15);
servo_10.write(0);
}
void loop() {
buttonState = digitalRead(2);
if (buttonState == HIGH) {
digitalWrite(13, HIGH);
servo_9.write(70);
servo_10.write(70);
delay(7000); // Wait for 7000 millisecond(s)
servo_9.write(15);
servo_10.write(0);
delay (2000); // wait for 2sec LED's to continue
digitalWrite(13, LOW);
}
}
ok ik begrijp het, het geheim schuilt dus in de plaats van een klein accolade-tje
ik heb t aangepast, dat houd het overzichtelijker en begrijpelijker als ik er nog n's iets aan wil veranderen in de toekomst.
Jeetje, dat het zo kort kan zijn. Ok board is nu in de inbouwfase maar als ik over n poosje de draaihoeken zal moeten bijstellen dan verkort ik de schets overeenkomstig.
Met dank!