Voorstellen en vraag m.b.t. Servos en keypad

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 44
Geregistreerd: 07 Dec 2019, 15:13

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor jabjab » 01 Jan 2020, 20:07

dank voor je uitgebreide antwoord!

ik denk aan deze leds: https://benselectronics.nl/led-10mm-blauw-diffuus/ deze site heeft ook een calculator maar ik heb simpelweg te weinig kennis https://benselectronics.nl/weerstand-calculator/

Als ik naar de opties kijk dan lijkt het me handig om pinnen uit de range van 53 t/m 78 te gebruiken. ik kan deze nummers alleen niet rijmen met de nummers op het shield. (zie bijlage:
shield Mega2.jpg
shield Mega2.jpg (134.86 KiB) 7076 keer bekeken
).

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor Koepel » 01 Jan 2020, 21:09

Oeps, foutje van mij, en ik deed nog wel zo mijn best om het eenvoudig te houden. Sorry :oops:
Bij dat plaatje (https://i.stack.imgur.com/bBUfz.png) zijn de nummers in het roze de Arduino pin nummers.
Dus pin nummer 22 t/m 37 zijn de rechtse helft van de dubbele rij. Soms worden die D22 t/m D37 genoemd, dat is hetzelfde.

Om problemen te voorkomen is het beter om onderdelen te kopen waar wél gegevens van zijn.
Bijvoorbeeld deze: https://www.kiwi-electronics.nl/10mm-led-blauw-diffused-10-pack.

Bij die van jouw moeten ik gaan raden, maar dan ga ik een heel verhaal ophangen van hoe het zou kunnen zijn. Dan voel ik me dus in een positie gebracht om moeilijk te gaan doen. Dus daar gaan we:
Het is waarschijnlijk dezelfde led als die van kiwi-electronics en dat is een gewone 20mA led in een 10mm behuizing. De kleur blauw heeft bij kiwi-electronics een doorlaatspanning van 3.0V en bij benselectronics crasht de webpagina als ik op de blauwe led klik. Als ik de broncode bekijk dan staat er:
Code: Alles selecteren
function led_blue() {
    document.f.vdrop_field.value="3.3";
    my_onclick();
}

Dat is niet hetzelfde, daar staat 3.3V.
Laten we maar uitgaan van 3.0V, dan is het: (5.0 - 3.0) / 20mA = 100 Ω
Dus met een weerstand van 100 Ω of 120 Ω zit je goed. Dan heeft de led de maximale helderheid.

Berichten: 44
Geregistreerd: 07 Dec 2019, 15:13

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor jabjab » 01 Jan 2020, 22:20

haha, foutje geeft niet hoor. Ik waardeer het meedenken!

maakt het nog uit of er een lange draad tussen de led en het shield zit? kan me voorstellen dat dit ook een bepaalde weerstand heeft?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor Koepel » 02 Jan 2020, 08:18

Die lange draad maakt niet uit. Het is maar 20 mA. Nico had de weerstand berekend op 13 Ω (bij een dunne draad), dat verschil zie je niet.

Berichten: 44
Geregistreerd: 07 Dec 2019, 15:13

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor jabjab » 02 Jan 2020, 11:26

ok, dank je.

En wat moet ik aan code toevoegen? ik zal de pinnen moeten toewijzen aan de leds?

en in de stukjes code (per nummer van het keypad) moet ik aangeven dat de de betreffende led gaat branden en de overige leds uitgaan.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor Koepel » 02 Jan 2020, 15:03

Zo langzamerhand zou je sketch eenvoudiger worden door een array te gebruiken.
Maar misschien kan het er nog bij geknutseld worden aan de huidige sketch.
Kun je de sketch laten zien ? Bij voorkeur tussen "code-tags", dan laat dit forum de sketch op een betere manier zien. De knop "Code" geeft die code-tags.

Berichten: 44
Geregistreerd: 07 Dec 2019, 15:13

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor jabjab » 02 Jan 2020, 16:48

Hierbij de code tot zo ver... (een array klinkt me zeer ingewikkeld :oops: )

Code: Alles selecteren

#include <Keypad.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Declareer de verschillende objecten voor de servo motoren
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;



const byte ROWS = 4; //four rows

const byte COLS = 3; //three columns

char keys[ROWS][COLS] = {

  {'1','2','3'},

  {'4','5','6'},

  {'7','8','9'},

  {'*','0','#'}

};

byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad

byte colPins[COLS] = {6, 7, 8}; //connect to the column pinouts of the keypad



Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );



void setup(){

 lcd.init();                   // initialiseer het LCD scherm
  lcd.backlight();              // zet de backlight aan

lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  -AFZUIGING-");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("MAAK JE KEUZE");  // schrijf op scherm


  Serial.begin(9600);

  // Ken een pin nummer toe aan de servo motoren
  // De analoge ingangen zijn ook digitale uitgangen.
  // Ze worden hier als digitale uitgangen gebruikt voor de servo motoren.
  servo1.attach( A0);
  servo2.attach( A1);
  servo3.attach( A2);
  servo4.attach( A3);
  servo5.attach( 9);
  servo6.attach( 10);
}

void loop(){

  char key = keypad.getKey();

 

if( key == '1')
{
  Serial.println( "Er is een 1 ingedrukt");
  servo1.write( 0);
  servo2.write( 90);
  servo3.write( 90);
  servo4.write( 90);
  servo5.write( 90);
  servo6.write( 90);

 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 1 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("  AFKORTZAAG");  // schrijf op scherm
 
}

if( key == '2')
{
  Serial.println( "Er is een 2 ingedrukt");
  servo1.write( 90);
  servo2.write( 0);
  servo3.write( 90);
  servo4.write( 90);
  servo5.write( 90);
  servo6.write( 90);

 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 2 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("ZAAGTAFEL DEWALT");  // schrijf op scherm
 }

if( key == '3')
{
  Serial.println( "Er is een 3 ingedrukt");
  servo1.write( 90);
  servo2.write( 90);
  servo3.write( 0);
  servo4.write( 90);
  servo5.write( 90);
  servo6.write( 90);
 
 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 3 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("  FREESTAFEL ");  // schrijf op scherm
 }

if( key == '4')
{
  Serial.println( "Er is een 4 ingedrukt");
  servo1.write( 90);
  servo2.write( 90);
  servo3.write( 90);
  servo4.write( 0);
  servo5.write( 90);
  servo6.write( 90);

 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 4 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("  CNC FREES  ");  // schrijf op scherm
 
}

if( key == '5')
{
  Serial.println( "Er is een 5 ingedrukt");
  servo1.write( 90);
  servo2.write( 90);
  servo3.write( 90);
  servo4.write( 90);
  servo5.write( 0);
  servo6.write( 90);

 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 5 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("SCHUURMACHINE");  // schrijf op scherm

 }

if( key == '6')
{
  Serial.println( "Er is een 6 ingedrukt");
  servo1.write( 90);
  servo2.write( 90);
  servo3.write( 90);
  servo4.write( 90);
  servo5.write( 90);
  servo6.write( 0);

 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 6 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("HANDGEREEDSCHAP");  // schrijf op scherm

}


if( key == '7')
{
  Serial.println( "Er is een 7 ingedrukt");
  servo1.write( 90);
  servo2.write( 90);
  servo3.write( 90);
  servo4.write( 90);
  servo5.write( 90);
  servo6.write( 90);

 lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - ONGELDIGE-");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("    INVOER");  // schrijf op scherm


}



  }

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor Koepel » 02 Jan 2020, 19:38

Het Arduino board heeft zelf een ledje met weerstand op pin 13.
Dit is hoe je dat gebruikt: https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/.

In plaats van de nummers zou ik variabelen willen maken voor de leds.

Dus ergens bij de globale variabelen (dat is boven de setup functie en onder de #include dingen), die variabelen toevoegen. Voor de pin-nummers heb ik zomaar wat gekozen, daar natuurlijk de juiste nummers voor invullen.
Code: Alles selecteren
const int pinLed1 = 26;
const int pinLed2 = 27;
const int pinLed3 = 28;
const int pinLed4 = 29;
const int pinLed5 = 30;
const int pinLed6 = 31;


En ergens in de setup() functie dit toevoegen:
Code: Alles selecteren
// Zet de pinnen voor de blauwe leds als uitgang.
pinMode( pinLed1, OUTPUT);
pinMode( pinLed2, OUTPUT);
pinMode( pinLed3, OUTPUT);
pinMode( pinLed4, OUTPUT);
pinMode( pinLed5, OUTPUT);
pinMode( pinLed6, OUTPUT);


Mocht je precies willen weten waar je dat kunt neerzetten, dat is waar je het zelf het mooiste en gemakkelijkste lijkt.

En dan bij een knop de juiste led 'aan' doen en de rest 'uit' (HIGH is aan, LOW is uit):
Code: Alles selecteren
if( key == '1')
{
  Serial.println( "Er is een 1 ingedrukt");

  // Zet de overeenkomstige blauwe led aan, en de rest uit
  digitalWrite( pinLed1, HIGH);
  digitalWrite( pinLed2, LOW);
  digitalWrite( pinLed3, LOW);
  digitalWrite( pinLed4, LOW);
  digitalWrite( pinLed5, LOW);
  digitalWrite( pinLed6, LOW);
 
  servo1.write( 0);
  servo2.write( 90);
  servo3.write( 90);
  servo4.write( 90);
  servo5.write( 90);
  servo6.write( 90);

  lcd.clear();                  // wis het scherm
  lcd.setCursor(0, 0);   
  lcd.print("  - KEUZE 1 -");
  lcd.setCursor(1, 1);          // zet de cursor op positie 1, regel 1
  lcd.print("  AFKORTZAAG");  // schrijf op scherm
}


Dus een digitalWrite() met "HIGH" zet een uitgang "hoog" en dan staat die pin op 5V. Dat gaat via de weerstand naar de led.
Bij iedere knop dus toevoegen dat de juiste led een HIGH krijgt en de rest een LOW.

Dan krijg je een sketch waar iedere programmeur hoofdschuddend naar kijkt. Dat is namelijk hoe het niet moet. Een programmeertaal is bedoeld om dingen gemakkelijker te maken en onnodige herhalingen in de code te voorkomen. Maar dat het werkt is nu even belangrijker ;)

Berichten: 44
Geregistreerd: 07 Dec 2019, 15:13

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor jabjab » 03 Jan 2020, 21:29

dank voor de input!

ben even een stapje terug. Ik had alles met de servos en het keypad werkend op de uno maar krijg het net niet helemaal werkend op de Mega.

ik krijg 1 servo niet aangestuurd en ik vermoed dat ik een onjuiste pin gebruik. welke pinnen kan ik gebruiken voor de Servo's? Servo 6 werkt niet meer (deze zat op pin 10 op de Uno, ik heb daar A10 van gemaakt maar dat werkte niet en A7 ook niet).


servo1.attach( A0);
servo2.attach( A1);
servo3.attach( A2);
servo4.attach( A3);
servo5.attach( A9);
servo6.attach( A7);
servo7.attach( A8);

Waar zit mijn fout???

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Voorstellen en vraag m.b.t. Servos en keypad

Berichtdoor Koepel » 03 Jan 2020, 22:05

Kijk op je shield op welke nummers het zit aangesloten, en gebruik die nummers in je sketch.

Dus een A0 wordt ook A0 in de sketch.
Bij de digitale pinnen kun je de 'D' weglaten. Bijvoorbeeld een D8 wordt een 8 in de sketch.
Arduino kent geen 'D8'. De extra 'D' wordt soms gebruikt om nog eens duidelijk aan te geven dat het om een digitale pin gaat.

Pin 10 bij de Arduino Uno zit op dezelfde plaats als pin 10 bij een Arduino Mega 2560. Op je shield heet dat "D10".
De analoge ingang A10 is een andere pin.

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten