mijn eerste echte project

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: mijn eerste echte project

Berichtdoor nicoverduin » 31 Okt 2013, 16:08

Als je de voeding apart houdt van de amp, dan eleveert die mee. Dus niet de GND van de amp aan de GND van de Arduino hangen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Berichten: 108
Geregistreerd: 07 Aug 2013, 21:34

Re: mijn eerste echte project

Berichtdoor KrisG » 05 Nov 2013, 13:00

Gisteren nog wat verder geprogrammeerd zonder MP3s. Maar ik begin er stilaan achter te komen dat het hele MP3 verhaal veel te veel processortijd opslorpt om nog veel andere dingen te doen.
Zo is er sowieso een delay nodig om de servo traag te laten gaan en die tijd is te lang voor de MP3.

Een optie is om de Uno die ik nog heb liggen alles wat MP3's betreft te laten afhandelen, en de Mega voor de rest te gebruiken. Beiden kunnen dan op één of andere manier communiceren zodat de Uno weet welke MP3 hij wanneer moet afspelen.

Maar het inlezen van de reedcontacten en bijhorende verschillende acties werken ook al, al moet ik de 'acties' nog verder programmeren.

Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.

Berichten: 108
Geregistreerd: 07 Aug 2013, 21:34

Re: mijn eerste echte project

Berichtdoor KrisG » 07 Nov 2013, 08:35

De kogel is door de kerk, de MP3's zullen worden afgehandeld door de UNO, verbonden met de Mega die de rest doet via I2C. De MEGA wordt master.

De code voor de mega gisteren nog wat bijgewerkt tot een werkbaar resultaat, het MP3/IIC gedeelte moet er nog bij.

Code: Alles selecteren
//libraries
#include <LiquidCrystal.h> //LCD library
#include <Wire.h>          //I2C Library
#include <Servo.h>         //Servo library

//shortnames
Servo deurservo;                         //noem servo deurservo
LiquidCrystal lcd (8,9,4,5,6,7);         //noem lcddisplay lcd

//variables
int deurpositie;     //positie van de deur voor de servo
int ogen=11;         //leds voor ogen op pin 11
int ogen_dim=30;     //dimwaarde voor ogen
int groen=23;        //reedcontacten voor verschillende kleuren teams
int geel=25;
int rood=27;
int blauw=29;
boolean status_groen;    //statusvariabelen voor kleuren
boolean status_geel;
boolean status_rood;
boolean status_blauw;
int status_all;
int kleur;               //resultaat kleurentest

boolean eindeloopdeuropen=31;     //eindeloopcontact deur open
boolean eindeloopdeurtoe=33;      //eindeloopcontact deur dicht
int deuropen;            //eindstand servo deur open
int deurtoe;             //eindstand servo deur toe


 

//setup
void setup()
{
//Setup lcd
  lcd.begin(16,2);
  lcd.setCursor(0,0);

//Setup Servo en eindeloopcontacten
  deurservo.attach(37);                //deurservo op pin 37
  pinMode(eindeloopdeuropen, INPUT);   //eindeloopschakelaar bij deur open
  pinMode(eindeloopdeurtoe, INPUT);    //eindeloopschakelaar bij deur toe
  digitalWrite(eindeloopdeuropen, HIGH);//activeren pullup
  digitalWrite(eindeloopdeurtoe, HIGH); //activeren pullup
  deurtoe=leerfunctie_toe(90);          //leer stand toe
  deuropen=leerfunctie_open(deurtoe);   //leer stand open
  deur_sluiten(50);
  lcd.clear();
  lcd.setCursor(2,0);
  lcd.print(deuropen);
  lcd.setCursor(2,1);
  lcd.print(deurtoe);
 
//Setup leds en test
  pinMode (ogen,OUTPUT);
  ogen_flits(10,10);
 
//Setup reedcontact inputs
  pinMode (geel, INPUT);         //setup pins als inputs
  pinMode (groen, INPUT);
  pinMode (rood, INPUT);
  pinMode (blauw, INPUT);
  digitalWrite(geel, HIGH);      //activeren pull-up weerstanden
  digitalWrite(groen, HIGH);     // daardoor worden de pinnen actief laag
  digitalWrite(rood, HIGH);      // de reed contacten moeten dus de pin
  digitalWrite(blauw, HIGH);     // naar massa trekken

}

//loop
void loop()
{
  lcd.clear();
do
{
  status_groen=digitalRead(groen);
  status_geel=digitalRead(geel);
  status_rood=digitalRead(rood);
  status_blauw=digitalRead(blauw);
  status_all=(status_groen&status_geel&status_rood&status_blauw);
  lcd.clear();
  lcd.print("gr ge ro bl all");
  lcd.setCursor(1,1);
  lcd.print(status_groen);
  lcd.setCursor(4,2);
  lcd.print(status_geel);
  lcd.setCursor(7,2);
  lcd.print(status_rood);
  lcd.setCursor(10,2);
  lcd.print(status_blauw);
  lcd.setCursor(13,2);
  lcd.print(status_all);
  delay(200); 
} while (status_all == HIGH);
ogen_flits(1,20);
lcd.clear();
if (status_groen == LOW)
 {
  kleur=1;
  lcd.print("groen");
 }

if (status_geel == LOW)
 {
  kleur=2;
  lcd.print("geel");
 }

if (status_rood == LOW)
 {
  kleur=3;
  lcd.print("rood");
 }

if (status_blauw == LOW)
 {
  kleur=4;
  lcd.print("blauw");
 }

switch (kleur)
{
  case 1:
    lcd.clear();
    deur_openen(5);
    ogen_flits(30,10);
    lcd.print("Welkom");
    delay(500);
    lcd.setCursor(0,2);
    lcd.print("groene team !");
    delay(500);
    lcd.clear();
    lcd.print("Let goed op.....");
    lcd.setCursor(1,2);
    delay(1500);
    lcd.print("....en noteer.");
    delay(2000);
    lcd.clear();
    lcd.print("Het graf dat U..");
    lcd.setCursor(0,2);
    delay(1500);
    lcd.print(".zoekt, draagt..");
    delay(2000);
    lcd.clear();
    lcd.print("..volgende naam:");
    lcd.setCursor(0,2);
    delay(2500);
    lcd.print("Charlewieke");
    delay(5000);
    deur_sluiten(5);
    break;
  case 2: 
    lcd.clear();
    deur_openen(5);
    ogen_flits(30,10);
    lcd.print("Welkom");
    delay(200);
    lcd.setCursor(0,2);
    lcd.print("gele team !");
    delay(500);
    lcd.clear();
    lcd.print("Let goed op.....");
    lcd.setCursor(1,2);
    delay(1500);
    lcd.print("....en noteer.");
    delay(2000);
    lcd.clear();
    lcd.print("Het graf dat U..");
    lcd.setCursor(0,2);
    delay(1500);
    lcd.print(".zoekt, draagt..");
    delay(2000);
    lcd.clear();
    lcd.print("..volgende naam:");
    lcd.setCursor(0,2);
    delay(2500);
    lcd.print("Mariette");
    delay(5000);
    deur_sluiten(5);
    break;
  case 3:
    lcd.clear();
    deur_openen(5);
    ogen_flits(30,10);
    lcd.print("Welkom");
    delay(200);
    lcd.setCursor(0,2);
    lcd.print("rode team !");
    delay(500);
    lcd.clear();
    lcd.print("Let goed op.....");
    lcd.setCursor(1,2);
    delay(1500);
    lcd.print("....en noteer.");
    delay(2000);
    lcd.clear();
    lcd.print("Het graf dat U..");
    lcd.setCursor(0,2);
    delay(1500);
    lcd.print(".zoekt, draagt..");
    delay(2000);
    lcd.clear();
    lcd.print("..volgende naam:");
    lcd.setCursor(0,2);
    delay(2500);
    lcd.print("Jefke van Lowie");
    delay(5000);
    deur_sluiten(5);
    break;
  case 4:
    lcd.clear();
    deur_openen(5);
    ogen_flits(30,10);
    lcd.print("Welkom");
    delay(200);
    lcd.setCursor(0,2);
    lcd.print("blauwe team !");
    delay(500);
    lcd.clear();
    lcd.print("Let goed op.....");
    lcd.setCursor(1,2);
    delay(1500);
    lcd.print("....en noteer.");
    delay(2000);
    lcd.clear();
    lcd.print("Het graf dat U..");
    lcd.setCursor(0,2);
    delay(1500);
    lcd.print(".zoekt, draagt..");
    delay(2000);
    lcd.clear();
    lcd.print("..volgende naam:");
    lcd.setCursor(0,2);
    delay(2500);
    lcd.print("Johanneke");
    delay(5000);
    deur_sluiten(5);
    break;
}




}



//********************
//*    functies      *
//********************

//-----------------------------------
//leerfunctie deurservo open
//-----------------------------------
int leerfunctie_open(int deurpositie)
{
  int test_open;
  lcd.clear();
  do
  {
   deurservo.write (deurpositie);
   deurpositie -=1;
   test_open=digitalRead(eindeloopdeuropen);
   lcd.setCursor(2,0);
   lcd.print(test_open);
   lcd.setCursor(9,1);
   lcd.print(deurpositie);
   delay(200);
  }while (test_open!=LOW&&deurpositie>0);
  return deurpositie;
}
//-----------------------------------
//leerfunctie deurservo toe
//-----------------------------------
int leerfunctie_toe(int deurpositie)
{
  int test_toe;
  lcd.clear();
  do
  {
   deurservo.write (deurpositie);
   deurpositie +=1;
   test_toe=digitalRead(eindeloopdeurtoe);
   lcd.setCursor(2,0);
   lcd.print(test_toe);
   lcd.setCursor(9,1);
   lcd.print(deurpositie);
   delay(200);
  }while (test_toe!=LOW&&deurpositie<180);
  return deurpositie;
}


//-----------------------------------
//ogenflits functie
//-----------------------------------
void ogen_flits(int delay1,int delay2)
{
  for (int ogen_dim=0;ogen_dim<150;ogen_dim++)
    {
      analogWrite(ogen,ogen_dim);
      delay(delay1);
    }
  for (int ogen_dim=150;ogen_dim>=0;ogen_dim--)
    {
      analogWrite(ogen,ogen_dim);
      delay(delay2);
    } 
return;

}

//-----------------------------------
//deur openen functie
//-----------------------------------
void deur_openen(int tijd)
 {
   for (int deurpositie = deurservo.read(); deurpositie>=deuropen; deurpositie--)
   {
     deurservo.write (deurpositie);
     delay(tijd);
   } 
 
 }

//-----------------------------------
//deur sluiten functie
//-----------------------------------
void deur_sluiten(int tijd)
 {
   for (int deurpositie = deurservo.read(); deurpositie<=deurtoe; deurpositie++)
   {
     deurservo.write (deurpositie);
     delay(tijd);
   } 
 
 }


De timing moet nog nagekeken en ik ben niet 100% zeker dat de richtingen van de deur wel kloppen.

Ik vermoed dat het allemaal schoner en efficiënter kan, maar daar heb ik nu niet de tijd voor om het uit te pluizen.

Er staat ook nog heel wat LCD traffiek te veel in, maar dat is voor controledoeleinden terwijl ik eraan bezig ben, dat gaat er in de definitieve versie allemaal uit.



Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.

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

Re: mijn eerste echte project

Berichtdoor shooter » 08 Nov 2013, 23:47

ik zag allemaal delays in het programma, deze zijn funest voor de loop.
een betere is om dat te doen met if (millis() - starttime1 > runtime1) {// timer1 is elapsed}
make a new timer for every timer running simultane.
paul deelen
shooter@home.nl

Berichten: 108
Geregistreerd: 07 Aug 2013, 21:34

Re: mijn eerste echte project

Berichtdoor KrisG » 09 Nov 2013, 00:11

Die moet je eens uitleggen want ik ben niet mee.
kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.

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

Re: mijn eerste echte project

Berichtdoor nicoverduin » 09 Nov 2013, 09:15

KrisG schreef:Die moet je eens uitleggen want ik ben niet mee.
kris
Ik ben het helemaal met je eens :) Er zitten alleen maar volgtijdelijke stappen in. Iemand drukt op een knopje.... deurtje open.... krijgt boodschap op lcd te zien..... deurtje dicht.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 108
Geregistreerd: 07 Aug 2013, 21:34

Re: mijn eerste echte project

Berichtdoor KrisG » 09 Nov 2013, 10:35

Het is inderdaad geen rocket-science en dat was ook niet de bedoeling en dat zal het nooit worden :)
De grootste uitdaging zit in het mechanische bij dit project. Het arduino deel is een uitdaging omdat het nieuw is voor mij :)

Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.

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

Re: mijn eerste echte project

Berichtdoor nicoverduin » 09 Nov 2013, 10:51

Voor de toekomst zou je bijvoorbeeld dat hele LCD stuk in een routine kunnen gooien en alleen de "kleur" en "grafnaam" als parameter kunnen meegeven. Scheelt weer een zooi overbodige code.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 108
Geregistreerd: 07 Aug 2013, 21:34

Re: mijn eerste echte project

Berichtdoor KrisG » 09 Nov 2013, 14:57

Hetzelfde kan voor de testen van de reedcontacten. Maar dat zal er alleen van komen als ik tijd over heb :)

Er is nog zoveel te doen voor het einde van de maand.

Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.

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

Re: mijn eerste echte project

Berichtdoor nicoverduin » 09 Nov 2013, 16:18

lijkt wel een echt project :mrgreen: :mrgreen: :mrgreen: komen ook altijd tijd tekort :mrgreen: Maar voorlopig draait ie :mrgreen:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten