Arduino tápról

Arduino tápról
2016-04-17T12:44:15+02:00
2016-04-17T21:58:29+02:00
2022-08-10T02:50:28+02:00
xlyer
Üdv!

Kezdő vagyok még és olyan problémám van, hogy az arduino-s program csak akkor működik ha PC-ről megy USB-ről, tápról nem. Azt mondták hogy a programot kell átírni.


/* HC-SR04 Sensor
https://www.dealextreme.com/p/hc-sr04-ultrasonic-sensor-distance-mea..

This sketch reads a HC-SR04 ultrasonic rangefinder and returns the
distance to the closest object in range. To do this, it sends a pulse
to the sensor to initiate a reading, then listens for a pulse
to return. The length of the returning pulse is proportional to
the distance of the object from the sensor.

The circuit:
* VCC connection of the sensor attached to +5V
* GND connection of the sensor attached to ground
* TRIG connection of the sensor attached to digital pin 2
* ECHO connection of the sensor attached to digital pin 4
Original code for Ping))) example was created by David A. Mellis
Adapted for HC-SR04 by Tautvidas Sipavicius
This example code is in the public domain.
*/


const int trigPin = 12;
const int echoPin = 13;

void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
}

void loop()
{


// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration,cm;

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);



// Read the signal from the sensor: a HIGH pulse whose
// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);

// convert the time into a distance
cm = microsecondsToCentimeters(duration);
Serial.print(cm);
if (cm<25)
{
Serial.println("Lights");
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
delay(1000);
}
else
{

digitalWrite(7,LOW);
digitalWrite(6,LOW);
}
Serial.print("cm");
Serial.println();

delay(10);
}

long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
// See: Downloads
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}


Valaki tudna segíteni?
Előre is köszönöm!
Mutasd a teljes hozzászólást!
Szia!

Nem látom át pontosan miért nem megy, ezért kellene kideríteni mitől fekszik meg.
pinMode(trigPin, OUTPUT); és a pinMode(echoPin, INPUT); -t tedd a setup részebe mindenképpen A konstansok definiálása után.

Ha ezzel megvagy, és megy a kódod, akkor szedd ki mindenhonnan a  serial.print, serial.println és a setupban a seriel.begint(9600)- at is, töltsd fel, tedd fel tápra, próbáld ki. Remélem ezek után is lehet még használni az arduino-t! NEM VÁLLALOK FELELŐSSÉGET!

Ellenőrizd le, hogy megy-e így. A Ledek villogásából látnod kell! Ha így megy a kódod, akkor a serial printeknél van a gond. Ha így sem, akkor máshol lehet. Elképzelhető, hogy túlterhelés van valahol, nem tudom, nem látom az áramkört.
Mutasd a teljes hozzászólást!

  • Hali!

    A jövőben segítsd annyival a fórum látogatóit – és ezáltal önmagad is –, hogy NORMÁLIS, A PROBLÉMÁT JÓL KÖRÜLÍRÓ CÍMET ADSZ a témának. Előre is köszönöm (az ő nevükben is).

    Mutasd a teljes hozzászólást!
  • A serialos parancsoknak sok értelme nincs ha külön tápról megy. De abba nem vagyok biztos hogy a serialra küldött üzenetek illetve maga az initializálás okozhat-e futási hibát.
    Mutasd a teljes hozzászólást!
  • Sok ARDUINO kört még nem raktam össze, de amit sikerült kiderítenem a kódodból, az az, hogy a seriallal csak üzenetet küldesz a PC felé, hogy lásd mi történik éppen.

    1 körben szedd ki a kódokból a serial print-eket. Az Arduino menni fog, csak nem látod, hogy mekkora a mért távolság. Szerezz be egy LCD kijelzőt, I2C illesztővel, arra írasd ki az eredményeidet, ne a PC felé küld.

    2 illeszteni kellene a kódba egy olyat, ami vizsgálja, hogy van-e PC kapcsolat, ha van akkor megy a serial.print, ha nincs akkor nem. A debug változó fogja megadni, hogy van-e kapcsolat, vagy nincs a PC-vel.

    if (Serial) debug = 1; else debug = 0;
    Valami ilyesmi kellene a setup-ba, majd a loop-ba, mindenhova ahol a serial.print van:

    if(debug==1) { Serial.print(cm); }

    Persze csak akkor, ha ezért nem ment a kódod. Olvastam olyat is, hogy  nem minden arduino-nál lesz jó az if (serial), de azért próbáld ki.
    Mutasd a teljes hozzászólást!
  • Mit értesz az alatt, hogy nem megy?
    A ledek rajta vannak a 6-os és a 7-es lábon? Az szenzor a 12, 13 -as lábon?  A megjegyzés és a konstansok eltérnek!
    Az USB-ről, 25 cm-en belül tárgyra a ledek világítanak?
    A tápról, 25 cm-en belül tárgyra a ledek világítanak?

    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    helye a setup()-ban van.
    Mutasd a teljes hozzászólást!
  • Ha USB-n van minden működik úgy ahogy leírtad. Ha tápról megy akkor semmi sem történik
    Mutasd a teljes hozzászólást!
  • void setup() { // initialize serial communication: pinMode(6,OUTPUT); pinMode(7,OUTPUT); digitalWrite(6,LOW); digitalWrite(7,LOW); digitalWrite(6,HIGH); Serial.begin(9600); digitalWrite(7,HIGH); }
    Ha lecseréled a setup()-ot, mindkét led világít?

    Az alap led villogtatás működik USB-ről és a tápról?
    void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6, HIGH); delay(1000); digitalWrite(6, LOW); delay(1000); }
    Mutasd a teljes hozzászólást!
  • A második kód működik táppal is.
    Nem tudom miért nem jó amikor a távolságmérőt is belerakom. :/
    Mutasd a teljes hozzászólást!
  • Szia!

    Nem látom át pontosan miért nem megy, ezért kellene kideríteni mitől fekszik meg.
    pinMode(trigPin, OUTPUT); és a pinMode(echoPin, INPUT); -t tedd a setup részebe mindenképpen A konstansok definiálása után.

    Ha ezzel megvagy, és megy a kódod, akkor szedd ki mindenhonnan a  serial.print, serial.println és a setupban a seriel.begint(9600)- at is, töltsd fel, tedd fel tápra, próbáld ki. Remélem ezek után is lehet még használni az arduino-t! NEM VÁLLALOK FELELŐSSÉGET!

    Ellenőrizd le, hogy megy-e így. A Ledek villogásából látnod kell! Ha így megy a kódod, akkor a serial printeknél van a gond. Ha így sem, akkor máshol lehet. Elképzelhető, hogy túlterhelés van valahol, nem tudom, nem látom az áramkört.
    Mutasd a teljes hozzászólást!
  • Ha a loop-ban mindenhonnan kitörölted a serial.print, és serial.println sorokat, de a voidban benne hagytad a serial.begin részt ÉS ÚGY megy a programod akkor ezt is kipróbálhatod:

    if (serial.available()>0){ Serial.print(cm); } Azaz csak akkor próbáljon meg írni rá, ha az lehetséges.
    Mutasd a teljes hozzászólást!
  • Megoldódott a probléma. A kód jó volt. Valamiért 5V-os kimeneten csak 3,3 V-t kapott az érzékelő.
    Mutasd a teljes hozzászólást!
  • Ezért írtam, hogy lehet máshol van a gebasz. Az eszközöknek jobb, ha máshonnan kapják a megfelelő tápot.

    Ez lett volna a következő javaslatom, írtam is, hogy:

    Elképzelhető, hogy túlterhelés van valahol, nem tudom, nem látom az áramkört.




    Valószínűleg az arduino nem bírta kiszolgálni megfelelő árammal, vagy mikor a tápra kapcsoltál, akkor az arduino lába 3.3v-ra kapcsolt vissza, de ezt nem hiszem teljes mértékben.

    Nem lehet a távolság szenzort I2C buszon használni? Én kipróbálnám Úgy is!
    Mutasd a teljes hozzászólást!
  • Most néztem csak meg a szenzort, úgy látom nem lehet I2C-n használni, de lehet tévedek. Megnézem az enyémet, az is nem rég jött meg.
    Mutasd a teljes hozzászólást!
abcd