Hur använda Arduino UNO för att sampla och lägga i databas?

Planering och tankar kring eventuella framtida projekt.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för lösning?

Inlägg av Spisblinkaren »

Nu har jag fanimej lyckats programmera Arduino UNO till att blinka enligt bifogad video :D

När jag först pluggade in UNO'n till datorn så blinkade samma lysdiod typ 1 gång per sekund men då var tiden för "på" respektive "av" lika stor (vilket bara var en indikation på att den så kallade bootloadern fanns).

Bara för att se om jag hade nån kontroll ändrade jag förhållandet mellan på och av till 1:10 vilket är det ni ser.

Jag har sällan blivit så glad över så lite! Men detta betyder att jag har kontakt med grejerna vilket inte var helt trivialt.

Mycket mer avancerad programmering väntar med spänning!



MVH/Roger_
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för lösning?

Inlägg av Spisblinkaren »

Min plan nu är att gå Arduino-skolan för att sedan koppla upp ett RC-servo till en PWM-utgång.

Iom att den preliminära upplösningen hos wait-funktionen är så lång som 1ms och servot kräver mindre än 1ms positiv puls för ena läget och 2ms positiv puls för andra läget (T~20ms) så kommer jag bara kunna styra servot till ytterlägerna med befintlig wait-rutin.

Jag måste alltså skapa en wait-rutin som har upplösning i us-området för att steglöst kunna styra servot från ena ytterlighetsläget till det andra. Men detta är ett sekundärt problem.

Min nästa utmaning och bygge är alltså:

1) Klura ut hur PWM-rutinen fungerar
2) Enabla rätt utgångs-pinne
3) Koppla in en brytare till en av "Interrupt-on-change"-ingångarna.
4) Börja med polling av denna pinne
5) Generera 1ms för ena läget av brytaren, 2ms för den andra
6) Vippa fram och tillbaks på brytaren och filma fenomenet :D

MVH/Roger
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för lösning?

Inlägg av Spisblinkaren »

Nu börjar det likna nåt :)

Häromdagen lyckades jag styra mitt servo som jag ville dvs till praktiskt taget ändlägena.

Detta pga en function jag tipsades om på Arduinos forum. Denna funtion heter delayMicroseconds().

Jag trycte således in 500us respektive 2500us och hela servots maximala 150 graders utslag genererades.

Bifogad video visar dock bara utslaget för 1ms respektive 2ms dvs typ 90 grader.

Nästa steg involverar kontinuerlig styrning av servot dvs A/D-omvandling som blir bra att kunna inför skarpt läge på lite längre sikt.

Se och beundra :)



MVH/Roger
nifelheim
Den första
Inlägg: 2488
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av nifelheim »

grattis :tumupp:
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av Krille Krokodil »

Se där, du flyger ju fram nu. :)

Kan man grunderna i C så går det sedan att att göra mycket avancerade
saker lätt genom att använda bibliotek eller sno någon annans färdiga kod
och modifiera den.

Finns färdiga bibliotek till Arduino för att skriva ut data till en fil på ett SD-kort
med FAT filsystem, så det kommer du enkelt kunna göra om du gnuggar in lite C
till.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av Magnus_K »

Snyggt rogerk8! :tumupp:
Avundas dina strukturella metoder för inlärning.

Tänkte bara fråga; är det fortfarande aktuellt att använda R-Pi för detta projekt? Annars kanske det vore lämpligt att byta trådnamn till ...Arduino... istället?
(Är av mest egoistiska skäl då jag är mer intresserad av Arduino än R-Pi och titeln gör att jag missar tråden ibland)
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av Spisblinkaren »

nifelheim skrev:grattis :tumupp:
Tack :)
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av Spisblinkaren »

Krille Krokodil skrev:Se där, du flyger ju fram nu. :)

Kan man grunderna i C så går det sedan att att göra mycket avancerade
saker lätt genom att använda bibliotek eller sno någon annans färdiga kod
och modifiera den.
Tack :)

Mina C-kunskaper är som du förstår mycket dåliga men jag lär mig väl vartefter.

Än så länge är det jag gjort inte speciellt märkvärdigt. Typ bara ändrat lite i den medföljande blink-rutinen.
Finns färdiga bibliotek till Arduino för att skriva ut data till en fil på ett SD-kort
med FAT filsystem, så det kommer du enkelt kunna göra om du gnuggar in lite C
till.
Tack för det tipset! Skall komma ihåg det när det blir allvarligt svårt ;)

MVH/Roger
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av Spisblinkaren »

Magnus_K skrev:Snyggt rogerk8! :tumupp:
Avundas dina strukturella metoder för inlärning.

Tänkte bara fråga; är det fortfarande aktuellt att använda R-Pi för detta projekt? Annars kanske det vore lämpligt att byta trådnamn till ...Arduino... istället?
(Är av mest egoistiska skäl då jag är mer intresserad av Arduino än R-Pi och titeln gör att jag missar tråden ibland)
Tack :)

Rubriken får gärna ändras till samma men "Arduino UNO" istället för "Raspberry Pi".

MVH/Roger
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Raspberry Pi för att sampla och lägga i data

Inlägg av Spisblinkaren »

Okej, nu har jag byggt en testrigg som simulerar alla mina signaler.

Till att börja med ska jag dock bara använda poten "Givare" och försöka styra servot linjärt.

Detta kräver alltså variabel-användning och A/D-omvandling.

Mha av den fantastiska Arduino-skolan ni så tacksamt tipsat mig om känner jag dock att detta inte kommer innebära några problem.

Bifogar lite bilder.

MVH/Roger
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Arduino UNO för att sampla och lägga i datab

Inlägg av Spisblinkaren »

Nu har jag lyckats få servot att steglöst ändra position mha en potentiometer.

Tydligen motsvarar en liten pulsbredd (~500us) fullt CW, och en stor pulsbredd (~2500us) fullt CCW.

Jag noterar också att det är ett litet dödband vid båda ändlägena så pulserna bör justeras något för optimal prestanda.

Nu är det dock som så att detta bara är ett lekfullt test. Även om A/D-omvandlig är nåt jag kommer behöva göra vid skarpt läge.

Jag är mycket glad över denna framgång. Var egentligen tom enklare än mha brytare :)

Det enda jag missade var att deklarera variabeln.

MVH/Roger

Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Arduino UNO för att sampla och lägga i datab

Inlägg av Spisblinkaren »

Nu har jag lyckats programmera för polling av alla mina fyra reglage.

Tack vare min testrigg och lite hjälp från jobbet så fick jag till slut det att fungera.

Största problemet var att fatta att upprepade samplingar inte kan ge exakt samma resultat så man måste ta hänsyn till det i koden. Det var dock inte jag som kom på det utan en kär kollega (RBM).

Bifogar programmet.

MVH/Roger_
PS
Det var lite tråkigt att man inte kunde använda sig av abstraktionsnivån att man bara definierade funktioner och sedan använde dom utan att de var färdigbyggda. Det blev alltså nödvändigt att tillfäligtvis få funktionerna att göra nåt för att de sedan skulle kunna skrivas in i huvudprogrammet. Koden blev således lite extra grötig pga detta :)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hummel
Inlägg: 2543
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur använda Arduino UNO för att sampla och lägga i datab

Inlägg av hummel »

Ett C-program skrivet i Excel.:-)
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Hur använda Arduino UNO för att sampla och lägga i datab

Inlägg av Spisblinkaren »

Nja, det var mest för att jag ville visa programmet då det inte gick att kopiera koden och klistra in den i paint så jag fick gå via excel.

Men det fattade du nog :)

MVH/Roger
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur använda Arduino UNO för att sampla och lägga i datab

Inlägg av sodjan »

Jösses vilken omväg... :-)
Varför inte bara (kopierat från din Excel-fil):

Kod: Markera allt

/*
Poll
 */
 
//int servo=13;
//int PotValue;

// the setup routine runs once when you press reset:
void setup() {                
// initialize the digital pin as an output.
  pinMode(13, OUTPUT); 
// initialize the digital pin as an input.
// Pin 2&3 are connected to a button tied to GND with pullup 10K to VCC.
  pinMode(2, INPUT);  
  pinMode(3, INPUT);
}

int Convert_A(int Analog) {
  return 500 + 2 * Analog;
}

int Convert_D(int Digital) {
  return 500 + 2048 * Digital;
}

void runServo(int width) {
  digitalWrite(13, HIGH);
  delayMicroseconds(width);
  digitalWrite(13, LOW);
  delay(20);
}

// sensor value is converted and somehow stored to SD
int storeSensor(int AD){
  if (AD=512) return 500; // dummy
}
// holdTime value is converted and affects updating speed
int holdTime(int AD){
  if (AD=100) return 50; // dummy
}
// newUser enables new data sequence input
void newUser(){          
  int a,b;               // dummy
  a=10;
  b=a;
}
// Cal calibrates sensor to actual reference force (1kg)
void Cal(){              
  int a,b;               // dummy
  a=10;
  b=a;
}


int reg1_stat;
int reg1_dyn;
int reg2_stat;
int reg2_dyn;
int reg3_stat;
int reg3_dyn;
int reg4_stat;
int reg4_dyn;

void loop () {
  reg1_stat=analogRead(0);
  reg2_stat=analogRead(1);
  reg3_stat=digitalRead(2);
  reg4_stat=digitalRead(3);
// delays 40ms to await any knob changes.  
  delay(40); 
// abs neccesary due to sampling accuracy.  
  reg1_dyn=analogRead(0);
  if (abs(reg1_dyn-reg1_stat)>10){   
    runServo(Convert_A(reg1_dyn)); // used for debugging
    storeSensor(reg1_dyn);
  }    
  reg2_dyn=analogRead(1);
  if (abs(reg2_dyn-reg2_stat)>10){
    runServo(Convert_A(reg2_dyn)); // used for debugging
    holdTime(reg2_dyn);  
  }
  reg3_dyn=digitalRead(2);
  if (reg3_dyn != reg3_stat){
    runServo(Convert_D(reg3_dyn)); // used for debugging
    newUser();
  }
  reg4_dyn=digitalRead(3);
  if (reg4_dyn != reg4_stat){
    runServo(Convert_D(reg4_dyn)); // used for debugging
    Cal(); 
  } 
    
    
}
Skriv svar