Begränsningsslinga BWF (Buried Wire Fence)

September 19, 2015 19:19   bwf, elektronik
En BWF (Buried Wire Fence) eller begränsningsslinga på svenska är som ett staket för gräsklipparen. Man använder en Arduino Mini/Uno där man skickar ut pulser i en kabel. Gräsklipparen känner av begränsningskabeln och är programmerad att inte gå över denna. Detta för att man inte vill att gräsklipparen rymmer in i grannens tulpanland.

Motivering

För att gräsklipparen skall kunna sköta gräsmattan och inte köra ut på gatan eller in i grannens buskar så behövs någon form av avgränsing runt tomten. Man kan tänkas lösa detta på olika sätt men enklast är en slinga som grävs ner i form av en vanlig 1,5mm  kabel/sladd.

Signalen

Signalen genereras av en microprocessor och ser i grova drag ut så här.

Bilden ovan är från LIAM 5.0 (2015-09-15)

Först kommer en hög +12V puls som varar i 100us, detta är "inne" signalen. Direkt efter inne kommer en ute -12V puls sedan väntar vi i 10ms för att slå på en ny ute puls. Efter det blir det en väntan i 10ms innan allt börjar om igen. 

Denna puls metod har fördelar mot fasta frekvenser då det går att se skillnad på inne/ute samt genom modifiera tiderna skapa pulser som ligger så långt från störningar att dom inte påverkas eller iallafall utmärker sig för mottagaren skall kunna mäta rätt.

I mottagaren sitter ett antal filter och förstärkare (läs mer nedan) som gör att vi får in fyrkantiga och fina signaler till processorn. Mottagen använder sig sedan av en interrupt på D2 via toppskölden:

attachInterrupt(0,updateBWF, RISING);

Vi letar efter alltså efter en stigandepuls skall komma, sedan kollar vi hur lång tid det gått sedan förra pulsen och kan därmed veta om det är inne eller ute vi fick denna gången. Den adderas i såfall till rätt räknare och när vi fått tillräckligt många ute för vara säkra på vi faktiskt är ute så triggas en vändning. Samma gäller att om vi inte får tillräckligt många inne under en viss tid stannar vi och väntar på någon skall komma och starta om klipparen eller i värsta fall bära hem den från grannes sönder klippta roser.

Förstärkare

Arduinons utgång klarar 20-50mA vilket är tok för klent till sändaren. Då signalen skall polvändas för att kunna sänga inne respektive ute så behövs en såkallad H-brygga. Bryggan skiftar sidan på +/- och får slingan att sända negativ puls.

Sändaren ligger på väligt kort tid men drar runt två ampere och blir varm om den är underdimensionerad.

Den jag anser fungerat bäst är L298 standalone tillsammans med en Nano, Mini, Uno Arduino

 

Mjukvara

Det finns mjukvara i både sändare och mottagaren som skall trimmas för gilla varandra. 

Sändaren trimmas tills debugg mjukvaran mäter stabila och repeterbara värden.

Exempel nedan på när man kör på debugmjukvara för Liam. I koden för Liam kan man använda upp till fyra spolar. Och av en händelse är det precis så många ingångar det finns på MCtopp. 

Värden på alla spolar när man är innanför slingan: 

  • Sensor0: 90 90 90 90 90 90 90 90 90 90 
  • Sensor1: 90 90 90 90 90 90 90 90 90 90 
  • Sensor2: 90 90 90 90 90 90 90 90 90 90 

Värden på alla spolar när man är utanför slingan: 

  • Sensor0: 82 8 82 8 82 8 82 8 82 8 82 8 82
  • Sensor1: 82 8 82 8 82 8 82 8 82 8 82 8 82
  • Sensor2: 82 8 82 8 82 8 82 8 82 8 82 8 82

Dessa läggs sedan in i huvudprogrammet(fil "definition.h") till gräsklipparen ex:

bwf-setting
Bilden ovan är från LIAM 5.0 (2015-09-15)

Siffrorna skall vara exakt rätt för att kunna urskilja från störningar.

 

Avkodning av signalen i mottagarmjukvaran

Variable

Defult

Övrigt

INSIDE_BWF  

85

Hur lång är Inne

OUTSIDE_BWF

5

Hur lång är ute

pulse_unit_length

100

Hur lång är en "enhet"

half_unit_length

50

Hur lång är en halv enhet

pulse_unit

--

Variabel att räkna i

 

Vi börjar med lära klipparen vad är inne resp. vad är ute

int BWFSENSOR::outside_code[] = {OUTSIDE_BWF};
int BWFSENSOR::inside_code[] = {INSIDE_BWF};

Mottagarkoden

Räkna ut hur lång tid som gått sedan förra pulsen
pulse_length = int(micros() - pulse_time);

Spara undan tiden till nästa gång
pulse_time = micros(); //Micro är en räknare som ränkar upp från start på cpu i steg om microsekunder

Räkna ut pulsen
pulse_unit = (pulse_length+half_unit_length) / pulse_unit_length;

Räkne exempel med pulse_length = 7500
pulse_unit = (7500+50)/100;

pulse_unit = 7550/100 = 75,5 men sparas utan decimal (75)

Kontrollera om pulsen passar för inne

if (pulse_unit - inside_code < 2)

Räkne exempel
  75-85 < 2 = -10 dvs vi är inne

Om svaret var ja på ovan räknar vi upp inne med ett.
  pulse_count_inside++;

Annars nollställer vi räknaren för inne
  pulse_count_inside = 0;

Kontrollera om pulsen passar för ute

if (pulse_unit-outside_code) < 2)
  pulse_count_outside++;

Räkne exempel
  75-8 < 2 = 67 dvs vi är inte ute

Om svaret var ja på ovan räknar vi upp inne med ett.
  pulse_count_inside++;

Annars nollställer vi räknaren för ute
  pulse_count_outside = 0;

 

Eftersom signalen är för långsam för att skötas via normal PWM så görs den med timerfunktioner i arduinon.

 

Bilden ovan är från LIAM 5.0 (2015-09-15)

 

Spolar

Spolen skall sitta rakt upp och ner, dvs får ej ligga ner.

 

Motstånd och kabel

För att inte få total kortslutning behöver kabel vara lång 1-200meter eller kopplas i serie med ett motstånd.

För att sända med 2amp och 12V säger ohmslag att det behövs ca 12/2 = 6ohm i serie med kabeln, detta är lite luddigt då det skapas induktans när vi pulsar signalen. Men börja med sätta 5ohm i serie och se hur det går, blir det väligt varmt i sändaren sätt ett till. verkar det som inget händer prova sätta en 2ohm eller inget alls.

 

Felsökning 

Det finns ett par vanliga problem som kan dyka upp: 

  • En eller flera spolar sticker ut och ger annolunda värde än de andra
    • Identifiera vilken spole som visar fel. 
      • Kör debugmjukvara och titta på elschemat vilken spole som är vilken.
    • Är spolen stående eller liggande? 
      • Är den liggande, ställ den upp! 
      • Är den stående, vänd den upp och ner. 
    • Är spolen korrekt ansluten?
      • Skifta polerna.
      • Skifta plats på kortet och se om problemet följer spolen eller ingången på MCtopp. (Tex. om spole 0 visar fel så byt plats på spole 0 och spole 1.)
        • Följer det spolen kan den vara defekt eller problem med anslutningen
          • Kontrollera kablage/anslutning
          • Kontrollera att den är stående
          • Testa montera den uppochner. 
          • Testa skifta poler på spolen
          • Är du säker på att den visar fel och inte rätt? Kan ju vara att den visar annorlunda för den visar rätt och de andra visar fel! Överväg alla möjligheter! 
        • Följer det ingången så kan MCtopp vara defekt. 
          • Misstänker du att MCtopp är defekt: Test av toppsköld v1.7 och uppåt
          • Misstänker du att anslutningarna till spolarna är tvivelaktiga anslut dem direkt till MCtopp. 
    • Är alla spolar innanför eller utanför slingan? 
      • Är en spole utanför slingan så ska den visa annorlunda värde jämför med de som är innanför. Sätt gärna klipparen så den gränslar slingan så du har en spole innanför och en spole utanför för att kontrollera att det är rätt. 
  • Alla spolar visar värde att de är utanför slingan när de är innanför(eller tvärtom!)
    • Skifta plats på slingans anslutningar på din BWF så blir det rätt. 
  • Olika störningar, tex när man kör klipparmotorn eller drivhjulen. 
    • Spolarna visar rätt värden när klipparmotorn inte går men när klipparmotorn går så blir det tokiga värden. 
      • Troligen på grund av snabbt roterande metallstycke i klippdisken. Man kan göra följande för att minimera störningar. 
      • Tvinna kablarna till spolarna, gör ofta mer än man tror. 
      • Dra kablarna i en jordfläta
      • Använda skärmad kabel
    • Spolarna visar rätt värden när drivhjulen inte går men när drivhjulen går så blir det tokiga värden. 
      • Troligen på grund av hög strömförbrukning i kablar närma signalkablar. Man kan göra följande för att minimera störningar. 
      • Tvinna kablarna till spolarna, gör ofta mer än man tror. 
      • Dra kablarna i en jordfläta
      • Använda skärmad kabel
      • Flytta signalkablarna
      • Flytta strömkablarna