Gå til innhold

Den lille Arduino-tråden


Anbefalte innlegg

Er det noen her som har prøvd Teensy?

Den har en enormt mye kraftigere microkontroller (32 bit ARM Cortex-M4 72 MHz) og mer både minne (256K Flash Memory, 64K RAM, 2K EEPROM) og IO'er både analoge og digitale (21 analoge innganger, 34 digitale IO og 12 PWM utganger) og den kan vist programeres via arduino IDE'en

Lenke til kommentar
Videoannonse
Annonse

Microkontrollere er helt nytt for meg, ser ut til at Arduino er et greit sted å begynne.

 

Hvilke startsett av disse: http://www.ebay.com/sch/i.html?_odkw=kondensator+100+uF&LH_FS=1&_osacat=0&_from=R40&_trksid=p2045573.m570.l1313.TR12.TRC2.A0.Xarduino+kit&_nkw=arduino+kit&_sacat=0

 

får jeg mest for pengene?

 

Ellers er det verdt å nevne at jeg har kjøpt følgende:

 

UNO R3 ATmega 328P16U2 2012 version bord

50 x Resistors 10K Ohms

Breadboard og kabler til det.

1%1/4W Metal film resistor kit

Multimeter

En rekke dioder

 

Hva burde jeg ha? vil få kjøpt alt jeg trenger til å komme veldig godt i gang og slipper å bestille på lang tid (leveringstid er så lang).

 

 

Du får ikke mye moro uten noen sensorer og noen ut enheter.

 

Selv synes jeg sparkfun inventors kit er en fin start, du finner sikkert billigere kits som er prikk like på ebay.

Lenke til kommentar

Er såpass lenge siden jeg har holdt på med noe programmering, så lurte på noen har et lite sekund til å se over koden og se de har et forslag til å skrive den litt vakrere. Tenkte på løkkedelen.

 

 

const int pwPin = 7;
long pulse, inches, cm;
int led40 = 8;
int led30 = 9:
int led20 = 10;

void setup()
{
  Serial.begin(9600); //sets up rs232
  pinMode(led40, OUTPUT); // sets port 8-10 as output
  pinMode(led30, OUTPUT);
  pinMode(led20, OUTPUT);
  pinMode(pwPin, INPUT);
}
void loop()
{
  pulse = pulseIn(pwPin, HIGH);
  //147µs pr inch
  inches = pulse/147;
  cm = inches*2,54;
  /*Serial.print(cm); // sends the range to the computer
  Serial.print("cm");
  Serial.println();
  */
  if(cm <= 40) //Turns on led 8 if object is nearer then 40 cm
  {
    digitalWrite(led40, HIGH);
  }
  else
  {
    digitalWrite(led40, LOW);
  }
  if(cm <= 30) //Turns on led 9 if object is nearer then 30 cm
  {
    digitalWrite(led30, HIGH);
  }
  else
  {
    digitalWrite(led30, LOW);
  }
  if(cm <= 20) //Turns on led 10 if object is nearer then 20 cm
  {
    digitalWrite(led20, HIGH);
  }
  else
  {
    digitalWrite(led20, LOW);
  }
  delay(500);
}
 
[/spoiler]
Endret av Runarbs
Lenke til kommentar

 

Er såpass lenge siden jeg har holdt på med noe programmering, så lurte på noen har et lite sekund til å se over koden og se de har et forslag til å skrive den litt vakrere. Tenkte på løkkedelen.

 

 

const int pwPin = 7;
long pulse, inches, cm;
int led40 = 8;
int led30 = 9:
int led20 = 10;

void setup()
{
  Serial.begin(9600); //sets up rs232
  pinMode(led40, OUTPUT); // sets port 8-10 as output
  pinMode(led30, OUTPUT);
  pinMode(led20, OUTPUT);
  pinMode(pwPin, INPUT);
}
void loop()
{
  pulse = pulseIn(pwPin, HIGH);
  //147µs pr inch
  inches = pulse/147;
  cm = inches*2,54;
  /*Serial.print(cm); // sends the range to the computer
  Serial.print("cm");
  Serial.println();
  */
  if(cm <= 40) //Turns on led 8 if object is nearer then 40 cm
  {
    digitalWrite(led40, HIGH);
  }
  else
  {
    digitalWrite(led40, LOW);
  }
  if(cm <= 30) //Turns on led 9 if object is nearer then 30 cm
  {
    digitalWrite(led30, HIGH);
  }
  else
  {
    digitalWrite(led30, LOW);
  }
  if(cm <= 20) //Turns on led 10 if object is nearer then 20 cm
  {
    digitalWrite(led20, HIGH);
  }
  else
  {
    digitalWrite(led20, LOW);
  }
  delay(500);
}
 
[/spoiler]

 

Nå tar jeg dette rett ifra hodet uten mulighet for å teste men du kan vel lese av verdien, og så bruker du map() funksjonen for å gjøre om max og min til en verdi mellom 0 og 8 før du enkelt og greit setter verdien du fikk fra map funksjonen til rett led.

Lenke til kommentar

Om du kan tillate at LEDene "blinker" (dette vil du ikke kunne se, det går alt for fort)

digitalWrite(led20, LOW);
digitalWrite(led30, LOW);
digitalWrite(led40, LOW);
if(cm <= 20) { digitalWrite(led20, HIGH); }
if(cm <= 30) { digitalWrite(led30, HIGH); }
if(cm <= 40) { digitalWrite(led40, HIGH); }

Koden blir litt mer kompakt, og kanskje litt mer lesbar.

Også litt usikker på om din multiplisering med 2,54 fungerer som tenkt da du ganger en float med long. Kommer vell ann på hva compileren gjør for deg. Kan hende du må gjøre en cast til float (av cm), og så tilbake til long. Eventuelt skrive om slik at du bare bruker helt tall (koden vil da bli kortere når den er kompilert og kjøre raskere da float er tregt på en AVR). Eks. multipliser med 254 i stede, og sjekk om cm er mindre enn 2000, 3000, og 4000. Du kunne delt cm på 100, men trur også deling er tregt. Ikke at dette nødvendigvis har noe betydning for din applikasjon, men det kan være vært å tenke på innimellom.

Lenke til kommentar

Om du kan tillate at LEDene "blinker" (dette vil du ikke kunne se, det går alt for fort)

digitalWrite(led20, LOW);
digitalWrite(led30, LOW);
digitalWrite(led40, LOW);
if(cm <= 20) { digitalWrite(led20, HIGH); }
if(cm <= 30) { digitalWrite(led30, HIGH); }
if(cm <= 40) { digitalWrite(led40, HIGH); }

Koden blir litt mer kompakt, og kanskje litt mer lesbar.

Også litt usikker på om din multiplisering med 2,54 fungerer som tenkt da du ganger en float med long. Kommer vell ann på hva compileren gjør for deg. Kan hende du må gjøre en cast til float (av cm), og så tilbake til long. Eventuelt skrive om slik at du bare bruker helt tall (koden vil da bli kortere når den er kompilert og kjøre raskere da float er tregt på en AVR). Eks. multipliser med 254 i stede, og sjekk om cm er mindre enn 2000, 3000, og 4000. Du kunne delt cm på 100, men trur også deling er tregt. Ikke at dette nødvendigvis har noe betydning for din applikasjon, men det kan være vært å tenke på innimellom.

om jeg husker dette rett så er en long og float basically den samme variablen i arduino så tror man skal kunne gjøre aritmetiske operasjoner på disse uten å caste de

Lenke til kommentar

Har kjøpt meg et inventors kit fra sparkfun, gleder meg til å jeg har det i hendene.

Er det noen som vet ca hva leveringstiden på sparkfun er dersom man velger gratis frakt?

 

er det forresten noen her som tilfeldigvis selger arduino uno + temp sensor? Gi meg gjerne en PM.

 

Eventuelt noen som kjenner til en leverandør i norge med meget kort leveringstid og greie priser?

Endret av 13375k1133z.
Lenke til kommentar

Takker for tipset Runarbs, ser at Robonor har gode priser på noen komponenter og svært høy pris på andre. F.eks temperatur sensoren. 129.- for en digital temp sensor? kan kjøpe 10 stk av akuratt samme typen på nettbutikker i utlandet. (har gjort det, ulempen er den tidvis lange leveringstiden)

 

Uansett: har laget en facebook gruppe (Arduino kjøp/salg) så det er bare å joine dersom du ønsker å selge eller kjøpe komponenter.

Endret av 13375k1133z.
Lenke til kommentar

om jeg husker dette rett så er en long og float basically den samme variablen i arduino så tror man skal kunne gjøre aritmetiske operasjoner på disse uten å caste de

En long er jo bare en stor int. Så ville da tro casting må til. Men usikker på om man får kompileringsfeil eller bare rare resultater.

Lenke til kommentar

Har akuratt laget min første temperatur sensor/viser, temperaturen vises 1 gang per min i serial monitor.

Jeg ønsker å "utvide" programmet slik at temperaturen blir vist i en graf, hvordan kan dette gjøres? Har leitet en del uten å finne noe jeg kan bruke.

Lenke til kommentar

 

om jeg husker dette rett så er en long og float basically den samme variablen i arduino så tror man skal kunne gjøre aritmetiske operasjoner på disse uten å caste de

En long er jo bare en stor int. Så ville da tro casting må til. Men usikker på om man får kompileringsfeil eller bare rare resultater.

 

Beklager, husket feil er float og double som er størelse i arduino

Lenke til kommentar
  • 2 uker senere...

Prøver å få til SPI-kommunikasjon mellom Raspberry pi og Arduino Nano. Har prøvd å følge denne guiden:

http://mitchtech.net/raspberry-pi-arduino-spi/

 

Omtrent 9 av 10 ganger jeg prøver å kjøre fila fra Raspberry Pi, skjer det ingenting. 1 av 10 ganger blinker det grønt på TX på Arduinoen, og jeg får opp noen random tegn i Seriel monitoren. Både Seriell monitor og Serial.begin i koden står på 115200 (har prøvd 9600 også, uten hell).

 

Noen tips til hva dette kan komme av?

Lenke til kommentar

Fikk tak i et logikk-analyse verktøy. Bilde en og Bilde 5 viser hvordan det typisk ser ut de få gangene arduinoen klarer å motta signal. De øvrige bildene viser hvordan det typisk ser ut når det ikke kommer noe tekst til seriell-monitoren.

 

Jeg har et par ganger klart å skrive ut ordet "World" men ikke "Hello". Vanligvis viser den bare masse søppel, slik som dette:

 

 

 

<]=I1SÈÓÔ“ÈÓÔ“ÈÓÔ“11<]=I111<]=I111<]=I1ÈÓÔ“11<]=I1‰‰ä
éêIˆ

 

 

 

post-79688-0-93930700-1390919089_thumb.png

post-79688-0-05237600-1390919095_thumb.png

post-79688-0-56709600-1390919104_thumb.png

post-79688-0-83907700-1390919109_thumb.png

post-79688-0-82456900-1390919115_thumb.png

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...