Servo aansturen met arduino

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • thomasv.w
  • Registratie: Maart 2021
  • Laatst online: 07-09-2021
Hallo allen,

Ik wil graag een servomotor aansturen met arduino, alleen wilt het nog niet helemaal meewerken.

Het is een redelijk simpel programma denk ik.

Ik wil bij een hoog signaal de servo 90 graden laten draaien, en dan na een seconde weer terug naar zijn beginpositie sturen.

Bij geen signaal natuurlijk niks doen.

Kan iemand me helpen?

Met vriendelijke groet,

Thomas

Alle reacties


Acties:
  • +2 Henk 'm!

  • dragonhaertt
  • Registratie: Februari 2011
  • Laatst online: 06:50

dragonhaertt

@_'.'

Iemand kan je vast helpen, maar het is niet de bedoeling dat we het werk voor je doen.
Als je niet een specifieke vraag hebt, kunnen we je moeilijk helpen.

Wat heb je geprobeerd? Waar loop je tegenaan?

Is de aansluiting goed? Weet je niet hoe je de code op de arduino krijgt? Weet je niet hoe je arduino code moet schrijven? Weet je niet hoe je de servo moet aansturen?

Juist met arduino zou je op 99% van je vragen zo antwoord moeten kunnen vinden met 10 minuten google werk. Als je daarna nog echt tegen een specifiek probleem loopt kan je dat hier best posten, maar wel met wat meer info a.u.b.

Truth is like a language with no native speakers left.
Its poetry is speechless and it can’t be caught in human being’s breath.


Acties:
  • 0 Henk 'm!

  • thomasv.w
  • Registratie: Maart 2021
  • Laatst online: 07-09-2021
Dit is mijn code, de code geeft geen foutmelding, alleen mn servo doet niks.


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<Servo.h>
Servo Myservo;
int pos = 0;
int signaal = 2;
void setup()
{
  pinMode(2,INPUT);
  Myservo.attach(8);
  digitalWrite(2, LOW);
}

void loop()
{
  if(digitalRead(2)==HIGH){
    Myservo.write(180);
  }
  else
    
 Myservo.write(0);

}

[ Voor 2% gewijzigd door SA007 op 22-04-2021 16:59 . Reden: code tag toegevoegd. ]


Acties:
  • 0 Henk 'm!

  • de_marvin
  • Registratie: Mei 2008
  • Laatst online: 18-05 23:33

de_marvin

You gotta love muffin's!

Google eens op PWM voor meer inormatie, maar pin 8 (op een standaard) Arduino board ondersteunt geen PWM.

Probeer pin 3, 5, 6, 9, 10 of 11 (de pinnen met een ~)

Acties:
  • +1 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 07:02

Septillion

Moderator Wonen & Mobiliteit
@de_marvin Mag ik dan jou vragen de Servo library even te googlen? ;) Op de meeste Arduino's (en bij alle standaard borden zeker) werkt de Servo library op elke pin. Je kan soms alleen niet gelijktijdig PWM gebruiken op enkele pinnen.

@thomasv.w Dat is niet heel veel antwoord voor veel vragen van @dragonhaertt. De code doet niet wat je wilt maar had wel wat (redelijk random) beweging van de servo verwacht. Zou je eens met wat meer details kunnen komen? Fotootje van de opstelling bijvoorbeeld. En voor een schema zou je het gewoon even met pen en papier kunnen doen en een foto plaatsen. Is vaak nuttiger dan het huidige probleem lastiger te maken door nu ook aan een nieuw software pakket te beginnen om een schema te tekenen. ;)

Acties:
  • 0 Henk 'm!

  • de_marvin
  • Registratie: Mei 2008
  • Laatst online: 18-05 23:33

de_marvin

You gotta love muffin's!

Septillion schreef op donderdag 22 april 2021 @ 16:29:
@de_marvin Mag ik dan jou vragen de Servo library even te googlen? ;) Op de meeste Arduino's (en bij alle standaard borden zeker) werkt de Servo library op elke pin. Je kan soms alleen niet gelijktijdig PWM gebruiken op enkele pinnen.

@thomasv.w Dat is niet heel veel antwoord voor veel vragen van @dragonhaertt. De code doet niet wat je wilt maar had wel wat (redelijk random) beweging van de servo verwacht. Zou je eens met wat meer details kunnen komen? Fotootje van de opstelling bijvoorbeeld. En voor een schema zou je het gewoon even met pen en papier kunnen doen en een foto plaatsen. Is vaak nuttiger dan het huidige probleem lastiger te maken door nu ook aan een nieuw software pakket te beginnen om een schema te tekenen. ;)
Cool, wist niet dat dat al in de servo library zat :)

Het enige wat ik nog zou aanraden is de pinmode in te stellen voor de servo pin en dan analogWrite te doen via een PWM pin.

[ Voor 3% gewijzigd door de_marvin op 22-04-2021 16:37 ]


Acties:
  • +2 Henk 'm!

  • AlexanderB
  • Registratie: Maart 2007
  • Laatst online: 09-05 19:05

AlexanderB

7800 rpm

Um, nee, een analogwrite heeft geen zin, want een servo werkt niet op dat soort PWM, die verwacht 50x per seconde een puls van 0.5-1.5 miliseconde.



Waarom de digitalWrite op regel 9? Als je die pin definieert als INPUT (ipv INPUT_PULLUP) dan is die standaard al laag. Doet verder niks, het is dus vooral overbodig. :)

Andersom, definieren als INPUT_PULLUP of na het definieren als input een digitalWrite HIGH doen zet de interne pullup op die pin aan.

Wat de servo betreft, kan je bijvoorbeeld 80 en 100 graden proberen als waarde? sommige servo's vinden waardes die dicht bij '0' of '180' liggen niet fijn.

Acties:
  • 0 Henk 'm!

  • rayx
  • Registratie: Juli 2019
  • Laatst online: 28-03 17:55

rayx

HUH?

“Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.”


Acties:
  • 0 Henk 'm!

  • dragonhaertt
  • Registratie: Februari 2011
  • Laatst online: 06:50

dragonhaertt

@_'.'

thomasv.w schreef op donderdag 22 april 2021 @ 15:35:
Dit is mijn code, de code geeft geen foutmelding, alleen mn servo doet niks.


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<Servo.h>
Servo Myservo;
int pos = 0;
int signaal = 2;
void setup()
{
  pinMode(2,INPUT);
  Myservo.attach(8);
  digitalWrite(2, LOW);
}

void loop()
{
  if(digitalRead(2)==HIGH){
    Myservo.write(180);
  }
  else
    
 Myservo.write(0);

}
Als hij niks doet dan is hij niet aangesloten.
Of niet goed aangesloten
of je hebt je code niet gecompileerd
of niet geupload
of de arduino niet gestart
of hij heeft geen voeding
of je code is fout
of je servo is een ander type dan je verwacht
of je voed je servo niet apart
of......

Als je wat hulp wil moet je echt even met wat meer info komen dan wat je nu post. Zoals ik al zei, we zijn niet je storingszoekers, maar er zijn wel genoeg behulpzame mensen te vinden hier.

Begin eerst zelf even met storingzoeken, documenteer je stappen, doe een rubberducky, google je specifieke probleem.
Vragen zonder eigen inzet zijn niet echt de bedoeling op GoT.

Truth is like a language with no native speakers left.
Its poetry is speechless and it can’t be caught in human being’s breath.


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 23:36
Je zou het kunnen uitproberen op een simulator zoals bijvoorbeeld SimulIDE dan heb je wat meer zekerheid of het aan de code ligt, aan de bedrading of aan een defecte servo. Niet dat simulide altijd 100% werkt, toevallig met meerdere servo's was er een probleempje in 0.4.15, maar goed, die versie is nog in de testfase.
https://simulide.forumoti...arduino-uno-does-not-work

Ik heb de meest fundamentele opstelling geprobeerd en dat gaat goed, dit is de bron met code
https://elektronicavoorjo...ntroductie-servo-control/
De sim heeft een hex-bestand nodig om als firmware te kunnen uploaden in de microcontroller
Dat gaat als volgt:
Verify de code zoals normaal, klik op Sketch en dan op Export compiled binary. Dit genereert 2 hex-files, eentje zonder en eentje met bootloader. Een bootloader heb je niet nodig in de simulatie dus kies de eerste als upload firmware. Dan is dit de uitkomst:

Afbeeldingslocatie: https://tweakers.net/i/TMTVa_BfxEGRAJE-z1VpQsqhn3E=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/Mb0wAAnYXqns8Q84bnj808ZI.png?f=user_large

https://www.simulide.com/p/downloads.html

*******************************************************************
thomasv.w schreef op donderdag 22 april 2021 @ 15:35:
Dit is mijn code, de code geeft geen foutmelding, alleen mn servo doet niks.


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<Servo.h>
Servo Myservo;
int pos = 0;
int signaal = 2;
void setup()
{
  pinMode(2,INPUT);
  Myservo.attach(8);
  digitalWrite(2, LOW);
}

void loop()
{
  if(digitalRead(2)==HIGH){
    Myservo.write(180);
  }
  else
    
 Myservo.write(0);

}
Die code draait goed op de simulator bij mij

Afbeeldingslocatie: https://tweakers.net/i/B67lGi6D2ycS7opMee1VnwHEhO4=/800x/filters:strip_exif()/f/image/gGixieTPDqZRU8MutUYgQi4K.png?f=fotoalbum_large

Je zou als test een ledje op pin 8 zonder weerstand kunnen aansluiten, volgens de sim knippert die dan flauw bij zowel H als L op pin 2. Misschien toch beter wel met een weerstandje beginnen voordat poort 8 wegsmelt.

Ps2\
Deze is iets meer interactief
https://circuitdigest.com...-control-code-and-circuit
Jammer alleen dat de code het niet doet en dat het schema niet overeenstemt met de pin toekenning in de code. Het attach commando ontbreekt. Indien toegevoegd, zie regel 10, werkt het wel.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
volatile int i=0;//initializing a integer for incrementing and decrementing duty ratio.

#include <Servo.h>// header file for controlling servo

Servo servo;//defining the name usage as servo itself

void setup()

{
    servo.attach(3); // Deze zelf toegevoegd



                pinMode(3, OUTPUT);   // sets the pin3 as output

                pinMode(8, INPUT);// sets the pin8 as input

                pinMode(9, INPUT);// sets the pin9 as input

}

void loop()

{

                servo.write(i);//set servo potion ‘i’ degrees

                if (digitalRead(8)==LOW)

                {

                                if (i<180)

                                {

                                                i++;//if pin8 is pressed and degrees is less than 180

                                                delay(30);

                                }

                }

                if (digitalRead(9)==LOW)

                {

                                if (i>0)

                                {

                                                i--;// if pin9 is pressed and degrees is greater than 0

                                                delay(30);

                                }

                }

}


Afbeeldingslocatie: https://tweakers.net/i/S2gCs-sZzkNzsEWrgpMSG_FruTM=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/RVzvtF9c3Gkh5irtfHTMUiK0.png?f=user_large

[ Voor 59% gewijzigd door kitao op 28-04-2021 14:30 . Reden: TS' code uitgeprobeerd en toegevoegd ]

Pagina: 1