Område 6 · lektion 30
Konstruktion och schema
Ett helt pass utan att bygga något. Det känns fel och är det inte: felen som kostar mest tid i ett projekt är konstruktionsfel, och de blir dyrare för varje timme de får ligga. Under det här passet ritar du systemet två gånger — först grovt, sedan i detalj — räknar strömmen och skriver materiallistan. Efteråt vet du om projektet går att bygga.
Mål
- Du kan rita ett blockschema som visar signalvägen genom systemet, och skilja det från ett kopplingsschema.
- Du kan göra en pinnbudget för Unon som tar hänsyn till att vissa pinnar redan är upptagna eller inte kan användas till allt.
- Du kan räkna en strömbudget för hela systemet och avgöra vad som ska ha egen matning.
- Du kan rita ett kopplingsschema som någon annan kan bygga efter utan att du står bredvid.
Genomgång
Två ritningar, i den här ordningen
Blockschemat svarar på vad som pratar med vad. Kopplingsschemat svarar på vilken tråd som går var. Att rita dem i fel ordning är det vanligaste sättet att bygga fel system snyggt.
| Blockschema | Kopplingsschema | |
|---|---|---|
| Visar | funktioner och signalvägar | komponenter, pinnar och ledningar |
| Rutorna är | "avståndsgivare", "beslut", "lucka" | HC-SR04, ATmega328P, servo |
| Ritas | först, på fem minuter | sedan, på en halvtimme |
| Svarar på frågan | Är det här ett mekatroniskt system? | Går det att koppla ihop? |
| Ändras | när idén ändras | när komponentvalet ändras |
Blockschemat
Fyra till sex rutor och pilar emellan. Signalen går vänster till höger, matningen ritas separat, och återkopplingar — ändlägen, lägesgivare — ritas som en pil tillbaka. Så här ser stommen ut i nästan varje slutprojekt:
Det här schemat är också ditt kvitto på att systemet är mekatroniskt. Saknas rutan längst till vänster har du ett reglage. Saknas pilen tillbaka har du ett system utan återkoppling, vilket är tillåtet men enklare — och det är precis en sådan sak som skiljer ett enkelt system från ett komplext i F4:s mening.
Pinnbudgeten: Unon har färre pinnar än du tror
En Uno har 14 digitala och 6 analoga anslutningar, men flera av dem är upptagna eller kan inte allt. Gör den här tabellen innan du ritar kopplingsschemat, så slipper du rita om det.
| Pinnar | Vad som gäller | Följd för dig |
|---|---|---|
| D0, D1 | Används av USB-porten och Serial | Använd dem inte. Sitter något där misslyckas uppladdningen |
| D2, D3 | Klarar avbrott | Spara dem till knappar och pulsgivare om du behöver reagera snabbt |
| D3, D5, D6, D9, D10, D11 | Klarar analogWrite, alltså PWM | Övriga digitala pinnar kan bara ge på eller av |
| D9, D10 | Servo.h tar över tidkretsen för de här två | Ett anslutet servobibliotek stänger av PWM på 9 och 10, även för andra saker |
| D13 | Sitter ihop med lysdioden på kortet | Går att använda, men blinkar med. Undvik för ingångar |
| A0–A5 | Analoga ingångar, och användbara som digitala | Din reserv när de digitala tagit slut |
| A4, A5 | Är också I2C, alltså SDA och SCL | Använder du en I2C-display är de två upptagna |
Den fällan som kostar mest Servo på pinne 9 och PWM till en motordrivare på pinne 10, i samma skiss. Motorn går för fullt eller inte alls, koden ser korrekt ut, och felet syns inte i något schema. Har du både servo och PWM: lägg PWM på 3, 5, 6 eller 11. Det står också i motordrivarguidens vanliga fel.
Strömbudgeten för hela systemet
I område 5 räknade du på en motor. Nu räknar du på allt samtidigt, och det är summan som avgör om systemet står stabilt eller startar om ibland. Två gränser gäller på Unon: 20 mA per pinne och 200 mA totalt genom chippet. En budget kan se ut så här:
| Del | Vila | Under drift | Matas från |
|---|---|---|---|
| Uno-kortet självt | 45 mA | 45 mA | USB eller 7–12 V på jacket |
| LDR i spänningsdelare, 10 kΩ | 0,5 mA | 0,5 mA | Kortets 5 V |
| HC-SR04 | 2 mA | 15 mA | Kortets 5 V |
| Lysdiod med förresistor | 0 | 15 mA | En pinne |
| Litet servo | 10 mA | 250 mA, upp mot 700 mA om det hindras | Egen matning |
| Summa utan servot | 48 mA | 76 mA | ryms i de 200 mA |
Slutsatsen står i sista kolumnen och är alltid densamma: allt som rör sig får egen matning, och den matningens minuspol kopplas ihop med kortets GND. Ett servo som verkar fungera på kortets 5 V fungerar tills det möter motstånd, och då startar Unon om mitt i rörelsen. Det felet ser ut som ett programfel och är det aldrig — se servoguiden.
Kopplingsschemat
Nu, och först nu, ritar du ledningarna. Kravet är enkelt att formulera och svårt att uppfylla: någon annan ska kunna bygga ditt system efter ritningen utan att fråga dig något. Det betyder att sju saker ska framgå:
- Varje komponent med sitt namn, inte bara sin form.
- Varje pinnummer utskrivet, på båda sidor av varje ledning.
- Alla motståndsvärden, med enhet.
- Varje spänningsnivå: var 5 V kommer ifrån, var 9 V kommer ifrån.
- Den gemensamma nollan som en utritad ledning, inte som något underförstått.
- Polariteten på det som har en: dioder, elektrolytkondensatorer, motorns matning.
- Datum och en versionsbeteckning, så att du vet vilken ritning som gällde när mätvärdet togs.
Symbolerna och läsriktningen står i kopplingsschemaguiden från område 1. Den gäller ordagrant här — skillnaden är bara att schemat nu är ditt eget och att ingen rättar det åt dig.
Materiallistan
En rad per komponent, med antal och den uppgift ur databladet som avgjorde valet. Sista kolumnen är den som skiljer en materiallista från en inköpslista, och den är dessutom halva svaret på en fråga jag ställer på redovisningen:
| Antal | Komponent | Vad som avgjorde valet |
|---|---|---|
| 1 | Servo SG90 | Behöver 0,031 N·m, servot lämnar cirka 0,15 N·m |
| 1 | LDR | Ska skilja dagsljus från skymning, inte mäta lux exakt |
| 1 | Motstånd 10 kΩ | Ger halva spänningen vid den ljusnivå tröskeln ligger på |
| 1 | Batterihållare 4 × AA | 6 V till servot, skilt från kortets 5 V |
| 2 | Mikrobrytare | Ändlägen, så att servot kan stoppas om luckan kärvar |
Koden börjar i schemat
Det sista du gör under ritpasset är att skriva av pinnummeren ur ditt eget schema, som konstanter. Då finns pinnbudgeten på ett andra ställe, i kod, och du upptäcker en krock innan du kopplat något. Skriv av mönstret och byt ut namnen mot dina:
// Slutprojekt – pinnar enligt kopplingsschema rev. B, 2027-04-22
// Alla nummer hämtade ur ritningen, inga gissningar.
#include <Servo.h> // tar över PWM på pinne 9 och 10
const int LDR_PIN = A0; // spänningsdelare med 10 kohm mot GND
const int ANDLAGE_PIN = 2; // mikrobrytare, INPUT_PULLUP, sluter mot GND
const int LARM_PIN = 5; // lysdiod med 220 ohm. PWM-pinne, kan dimras
const int SERVO_PIN = 9; // servo, egen 6 V-matning, gemensam nolla
const int TROSKEL_MORKT = 400; // råvärde. Kalibreras, se område 4
const int TROSKEL_LJUST = 480; // mellanrum mot ovanstående, mot fladder
Servo lucka;
void setup() {
pinMode(ANDLAGE_PIN, INPUT_PULLUP);
pinMode(LARM_PIN, OUTPUT);
lucka.attach(SERVO_PIN);
Serial.begin(9600);
}
Fyra saker i den koden kommer direkt ur ritningen och ingen annanstans ifrån: pinnumren, motståndsvärdena i kommentarerna, noteringen om egen matning, och revisionsbeteckningen på första raden. Ändrar du schemat ändrar du de här raderna samma dag — annars har du två sanningar, och det är den i koden som gäller medan den i pärmen är den du visar upp.
I industrin och i vardagen
Industrin: ritningen ska hålla i tjugo år
En produktionsmaskin levereras med en elpärm där varje ledning har ett nummer, varje plint en beteckning som X2:14, och varje ritning ett ritningsnummer med revisionsbokstav. När en underhållstekniker står vid maskinen klockan tre på natten 2041 och något inte fungerar, är det den pärmen som avgör om felet tar tjugo minuter eller ett skift. Därför är revisionshanteringen inte byråkrati: ändras en ledning under driftsättningen ska ritningen ändras samma dag, med ny revisionsbokstav, annars felsöker någon efter en ritning som beskriver en maskin som inte längre finns.
Vardagen: monteringsanvisningen som inte innehåller ett enda ord
En hyllas monteringsanvisning har inga meningar alls — bara numrerade steg, en lista med 14 skruvar av tre sorter ritade i naturlig storlek, och bilder på vad som ska sitta var. Den fungerar i trettio länder just för att den säger allt med numrering och mått. Kravet på ritningen är exakt detsamma som i elpärmen och i ditt kopplingsschema: den som följer den ska komma rätt utan att fråga den som ritade. Skillnaden är att hyllan har ett steg som heter "vänd hyllan rätt" — ett fel som kostar fem minuter, mot elpärmens fel som kostar ett skift.
Prova själv
- Rita blockschemat på fem minuter, för hand. Fyra till sex rutor, pilar med vad som skickas, matningen separat. Blir det fler än sju rutor är projektet troligen för stort.
- Peka ut de tre delarna i ditt eget blockschema. Mekanisk struktur, elektroteknik och styrteknik. Saknas någon är det nu du vill veta det, inte den 20 maj.
- Gör pinnbudgeten som en tabell. En rad per pinne du tänkt använda, med vad som sitter där. Kontrollera mot tabellen ovan att ingen pinne krockar med sig själv.
- Räkna strömbudgeten. Summera allt som matas från kortet, i vila och under drift. Ligger driftsumman över 200 mA, eller något enskilt över 20 mA, ska den delen ha egen matning.
- Rita kopplingsschemat i detalj, med de sju punkterna i listan ovan. Sätt datum och revisionsbokstav på det.
- Låt någon annan läsa det. Byt schema med den du sitter bredvid och fråga: kan du bygga det här? Varje fråga den andra behöver ställa är en sak som saknas på ritningen.
- Skriv materiallistan med kolumnen "vad som avgjorde valet". Har du inget att skriva i den kolumnen har du inte valt komponenten, du har hittat den.
- Skriv konstantblocket i koden efter ditt schema, ladda upp den tomma skissen och kontrollera att den kompilerar. Det är ditt första bevis på att pinnbudgeten går ihop.
Kontrollfrågor
Varför räcker det inte att rita kopplingsschemat, om det ändå innehåller mer information än blockschemat?
Därför att de svarar på olika frågor. Kopplingsschemat visar att det går att koppla ihop, men det säger inte om det du kopplat ihop är ett mekatroniskt system, eller var beslutet fattas. En felaktig konstruktion kan ritas till ett perfekt kopplingsschema. Blockschemat tar fem minuter och fångar just den sortens fel — det är den billigaste kontrollen i hela projektet.
Du har ett servo på pinne 9, en motordrivare som behöver PWM, och en I2C-display. Vilka pinnar är kvar till en knapp och två lysdioder?
Servot tar 9 och stänger samtidigt av PWM på 10. Displayen tar A4 och A5. PWM till drivaren måste alltså ligga på 3, 5, 6 eller 11 — säg 3, plus en eller två riktningspinnar, säg 4 och 7. Kvar till knapp och lysdioder finns 2, 8, 11, 12, 13 och A0–A3. Gott om plats, men bara för att du räknade först: hade PWM hamnat på 10 hade motorn inte gått, och felet hade inte synts någonstans i schemat.
Ditt system drar 48 mA i vila och 76 mA under drift, allt från kortets 5 V. Servot ligger utanför den summan. Varför står det ändå med i strömbudgeten?
Därför att budgeten ska visa hela systemet, inte bara det kortet orkar. Servots 250 mA under rörelse och närmare 700 mA i stopp avgör vilket batteri du behöver, hur länge det räcker och hur grov ledningen till det ska vara. Att posten står med och är hänvisad till egen matning är just det som visar att du räknat — en budget där servot saknas ser identisk ut med en budget där någon glömt det.
Varför ska den gemensamma nollan ritas ut som en ledning, när den är självklar?
Därför att den är den vanligaste felkällan i system med två matningar, och just för att den känns självklar är den den som glöms. Ett system utan gemensam nolla beter sig slumpmässigt, blir bättre när du håller i sladden, och ger ett fel som ser ut som brus, glappkontakt eller programfel om vartannat. På ritningen är den en linje som tar tio sekunder att dra. I felsökningen är den en halv kväll.
Vad är revisionsbeteckningen på ett skolschema bra för?
Att koppla ihop ett mätvärde med den koppling det mättes på. Du kommer att ändra schemat två eller tre gånger under maj. Står det "rev. B, 20 maj" i både anteckningen och koden vet du efteråt vilken version som gav 4,1 V och vilken som gav 3,2. Utan beteckningen har du en siffra utan koppling till någon verklighet, och den kan du inte använda i dokumentationen.
Vanliga fel
- Schemat ritades efter bygget. Det syns på att det stämmer perfekt med den trassliga kopplingen, inklusive omvägarna. Ett schema som beskriver en byggd koppling är en teckning, inte en ritning, och det har inte styrt något arbete.
- Pinnummer saknas i ena änden. "Från servot till kortet" är inte en ledning. Numret ska stå på båda sidor, annars gissar den som bygger.
- Servot eller motorn matas från kortets 5 V. Fungerar obelastat, faller ihop under last. Egen matning och gemensam nolla, varje gång.
- PWM lagd på 9 eller 10 med servobiblioteket inkopplat. Full fart eller ingen fart, oavsett vad koden säger.
- Motståndsvärden står inte i schemat. Du minns dem i april och inte i juni, och den som läser dokumentationen kan inte bygga om systemet.
- Materiallistan är en inköpslista. Utan kolumnen som säger varför komponenten valdes går det inte att skilja ett val från ett fynd i lådan.
- Blockschemat har tolv rutor. Då är det inget blockschema, utan ett kopplingsschema med kvadrater. Slå ihop till funktioner: en ruta är en uppgift, inte en komponent.
- Ritningen ändrades inte när kopplingen ändrades. Efter två sådana gånger vet ingen vad som gäller, och felsökningen sker mot en karta över ett system som inte finns.
Vidare
Konstantblocket ovan använder const int och
INPUT_PULLUP, som båda står i
språkreferensens kapitel om typer
respektive i
guiden om digital ingång.
Ska ditt system minnas lägen är
Tillstånd
nästa sida att läsa, och tidsgränsen som stoppar en rörelse som inte blev av
bygger på Tid.
Nästa två pass är bygge. Kraven och arbetsgången står på bygge 5:s sida. Går något sönder på vägen — och det gör det — är Systematisk felsökning guiden till lektion 33.
Tillbaka till område 6 eller till kursens material.