externe 5 volt om digi pin hoog te maken ?

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

externe 5 volt om digi pin hoog te maken ?

Berichtdoor john33 » 16 Jun 2016, 21:36

Beste Forummers,
ik ben al een tijdje bezig met het arduino platform maar nu loop ik even vast.
Ik moet wel bekennen dat code schrijven met trial en error gaat, ik ben nog beginner.

Voor een project moet ik een servo bedienen met een 12 volt signaal.
Er zijn 2 signalen die binnenkomen:
- met signaal 1 moet de servo linksom gaan draaien.
- met signaal 2 moet de servo rechtsom gaan draaien.

Op internet zijn talloze voorbeelden te vinden om met 2 drukknoppen een servo te bedienen dus dat zal wel lukken.
Maar waar het om gaat is dat ik vanuit een controlbox (van een apparaat) 2x een 12 volt signaal krijg, 1 voor linksom, 1 voor rechtsom.

Ik zat te denken om met een spanningsdeler deze 12 volt naar 5 volt om te zetten en deze aanbieden op 2 van de digitale pinnen van de Arduino.
Kan dit zomaar ?
Ik weet dat ik alle 0 volt delen aan elkaar moet leggen, maar maakt het de Arduino iets uit of hij de 5 volt van zijn eigen voeding krijgt of ergens anders vandaan ?

Alvast bedankt voor het meedenken.

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor shooter » 17 Jun 2016, 09:46

ja hoor dat kan bijvoorbeeld met een weerstand van 5.1 kiloohm en een van 7.5 kiloohm.
verder denk je goed hoor.

Als je het zaakje wilt scheiden (nu nog niet hoor) dan kun je optocouplers gebruiken.
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor john33 » 17 Jun 2016, 12:56

Ok, dank je.

ik ben nu bezig met de code, maar loop tegen errors aan.
ik wil 4 servo`s bedienen, ik gebruik 2 digitale ingangen per soervo, 1 voor linksomdraaien, 1 voor rechtsom draaien.

Maar telkens als ik iets aanpas loop ik tegen errors aan.

de code tot zo ver:

cpp code
#include <Servo.h>

Servo stuur_truck; //servo om truck te laten sturen
Servo stuur_trailer; //servo om trailer wielen te laten sturen
Servo trailer_op_neer; //servo om trailer omhoog/omlaag te laten gaan
Servo trailer_as; //servo om 1 as omhoog/omlaag te laten bewegen
Servo ramps; //servo om ramps te laten bewegen

int potpin1 = 0; //leest waarde van de potmeter aangesloten op analog pin 0
int val1; //variabele om de waarde van de analoge pin te meten.

#define leftPin4 //stuur trailer: signaal op pin 4 voor omhoog
#define rightPin5 //stuur trailer: signaal op pin 5 voor omlaag
int pos1 = 90; // initiele positie voor servo is de middenstand
int delayPeriod1 = 50; // verhogen van deze waarde laat de servo langzamer bewegen

#define leftPin6 //trailer op neer: signaal op pin 6 voor omhoog
#define rightPin7 //trailer op neer: signaal op pin 7 voor omlaag
int pos2 = 90; // initiele positie voor servo is de middenstand
int delayPeriod2 = 50; // verhogen van deze waarde laat de servo langzamer bewegen

#define leftPin8 //stuur trailer: signaal op pin 8 voor omhoog
#define rightPin9 //stuur trailer: signaal op pin 9 voor omlaag
int pos3 = 90; // initiele positie voor servo is de middenstand
int delayPerio3 = 50; // verhogen van deze waarde laat de servo langzamer bewegen

#define leftPin10 //Ramps signaal op pin 10 voor omhoog
#define rightPin11 //Ramps trailer signaal op pin 11 voor omlaag
int pos4 = 90; //initiele positie voor servo is de LINKSOM, RAMPS OMHOOG
int delayPeriod4 = 50; //verhogen van deze waarde laat de servo langzamer bewegen



void setup() {
stuur_truck.attach(15, 45, 135); //plaats de servo op pin 15
stuur_trailer.attach(16, 70, 150); //plaats de servo op pin 16
trailer_op_neer.attach(17, 90, 160); //plaats de servo op pin 17
trailer_as.attach(18, 90, 160); //plaats de servo op pin 18
ramps.attach(19); //plaats de servo op pin 19


}

void loop() {
val1 = analogRead(potpin1); // leest de waarde van de potmeter (waarde tussen 0 en 1023)
val1 = map(val1, 0, 1023, 0, 180); // zet om in waarde voor servo (waarde tussen 0 en 180)
stuur_truck.write(val1); // plaatst de servo naar de positie naarde de geschaalde waarde
delay(15); //wacht tot de servo op zijn plaats is


if(digitalRead,(leftPin4) == HIGH) { // in stapjes van 1 graad bewegen
if( pos1 > 0) --pos1; // zolang de pin HOOG is laat de servo bewegen
stuur_trailer.write(pos1); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod1); // kijk naar de "delay" waarde = snelheid van de servo
}
if(digitalRead,(rightPin5) == HIGH) { // in stapjes van 1 graad bewegen
if( pos1 < 180) ++pos1; // zoalng de pin HOOG is laat de servo bewegen
stuur_trailer.write(pos1); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod1); // kijk naar de "delay" waarde = snelheid van de servo



if(digitalRead,(leftPin6) == HIGH) { // in stapjes van 1 graad bewegen
if( pos2 > 0) --pos2; // zoalng de pin HOOG is laat de servo bewegen
trailer_op_neer.write(pos2); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod2); // kijk naar de "delay" waarde = snelheid van de servo
}
if(digitalRead,(rightPin7) == HIGH) { // in stapjes van 1 graad bewegen
if( pos2 < 180) ++pos2; // zoalng de pin HOOG is laat de servo bewegen
trailer_op_neer.write(pos2); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod2); // kijk naar de "delay" waarde = snelheid van de servo



if(digitalRead,(leftPin8) == HIGH) { // in stapjes van 1 graad bewegen
if( pos3 > 0) --pos3; // zoalng de pin HOOG is laat de servo bewegen
trailer_as.write(pos3); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod3); // kijk naar de "delay" waarde = snelheid van de servo
}
if(digitalRead,(rightPin9) == HIGH) { // in stapjes van 1 graad bewegen
if( pos3 < 180) ++pos3; // zoalng de pin HOOG is laat de servo bewegen
trailer_as.write(pos3); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod3); // kijk naar de "delay" waarde = snelheid van de servo



if(digitalRead,(leftPin10) == HIGH) { // in stapjes van 1 graad bewegen
if( pos4 > 0) --pos4; // zoalng de pin HOOG is laat de servo bewegen
ramps.write(pos4); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod4); // kijk naar de "delay" waarde = snelheid van de servo
}
if(digitalRead,(rightPin11) == HIGH) { // in stapjes van 1 graad bewegen
if( pos4 < 180) ++pos4; // zoalng de pin HOOG is laat de servo bewegen
ramps.write(pos4); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod4); // kijk naar de "delay" waarde = snelheid van de servo

}
}


als ik mijn code verkeerd heb geplaatst, laat me weten, dan zal ik het de volgende keer anders doen.
Ik hoop dat jullie me op weg kunnen helpen.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor nicoverduin » 17 Jun 2016, 14:48

Dan moet je wel aangeven wat voor errors. Compileren? Tijdens het uitvoeren?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor shooter » 17 Jun 2016, 20:03

tussen leftPin10 en alle andere defines moet een spatie,
define betekent dat overal waar leftPin staat (of iets anders) dat vervangen wordt door 10
dus dan schrijf je bijvoorbeeld digitalRead(leftPin) en dat wordt dan door de compiler zelf vervangen door 10 en die kijkt dus naar Pin 10.

Verder zal het opvallen dat het programma erg langzaam gaat lopen als je twee knoppen tegelijk bedient.
dat komt omdat je delay gebruikt (in het begin is het heel normaal dat je het gebruikt, maar in les 2 staat al blink without delay.

ook define potpin moet anders door A0 te gebruiken, want er bestaat ook een pin 0 .
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor john33 » 17 Jun 2016, 20:35

Beste Nico, andere meelezers,

De fout doet zich voor bij het compileren:
expected primary-expression before ')' token
in de regel:
if(digitalRead,(rightPin11) == HIGH) {

Maar als ik iets wijzig, bijvoorbeeld een spatie tussen rightPin en 11 dan doet de fout zich weer ergens anders voor.
Blijkbaar verwacht IDE nog ergens een ) of zo iets, maar ik zie nog niet in wat.
Als ik tussen alle leftPin en rightPin een spatie plaats en dan het nummer gaat het beter, maar dan krijg ik de fout:
'leftPin' was not declared in this scope
Lijkt me logisch want de pinnen heten leftPin4, en niet leftPin 4.

Dus ik pas alle left en rightpins aan met een spatie er tussen.
weer een fout:
expected ')' before numeric constant
de regel waar de fout in zit: if(digitalRead,(leftPin 4) == HIGH) {

Blijkbaar is de komma achter digitalRead de boosdoener...
Maar na het weghalen van alle komma`s ben ik weer terug bij:
expected ')' before numeric constant in regel: if(digitalRead (rightPin 11) == HIGH) {


En daar loop ik vast, wat ik ook verander, mijn kennis houd even op.

Edit:
het lijkt me dat ik in de fout ga bij de "define" regels, kan het zijn dat IDE code geen nummeriek gegeven accepteerd bij een define ?
Zoals je ziet in de code zeg ik:
#define leftPin10 (als voorbeeld)
Ik heb een sketch overgenomen van iemand die een servo met 2 knoppen liet bewegen, net zoals ik zou willen, en die werkt.
Maar nu ik met meerdere servo`s en knoppen werk krijg ik compiler fouten, dus blijkbaar doe ik iets wat niet kan.
Zou ik de left en rightpins met een int const moeten benoemen ?

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor john33 » 17 Jun 2016, 21:25

shooter schreef:tussen leftPin10 en alle andere defines moet een spatie,
define betekent dat overal waar leftPin staat (of iets anders) dat vervangen wordt door 10
dus dan schrijf je bijvoorbeeld digitalRead(leftPin) en dat wordt dan door de compiler zelf vervangen door 10 en die kijkt dus naar Pin 10.

Verder zal het opvallen dat het programma erg langzaam gaat lopen als je twee knoppen tegelijk bedient.
dat komt omdat je delay gebruikt (in het begin is het heel normaal dat je het gebruikt, maar in les 2 staat al blink without delay.

ook define potpin moet anders door A0 te gebruiken, want er bestaat ook een pin 0 .


kijk, dat was het, wist ik niet, weer wat geleerd !!!
Alle spaties bij de define`s weggehaald en alle nummers bij de digitalRead(leftpin) weggehaald, en zowaar..... compiler geeft hem vrij !!!! joehoee

de kans dat 2 knoppen tegelijk bedient gaan worden is erg klein.
Een separate besturingsunit van een machine geeft OF links uit OF rechts, nooit beide.

Nu eerst 3 weken vakantie !!!
Daarna sketch meenemen naar het project en gaan kijken of het werkt.

Dank dank dank !!

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor shooter » 18 Jun 2016, 10:45

neem je de truck mee op vakantie?

Ik zou zeker kijken naar een joystick sturing, want daar zijn die servo toch eigenlijk voor bedoeld.
wellicht vanuit de controlbox? want die kan misschien ook wel op 5 Volt werken?
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor john33 » 18 Jun 2016, 22:47

Het is niet voor mij zelf, die truck.
Ik kan er niet te veel over zeggen maar het heeft te maken met een demo model voor op beurzen.
Bepaalde functionaliteit moet in dit model werkend zijn met hardware van een leverancier, de truck blijft statisch in een vitrine staan.
Hun hardware geeft signalen, ik moet deze met de arduino omzetten naar servo bewegingen om het model bepaalde dingen te laten doen.

Maar eerst lekker ontspannen.....

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: externe 5 volt om digi pin hoog te maken ?

Berichtdoor shooter » 18 Jun 2016, 23:26

Is al vaker gedaan hoor, een bekende is radio besturing, maar die kunnen ook heel vaak analoge signalen geven dus wellicht is dat een nog betere demo.
paul deelen
shooter@home.nl

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten