Gå til innhold

Den lille Arduino-tråden


Anbefalte innlegg

Det er ledig på både pls og arduino :)

OK. Da kan du jo bare koble sammen serieporten fra Arduino med serieporten på PLS'en. Du har jo allerede verdiene fra temperatur-sensorene i serial monitor på Arduino.

Programmet på PLS'en som leser serieporten og henter ut verdiene må du lage selv. :)

  • Liker 1
Lenke til kommentar
Videoannonse
Annonse

 

Det er ledig på både pls og arduino :)

OK. Da kan du jo bare koble sammen serieporten fra Arduino med serieporten på PLS'en. Du har jo allerede verdiene fra temperatur-sensorene i serial monitor på Arduino.

Programmet på PLS'en som leser serieporten og henter ut verdiene må du lage selv. :)

 

Tusen takk for alle gode svar!

Ser ut til at jeg har gjort en major fail. Trodde det var to ledige ethernet og serial porter. Det var det ikke. Så eneste måten jeg får lest temperaturen er ved å benytte meg av de analoge inngangene på PLSen.

 

Så da er spørsmålet mitt, er det mulig å bruke arduino som en dac?

Altså at arduino konverterer signalet til analogt som PLSen kan lese av? (enten 0-5v eller 4-20 mA)

Lenke til kommentar

Hei!

Jeg sliter litt med en oppgave:

I denne oppgave skal vi bruke et arduino-kort til å måle tida en kule tar for å falle. Ut fra dette skal vi beregne tyngdens akselerasjon, og formidle dette til brukeren

Planlegg programmet; enten med flytskjema, pseudokode eller ren tekst.

 

Hovedidé:

Kula henger i et stativ som er jordet. Så lenge kula henger i stativet måler vi 0V (dvs 0). Når kula forlater stativet måler vi 5V (dvs 1).

Når kula treffer underlaget måler vi 0V igjen.

Vi måler tida fallet tar, vi måler høyden, og kan beregne g.

 

Lag programmet i arduino.

 

Noen som kunne hjulpet meg med å sette om en kode?

Lenke til kommentar

 

Hei!

Jeg sliter litt med en oppgave:

I denne oppgave skal vi bruke et arduino-kort til å måle tida en kule tar for å falle. Ut fra dette skal vi beregne tyngdens akselerasjon, og formidle dette til brukeren

Planlegg programmet; enten med flytskjema, pseudokode eller ren tekst.

 

Hovedidé:

Kula henger i et stativ som er jordet. Så lenge kula henger i stativet måler vi 0V (dvs 0). Når kula forlater stativet måler vi 5V (dvs 1).

Når kula treffer underlaget måler vi 0V igjen.

Vi måler tida fallet tar, vi måler høyden, og kan beregne g.

 

Lag programmet i arduino.

 

Noen som kunne hjulpet meg med å sette om en kode?

 

Jeg ville gått for en kode som sjekker om input er high eller low. Koden starter så tidtakingen når inputet er high og stopper den igjen når input er low.

Lenke til kommentar

 

Ser ut til at jeg har gjort en major fail. Trodde det var to ledige ethernet og serial porter. Det var det ikke. Så eneste måten jeg får lest temperaturen er ved å benytte meg av de analoge inngangene på PLSen.

 

 

Så da er spørsmålet mitt, er det mulig å bruke arduino som en dac?

Altså at arduino konverterer signalet til analogt som PLSen kan lese av? (enten 0-5v eller 4-20 mA)

 

Det et er mulig å bruke Arduino som en DAC. Om den har innebygd DAC eller om du må til med eksterne komponenter avhenger av hvilken Arduino du har.

Lenke til kommentar

hei! er det noen her inne som er gode på kode og kan hjelpe meg?

 

skal kunne styre to motorer med sticene på en ps3 kontroll, de skal kunne går frem og tilbake (bruker en H-Bridge) og 1 steppermotor med directional knappene (altså de som går til sidene, skal bruke pilene som går opp og ned senere til noe annet)

Lenke til kommentar

Tror jeg begynner å finne ut av greier, slik at jeg kan bruke arduino som en slags dac for dallas temsensoren.

Prøver å lage et filter for å gjøre pwm analogt.

 

Så var det store spørsmålet... koden.

 

 

Jeg har kode for output, har kode for å lese sensoren.

Problemet er... Hvordan kombinerer jeg dem?

 

Kodene er sitert nedenfor.

 

For output

int output_1 = 9;
int output_2 = 10;

void setup() {
  pinMode(output_1, OUTPUT);
  pinMode(output_2, OUTPUT);

  TCCR1B = TCCR1B & 0b11111000 | 0x01;
}
  
void loop() {
  analogWrite(output_1, temp_1);
  analogWrite(output_2, temp_2);
}

Sensor:

// Get 1-wire Library here: http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <OneWire.h>

//Get DallasTemperature Library here:  http://milesburton.com/Main_Page?title=Dallas_Temperature_Control_Library
#include <DallasTemperature.h>

/*-----( Declare Constants and Pin Numbers )-----*/
#define ONE_WIRE_BUS_PIN 2

/*-----( Declare objects )-----*/
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS_PIN);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

/*-----( Declare Variables )-----*/
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html

DeviceAddress Probe01 = { 0x28, 0xD3, 0x4B, 0xCE, 0x04, 0x00, 0x00, 0xA8 }; 



void setup()   /****** SETUP: RUNS ONCE ******/
{
  // start serial port to show results
  Serial.begin(9600);
  Serial.print("Initializing Temperature Control Library Version ");
  Serial.println(DALLASTEMPLIBVERSION);
  
  // Initialize the Temperature measurement library
  sensors.begin();
  
  // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
  sensors.setResolution(Probe01, 12);
}//--(end setup )---

void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  delay(1000);
  Serial.println();
  Serial.print("Antall temperaturmaalere som er tilkoblet:  ");  
  Serial.println(sensors.getDeviceCount());   
  Serial.print("Henter temperatur: ");  
  Serial.println();   
  
  // Command all devices on bus to read temperature  
  sensors.requestTemperatures();  
  
  Serial.print("Probe 01 temperatur er:   ");
  printTemperature(Probe01);
  Serial.println();


   
  
}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/
void printTemperature(DeviceAddress deviceAddress)
{

float tempC = sensors.getTempC(deviceAddress);

   if (tempC == -127.00) 
   {
   Serial.print("Kan ikke hente temperatur. Undersoek om proben er koblet riktig.  ");
   } 
   else
   {
   Serial.print("C: ");
   Serial.print(tempC);
   }
}// End printTemperature
//*********( THE END )***********
Lenke til kommentar

 

 

 

 

Det er ledig på både pls og arduino :)

OK. Da kan du jo bare koble sammen serieporten fra Arduino med serieporten på PLS'en. Du har jo allerede verdiene fra temperatur-sensorene i serial monitor på Arduino.

Programmet på PLS'en som leser serieporten og henter ut verdiene må du lage selv. :)

Tusen takk for alle gode svar!

Ser ut til at jeg har gjort en major fail. Trodde det var to ledige ethernet og serial porter. Det var det ikke. Så eneste måten jeg får lest temperaturen er ved å benytte meg av de analoge inngangene på PLSen.

 

Så da er spørsmålet mitt, er det mulig å bruke arduino som en dac?

Altså at arduino konverterer signalet til analogt som PLSen kan lese av? (enten 0-5v eller 4-20 mA)

Hvor mange digitale utganger har du ledig på Ardunioen, og hvor nøyaktig må det analoge signalet til PLS være? (hvilken oppløsning trenger du?)

Skal jo ikke mer til enn et motstandsnettverk for å lage en ybersimpel DAC, om du har outputs nok.

Lenke til kommentar
  • 2 uker senere...

Tenkte at jeg skulle gjøre folk oppmerksomme på et nytt produkt som prøver å få crowdfunding nå.

 

Det er en optisk distansesensor som kan gå opp til 40 meter som er veldig billig og liten størrelse i forhold til annen teknologi som finnes på markedet nå.

 

http://pulsedlight3d.com/

 

 

De er vel oppe i 70% finansiering nå med 13 dager igjen. Jeg er ihvertfall veldig interessert i at dette produktet kommer på markedet.

 

Her er et sammenliknbart produkt:

http://lightware.co.za/shop/en/4-lrf-modules

 

Og SF02/F modulen blir da det nærmeste og den koster $250 mot pulsedlight sin sensor som bare koster $79 og er mindre i størrelse.

 

Jeg har ingen egeninteresse i dette produktet annet enn at jeg ønsker å kunne kjøpe en så dette er ikke noe reklame fra meg.

 

Man får noen ganske billige laser avstandsfinnere fra Kina som man kan hacke og prøve og plukke ut kommunikasjonen av for å bruke, men det blir jo ikke det samme som å kjøpe en ferdig modul som her. Og de er vel fremdeles ikke helt så billige og de er ihvertfall mye større i størrelse.

Endret av flesvik
Lenke til kommentar

Jeg prøver å sette opp en telnet-server, så jeg kan sende commandoer til den som den så utfører. Mer spesifikt ønsker jeg å styre en servo, men foreløpig har jeg bare prøvd å sette opp en server som tar imot kommandoer. SE NESTE INNLEGG

 

 

 

 
/*
DHCP-based IP printer

This sketch uses the DHCP extensions to the Ethernet library
to get an IP address via DHCP and print the address obtained.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

created 12 April 2011
modified 9 Apr 2012
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>


// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield

byte mac[] = {
0x90, 0xA2, 0xDA, 0x0D, 0x58, 0x14 };
byte ip[] = { 192, 168, 1, 210 };

EthernetServer server = EthernetServer(23);
EthernetClient client;
boolean connected = false;

String cmd;
int MAX_CMD_LENGTH;
void setup() {
// Open serial communications and wait for port to open:
// Serial.begin(9600);

// start the Ethernet connection:
Ethernet.begin(mac, ip);
server.begin();
//delay(10000);

// print your local IP address:
//Serial.print("My IP address: ");
}

void loop() {

client = server.available();
if (client == true) {
if (!connected){
client.flush();
connected = true;
}
if (client.available() > 0) {
readTelnetCommand(client.read());
}
}
//client.println("\nSteve's Arduino Telnet Server");
//client.println("? for help");
// printPrompt();

// check for input
if(digitalRead(7) == LOW) {
while(digitalRead(7) == LOW);
server.println("Input triggered :-)");
}
delay(10);
}

void readTelnetCommand(char c) {

if(cmd.length() == MAX_CMD_LENGTH) {
cmd = "";
}

cmd += c;

if(c == '\n') {
if(cmd.length() > 2) {
// remove \r and \n from the string
cmd = cmd.substring(0,cmd.length() - 2);
parseCommand();
}
}
}

void parseCommand() {

if(cmd.equals("quit")) {
client.stop();
connected = false;
} else if(cmd.equals("help")) {
server.println("--- Telnet Server Help ---");
server.println("on : switch on the Main Power");
server.println("off : switch off the Main Power");
server.println("quit : close the connection");
} else if(cmd.equals("on")) {
digitalWrite(2, HIGH);
} else if(cmd.equals("off")) {
digitalWrite(2, LOW);
} else {
server.println("Invalid command, type help");
}
cmd = "";
}

 

Endret av ATWindsor
Lenke til kommentar

funnet ut at jeg må starte fra skrætsj om jeg skal lære meg noe her, har nå fått opp serveren, mitt langsiktige mål er å ta imot kommandoer på typen "123a" der "a" indikerer at vinkelen er sendt, så den kan terminere koblingen til clienten og nullstille alle variable. Men ett steg av gangen, i første omgang forsølker jeg å lese det clien void loop() { // sjekker om klintt kobler seg til EthernetClient client = server.available(); //om klienten er på, mota tegn som klienten skriver inn, legg inn tegnene i "kommando", og print kommando til klienten

 

 

 

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
0x90, 0xA2, 0xDA, 0x0D, 0x58, 0x14 };
byte ip[] = { 192, 168, 1, 210 };


//setter opp server (telnet, port 23)
EthernetServer server(23);
EthernetClient client;
boolean connected = false;
//kommandoen som skal tas imot av kliten
String kommando;

void setup() {

//starter serveren
Ethernet.begin(mac, ip);
server.begin();

}

void loop() {
// sjekker om klintt kobler seg til
EthernetClient client = server.available();

//om klienten er på, mota tegn som klienten skriver inn, legg inn tegnene i "kommando", og print kommando
if (client) {


char bokstav = client.read();
kommando += bokstav;
client.println(kommando);

}
}
 

 

 

Det er delen

if (client) {


char bokstav = client.read();
kommando += bokstav;
client.println(kommando);

}

 

Som skaper problemer, om jeg bytter ut "kommando" i println med "bokstav", så fungerer det som tiltenk, den sender altså umiddelbart ut bokstaven jeg skrev inn, men med "kommando" så sender den bare ut en tom streng, hvorfor funker ikke dette? Hvorfor blir ikke char bokstav lagt til string kommando en etter en så om jeg skriver abc feks, så printes abc ut på skjermen?

Endret av ATWindsor
Lenke til kommentar

skal fint kunne deklarere en variabel inni en løkke. Det jeg først stusset mest på var å bruke += på en string. Men testet med g++ og ser at det funker fint, så vil jo anta at det funker på arduino også (ikke veldig bevandret i c++).

Lenke til kommentar

Du kan vel ikke gjøre type assignment "midt i" koden, du må vel gjøre det først?

Slik at du først har

char bokstav;

 

Og så får du

bokstav = client.read();

 

Eller prøver du å gjøre type cast?

 

Som nevnt, så funker det fint om jeg bare printer "bokstav", så det virker som den deklareres fint, og får riktig variabel, men jeg skal sjekke det ut.

 

AtW

Lenke til kommentar

Testet å deklarere "bokstav" utenfor løkken, samme resultat, printer jeg "bokstav" får jeg forventet resultatet, men om jeg printer "kommando", så bare printer den en tom linje igjen og igjen til evig tid, virker som det er de tå legge til charen til "kommando" som går galt, men jeg skjønner ikke hvorfor, kan egentlig ikke c++ og det virker som syntaksen er rett utifra det jeg har lest :(

 

AtW

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...