Tiedote ylläpidolta:

Elektroniikkafoorumi sulkeutuu tietoturva ongelmien takia.
Käyttäjien tietoja (yv:t, sähköpostiosoite ja salasanan hash) on saattanut vuotaa vääriin käsiin.

Foorumi on asettettu vain luku tilaan. Vanhoja keskusteluja voi lukea palvelinsopimuksen päättymiseen asti.
Tietokannasta on poistettu kaikki salasanat, sähköpostiosoitteet ja yksityisviestit.

Jos haluat saada omat yksityisviestisi, lähetä sähköpostia yllapito@elektroniikkafoorumi.com
samasta sähköpostista mikä oli foorumin tiedoissa niin voin kaivella niitä varmuuskopioista.

Mielenkiintoni foorumin ylläpitoon on viime vuosina ollut vähäistä jo muutenkin joten tähän on hyvä lopettaa.
Kiitokset kaikille käyttäjilla ja pahoittelut mahdollisista ongelmista.

Päivitys: Näyttäisi siltä että mahdollinen vuoto koski vanhaa phpBB2 tietokantaa,
joten helmikuuta 2012 uudemmat tiedot pitäisi olla turvassa.

-Lahha
yllapito@elektroniikkafoorumi.com


Pulssilaskuri ja Arduinon ohjelmointi

Keskustelua mikrokontrollereista ja niiden ohjelmoinnista.

Valvoja: Moderaattorit


Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Su Tammi 22, 2017 23:11
Hei!

Ostin muutama viikko sitten arduino unon ja olen vielä aika pihalla sen ohjelmoinnista. Perus ledin vilkuttelut, pwm säätö ja esim. akkujännitteen lukeminen vastuksien avulla onnistuu jo, mutta monimutkaisemmat jutut aiheuttavat harmaita hiuksia. Suositteletteko robomaan kirjaa http://robomaa.fi/textbooks/textbooks-fin/arduino-perusteista-hallintaan?

Olen yritänyt saada ohjelmoitua laskurin robottiini, joka laskee ajopulssit (induktiivinen anturi pyörässä) ja pysäyttää moottorit, kun säädettu raja ylitetään. Ongelma on se, että moottorit eivät käynnisty ennen kuin ohjelma saa anturilta "herätteen". Koodin kopion netistä ja yhdistelin. Laskurin toimintaperiaate ei oikein ole vielä avautunut. Mihin tarvitaan previousState ja currentState?

Tarkoitus olisi saada robotti (ehkä joskus ruohonleikkuri) kulkemaan käytävää seinän vieressä säädetty matka ja säädetyllä etäisyydellä. Etäisyyden mittaamiseen on etsinnässä ulkokäyttöön tarkoitettu ultraäänisensori. Onko linkittää hyviä vaihtoehtoja?

Tässä yksi http://robomaa.fi/anturit/ultrani/ultrasonic-ranger-srf485wpr-weatherproof

Kuinka tuon kytkentä toteutetaan?
Voiko perusmallin anturin suojata ilman, että toimintakyky menetetään?


Robotin käynnistys tulisi pystyä ajastamaan. Onnistuuko ilman reaaliaikakelloa? Jos ei, niin mitä mallia kannattaisi käytää?

Minulla on Sabertooth 2x32A moottorin ohjain, joka ohjaa kahta 24v 350w sähkömoottoria. Moottorinohjain on yhdistettu arduinon tx pinniin.

Koodi: Valitse kaikki
// Tank-Style Sweep Sample for Packet Serial
// Copyright (c) 2012 Dimension Engineering LLC
// See license.txt for license details.
int ajopulssi = 15; //säädetty matka pulsseina
int anturiPin =7; //anturin pinni
int val = 0;
int counter = 0; //laskuri
int currentState = 0;
int previousState = 0;
#include <Sabertooth.h>

// Mixed mode is for tank-style diff-drive robots.

Sabertooth ST(128); // The Sabertooth is on address 128. We'll name its object ST.
                    //If you've set up your Sabertooth on a different address, of
                    //course change
                    //that here. For how to configure address, etc. see the DIP
                    //Switch Wizard for
                    //Sabertooth -                       //http://www.dimensionengineering.com/datasheets/SabertoothDIPWizard/start.htm
                    // Be sure to select Packetized Serial Mode for use with this
                    //library.
                    // This sample uses the mixed mode (diff-drive) commands,
                    //which require two motors
                    // and hence do not work on a SyRen.
                    //
                    // In this sample, hardware serial TX connects to S1.
                    // See the SoftwareSerial example in 3.Advanced for how to use
                    //other pins.

void setup()
{
  pinMode(anturiPin, INPUT);
  SabertoothTXPinSerial.begin(9600); // 9600 is the default baud rate for Sabertooth
                                                           //packet serial.
  ST.autobaud(); // Send the autobaud command to the Sabertooth controller(s).
                          // NOTE: *Not all* Sabertooth controllers need this command.
                          //It doesn't hurt anything, but V2 controllers use an
                          //EEPROM setting (changeable with the function setBaudRate)
                          //to set
                          //the baud rate instead of detecting with autobaud.
                          //If you have a 2x12, 2x25 V2, 2x60 or SyRen 50, you can
                          //remove
                          //the autobaud line and save yourself two seconds of startup
                          //delay.
            
  ST.drive(0); // The Sabertooth won't act on mixed mode packet serial commands until
  ST.turn(0);  // it has received power levels for BOTH throttle and turning, since it
                     // mixes the two together to get diff-drive power levels for both
                     //motors.          
}
void loop()
{
  int power;
  val = digitalRead(anturiPin);
if (val == HIGH) {
currentState = 1;
}
else {
currentState = 0;
}
if(currentState != previousState){
if(currentState == 1){
counter = counter + 1;
}
  if (counter < ajopulssi){
  for (power = 0; power <= 127; power ++)
  {
    ST.drive(power);
    delay(20);
  }
}
  else {
  ST.drive(0);
  }
}
previousState = currentState;
delay(10);
}
Viimeksi muokannut juipelo päivämäärä Ma Tammi 23, 2017 12:42, muokattu yhteensä 8 kertaa

Jäsen
Jäsen
Viestit: 134
Liittynyt: La Maalis 17, 2012 14:43
ViestiLähetetty: Ma Tammi 23, 2017 11:42
Toinen mahdollinen kirja Arduinon alkeisiin on Tero Karvisen ja Kimmo Karvisen kirja Sulautetut - Opi rakentamaan robotteja ja muita sulautettuja järjestelmiä.

Löytyneen kirjastosta.

Muuten on vähän ongelmallista neuvoa, kun et ole antanut koodiasi nähtäville.

Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Ma Tammi 23, 2017 12:50
Sulautetut kirjan lainasin jo. Kyllä sillä alkuun pääsi, mutta kaipaisin vielä enemmän koodi esimerkkejä.
Eikö tuo koodin tynkä näy alareunassa?

Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Ma Tammi 23, 2017 16:22
Jos muutat koodia kuten alla niin sen pitäisi lähteä liikkeelle ilman "herätettä".
Ongelmana oli se, että sinulla oli moottorien ajokäsky saman if-lauseen sisällä mikä laskee pulsseja.
Mutta koska pinnin tilan muutosta ei ikinä tule koska moottorit eivät liiku, niin mitään pulssiakaan ei tule joka käynnistäisi moottorit.

Koodi: Valitse kaikki
// Tank-Style Sweep Sample for Packet Serial
// Copyright (c) 2012 Dimension Engineering LLC
// See license.txt for license details.
int ajopulssi = 15; //säädetty matka pulsseina
int anturiPin =7; //anturin pinni
int val = 0;
int counter = 0; //laskuri
int currentState = 0;
int previousState = 0;
#include <Sabertooth.h>

// Mixed mode is for tank-style diff-drive robots.

Sabertooth ST(128); // The Sabertooth is on address 128. We'll name its object ST.
                    //If you've set up your Sabertooth on a different address, of
                    //course change
                    //that here. For how to configure address, etc. see the DIP
                    //Switch Wizard for
                    //Sabertooth -                       //http://www.dimensionengineering.com/datasheets/SabertoothDIPWizard/start.htm
                    // Be sure to select Packetized Serial Mode for use with this
                    //library.
                    // This sample uses the mixed mode (diff-drive) commands,
                    //which require two motors
                    // and hence do not work on a SyRen.
                    //
                    // In this sample, hardware serial TX connects to S1.
                    // See the SoftwareSerial example in 3.Advanced for how to use
                    //other pins.

void setup()
{
  pinMode(anturiPin, INPUT);
  SabertoothTXPinSerial.begin(9600); // 9600 is the default baud rate for Sabertooth
                                                           //packet serial.
  ST.autobaud(); // Send the autobaud command to the Sabertooth controller(s).
                          // NOTE: *Not all* Sabertooth controllers need this command.
                          //It doesn't hurt anything, but V2 controllers use an
                          //EEPROM setting (changeable with the function setBaudRate)
                          //to set
                          //the baud rate instead of detecting with autobaud.
                          //If you have a 2x12, 2x25 V2, 2x60 or SyRen 50, you can
                          //remove
                          //the autobaud line and save yourself two seconds of startup
                          //delay.
            
  ST.drive(0); // The Sabertooth won't act on mixed mode packet serial commands until
  ST.turn(0);  // it has received power levels for BOTH throttle and turning, since it
                     // mixes the two together to get diff-drive power levels for both
                     //motors.          
}
void loop()
{
  int power;
  val = digitalRead(anturiPin);
if (val == HIGH) {
currentState = 1;
}
else {
currentState = 0;
}
if(currentState != previousState){
if(currentState == 1){
counter = counter + 1;
}
}
if (counter < ajopulssi){
  for (power = 0; power <= 127; power ++)
  {
    ST.drive(power);
    delay(20);
  }
}
  else {
  ST.drive(0);
}
previousState = currentState;
delay(10);
}

Jäsen
Jäsen
Viestit: 134
Liittynyt: La Maalis 17, 2012 14:43
ViestiLähetetty: Ma Tammi 23, 2017 16:47
juipelo kirjoitti:Eikö tuo koodin tynkä näy alareunassa?


Joo sori, näkyy tosiaan, mutta koodisi tekijänoikeudet hämäsivät...
juipelo kirjoitti:
Koodi: Valitse kaikki
...
// Copyright (c) 2012 Dimension Engineering LLC
// See license.txt for license details.
...
}


... niin luulin sen olevan muokkaamaton esimerkkikoodi.

Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Ma Tammi 23, 2017 22:53
Noniin nyt moottorit pyörivät, mutta pätkittäin. Miten saan ajon toimimaan siihen asti, että pulssiraja katkaisee sen? Laskurilla ei myöskään tunnu olevan vaikutusta. Erillisellä laskuri koodilla saan kyllä printattua sarjamonitoriin tekstiä anturin ohjaamana. Kyseisestä koodista otin vaikutteita moottorinohjaukseen.

Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Ti Tammi 24, 2017 7:07
juipelo kirjoitti:Noniin nyt moottorit pyörivät, mutta pätkittäin. Miten saan ajon toimimaan siihen asti, että pulssiraja katkaisee sen? Laskurilla ei myöskään tunnu olevan vaikutusta. Erillisellä laskuri koodilla saan kyllä printattua sarjamonitoriin tekstiä anturin ohjaamana. Kyseisestä koodista otin vaikutteita moottorinohjaukseen.


Aah, pahoittelut, tuo for-looppihan nollaa aina sitä suorittaessa power-muuttujan, jolloin moottorin tehokin menee aina nollaan.
Eli siihen pitää vielä lisätä yksi tarkistus millä katsotaan että onko moottori jo "ajoteholla".
Tuohon varmaan elegantimman ratkaisunkin keksisi, mutta ei tähän aikaa aamusta pää vielä toimi... :mrgreen:


Koodi: Valitse kaikki
if (counter < ajopulssi){
    if(power < 127)
       {
            for (power = 0; power <= 127; power ++)
            {
                 ST.drive(power);
                 delay(20);
             }
       }
}
  else {
  ST.drive(0);
}

Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Ti Tammi 24, 2017 10:38
Näinkö tarkoitit? Edelleen tuntuu pätkivän :?
Koodi: Valitse kaikki
int ajopulssi = 15; //säädetty matka pulsseina
int anturiPin =7; //anturin pinni
int val = 0;
int counter = 0; //laskuri
int currentState = 0;
int previousState = 0;
#include <Sabertooth.h>

// Mixed mode is for tank-style diff-drive robots.

Sabertooth ST(128); // The Sabertooth is on address 128. We'll name its object ST.
                    //If you've set up your Sabertooth on a different address, of
                    //course change
                    //that here. For how to configure address, etc. see the DIP
                    //Switch Wizard for
                    //Sabertooth -                       //http://www.dimensionengineering.com/datasheets/SabertoothDIPWizard/start.htm
                    // Be sure to select Packetized Serial Mode for use with this
                    //library.
                    // This sample uses the mixed mode (diff-drive) commands,
                    //which require two motors
                    // and hence do not work on a SyRen.
                    //
                    // In this sample, hardware serial TX connects to S1.
                    // See the SoftwareSerial example in 3.Advanced for how to use
                    //other pins.

void setup()
{
  pinMode(anturiPin, INPUT);
  SabertoothTXPinSerial.begin(9600); // 9600 is the default baud rate for Sabertooth
                                                           //packet serial.
  ST.autobaud(); // Send the autobaud command to the Sabertooth controller(s).
                          // NOTE: *Not all* Sabertooth controllers need this command.
                          //It doesn't hurt anything, but V2 controllers use an
                          //EEPROM setting (changeable with the function setBaudRate)
                          //to set
                          //the baud rate instead of detecting with autobaud.
                          //If you have a 2x12, 2x25 V2, 2x60 or SyRen 50, you can
                          //remove
                          //the autobaud line and save yourself two seconds of startup
                          //delay.
           
  ST.drive(0); // The Sabertooth won't act on mixed mode packet serial commands until
  ST.turn(0);  // it has received power levels for BOTH throttle and turning, since it
                     // mixes the two together to get diff-drive power levels for both
                     //motors.         
}
void loop()
{
  int power;
  val = digitalRead(anturiPin);
if (val == HIGH) {
currentState = 1;
}
else {
currentState = 0;
}
if(currentState != previousState){
if(currentState == 1){
counter = counter + 1;
}
}
if (counter < ajopulssi){
    if(power < 127)
       {
            for (power = 0; power <= 127; power ++)
            {
                 ST.drive(power);
                 delay(20);
            }
       }
}
  else {
  ST.drive(0);
}
previousState = currentState;
delay(10);
}

Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Ti Tammi 24, 2017 13:13
juipelo kirjoitti:Näinkö tarkoitit? Edelleen tuntuu pätkivän :?


Jaa, kokeileppa vielä siirtää tuo power-muuttujan määrittely tuonne alkuun missä muutkin muuttujat määritellään. Se taitaa nyt alustaa sen joka kerta kun looppi alkaa alusta.

Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Ti Tammi 24, 2017 14:29
Kiitos!
Nyt toimii oikein. :)

Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Ti Tammi 24, 2017 15:06
Sitten ajastin ja etäisyydenmittaus.

Eli vuorokausi tai ehkä viikkokello pitäsi kehitellä. Yksi vaihtoehto olisi, että ostan valmiin ajastimen ja kytken sen arduinon virransyöttöö. Ensin haluaisin kuitenkin kokeilla muutaman euron reaaliaikakelloa. Käykö DS1307 vai onko parempia vaihtoehtoja?

Ultraäänisensoriksi en ole löytänyt vielä muuta kuin tämän.
http://robomaa.fi/ultrasonic-ranger-srf485wpr-weatherproof

Ei taida toimia suoraan vaan vaatisi jonkun muuntimen?

200€ hintaluokassa löytyy kyllä teollisuudessa käytettäviä antureita, joista saa ulos 0-10vdc. Muutamalla vastuksella saisi toimimaan. Hinta vaan karkaa vähän liian korkeaksi.
http://www.finnparttia.fi/epages/finnparttia.sf/fi_FI/?ObjectPath=/Shops/2014102905/Products/UA30C35PK

Perus HC-SR04 ei olisi kallis kokeiltavaksi. Mahtaako kestää ulkoilmassa, jos piirilevyn laittaa koteloon ja kotelon "lipan" alle?

Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Ke Tammi 25, 2017 12:59
Reaaliaikakelloksi nyt käy oikeastaan mikä vain minkä osaa kytkeä käyttöön siihen arduinoon. :)

Ja harrasteprojektiin itse varmaan käyttäisin tuota HC-SR04 -anturia, laittaa sen vedenpitävään koteloon mihin poraa noille antureille paikat, ja vaikka tiivistää jollain. Ja vaikka hajoaisikin niin ainakaan tuo kyseinen anturi ei ole hinnalla pilattu.

juipelo kirjoitti:Sitten ajastin ja etäisyydenmittaus.

Eli vuorokausi tai ehkä viikkokello pitäsi kehitellä. Yksi vaihtoehto olisi, että ostan valmiin ajastimen ja kytken sen arduinon virransyöttöö. Ensin haluaisin kuitenkin kokeilla muutaman euron reaaliaikakelloa. Käykö DS1307 vai onko parempia vaihtoehtoja?

Ultraäänisensoriksi en ole löytänyt vielä muuta kuin tämän.
http://robomaa.fi/ultrasonic-ranger-srf485wpr-weatherproof

Ei taida toimia suoraan vaan vaatisi jonkun muuntimen?

200€ hintaluokassa löytyy kyllä teollisuudessa käytettäviä antureita, joista saa ulos 0-10vdc. Muutamalla vastuksella saisi toimimaan. Hinta vaan karkaa vähän liian korkeaksi.
http://www.finnparttia.fi/epages/finnparttia.sf/fi_FI/?ObjectPath=/Shops/2014102905/Products/UA30C35PK

Perus HC-SR04 ei olisi kallis kokeiltavaksi. Mahtaako kestää ulkoilmassa, jos piirilevyn laittaa koteloon ja kotelon "lipan" alle?

Kokelas
Kokelas
Viestit: 8
Liittynyt: Su Tammi 22, 2017 22:53
ViestiLähetetty: Ke Tammi 25, 2017 18:50
Joo laitoin tilaukseen HC-SR04 anturin ja DS1307 kellon. HC-SR04 saa tosiaan muovikassillisen laadukkaamman hinnalla, joten ei haittaa vaikka yksi menee kerran kesässä. :D

Täytyykö muuten tuon reaaliaikakellon(http://www.elektroniikkaosat.com/c-45/p-702470254/Reaaliaikakello-DS1307.html) paristo olla ladattavaa mallia? Näyttäis olevan aika harvinainen tuo LIR2032 Toki netin kautta tilaamalla saa. Vai kelpaako ihan perus cr2032? Jännite ero ainakin on 0,6v. Osaakos tuo piiri ladata paristoa käytön aikana?

Jäsen
Jäsen
Viestit: 134
Liittynyt: La Maalis 17, 2012 14:43
ViestiLähetetty: Ke Tammi 25, 2017 18:57
juipelo kirjoitti:Näyttäis olevan aika harvinainen tuo LIR2032 Toki netin kautta tilaamalla saa. Vai kelpaako ihan perus cr2032? Jännite ero ainakin on 0,6v. Osaakos tuo piiri ladata paristoa käytön aikana?


Kysy myyjältä. Itselläni on hyvät kokemukset kyseisestä liikkeestä, varmaan vastaa.

Vanhempi jäsen
Vanhempi jäsen
Viestit: 400
Liittynyt: Pe Maalis 06, 2009 18:23
ViestiLähetetty: Ke Tammi 25, 2017 22:04
Tuo paristo on tosiaan ladattavaa mallia, eli aina kun kello saa jännitteen jostain niin se paristo latautuu.
Kun laitteessa ei ole jännitettä niin kellonaika pysyy tallessa pariston voimin, eli siitä ei tarvitse huolehtia.

Millaiseen robottiin sinulla on muuten nämä kytkettynä? :)
Oliko niin että sinulla on vain muutama viikko koodauskokemusta takana vai oliko aiemmin jostain muusta kokemusta?

juipelo kirjoitti:Joo laitoin tilaukseen HC-SR04 anturin ja DS1307 kellon. HC-SR04 saa tosiaan muovikassillisen laadukkaamman hinnalla, joten ei haittaa vaikka yksi menee kerran kesässä. :D

Täytyykö muuten tuon reaaliaikakellon(http://www.elektroniikkaosat.com/c-45/p-702470254/Reaaliaikakello-DS1307.html) paristo olla ladattavaa mallia? Näyttäis olevan aika harvinainen tuo LIR2032 Toki netin kautta tilaamalla saa. Vai kelpaako ihan perus cr2032? Jännite ero ainakin on 0,6v. Osaakos tuo piiri ladata paristoa käytön aikana?
Seuraava

Paluu Mikrokontrollerit ja ohjelmointi

Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 1 vierailijaa