Arduino - meerkanaals oscilloscoop (Poor Man's oscilloscoop) (1 / 1 stap)

Stap 1: De Code


Dan de software, er is niets nieuws in de zetting zulks opwaarts. Voor uw gemak ben ik herhalen de stappen vermeld in RuiSantos' instructable.

1)
Download verwerking. Verwerking is een programmeeromgeving die eruit ziet en voelt identiek aan de Arduino programmeer omgeving. Het komt ook aan de zelfde prijs, wat betekent dat het is gratis. Klik hier om te downloaden. Instellen als u instellen van de Arduino software. Het loopt als de Arduino IDE.
Verwerking kan worden gebruikt voor afbeeldingen, lijnen of objecten weergeven en interactief mee werken. Dit is mijn eerste ervaring met het programma.

2)
Afhankelijk van hoeveel kanalen willen u hebben, een van de "Arduino sketches" in je Arduino hieronder uploaden. De code voor het verzenden en ontvangen van de gegevens was gebaseerd op de code in dit grote boek hoofdstuk waarin wordt uitgelegd hoe voor het verzenden van meerdere tekstvelden van een Arduino op de computer en verwerken met verwerking.

3)
U vervolgens nemen de respectieve "Processing Schets" van onderaf en kopieer het naar Processing

4)
Het "pad" in de laatste regel van de code omzetten in een pad van uw keuze.

5)
Stormloop op ter verwerking.

6)
Zorg ervoor dat uw signalen niet hoger is dan 5V voordat u sluit u aan op:
Kanaal1 = > Analoog pin0
Channel2 = > Analoog pin1
Channel3 = > Analoog pin2

Opmerkingen:

  • De verwerking schetsen seriële poort 0 gebruiken als standaard. Hebt om deze waarde als u een andere seriële poort gebruiken.
  • Ik gedocumenteerd elke stap in het programma met tal van opmerkingen. Dus moet de code "zelf uitleggen".
  • Experimenteel kwam ik erachter dat voor sommige configuraties die de gegevens niet in real-time als gevolg van verschillende redenen zijn met elkaar verbonden weergegeven mogelijk:
    • De vertraging die is ingesteld in het programma van de Arduino is niet groot genoeg. = > Too veel gegevens worden verzonden. = > De verwerkingstijd worden bij elkaar opgeteld. = > Gegevens met vertraging wordt weergegeven. Om te testen voor vertragingen schakelde ik manueel de voeding die was verbonden met de analoge ingangen van mijn Arduino af en aan met inachtneming van de reactie van de spanning weergegeven door verwerking. Ik deed dit voor een langere periode van tijd. Als het antwoord bleef onmiddellijke bleef ik tevreden.
    • Als u zoom in met "+" u minder gegevens weergeven. Dit heeft een direct effect op het potentieel voor vertragingen, omdat er minder verwerkingstijd nodig is.
    • Het venster is te groot. = > Too veel x-waarden moeten worden verschoven. = > Too veel tijd die nodig is voor de berekeningen. = > ik koos voor een veel kleinere window-grootte dan de grootte van mijn scherm om aan te pakken dit effect.

Geniet van de meerdere kanalen op uw Poor-Man's-oscilloscoop en laat me weten als je toevallig om te komen met eventuele verbeteringen.

De code van de 2-kanaals van Arduino:
/ * CommaDelimitedOutput schets * /
#define ANALOG_IN_Ch1 0
#define ANALOG_IN_Ch2 1

VOID Setup
{
Serial.begin(9600);
}

void loop
{
int val1 = analogRead(ANALOG_IN_Ch1); / * Leest van waarden van analoge Pin0 = Kanaal1 * /
int val2 = analogRead (ANALOG_IN_Ch2); / * Leest van waarden van analoge Pin1 = Channel2 * /

Serial.Print('H'); / * Unieke kop te identificeren begin van bericht * /
Serial.Print(",");
Serial.Print(val1,DEC);
Serial.Print(",");
Serial.Print(val2,DEC);
Serial.Print(",");  / * Merk op dat een komma na het laatste veld is verzonden * /
Serial.println();  / * Stuur een cr/lf * /
delay(50); Dit mogelijk sneller te zijn dan 50 MS
}

Arduino 3-kanaals code:
/ * CommaDelimitedOutput schets * /
#define ANALOG_IN_Ch1 0
#define ANALOG_IN_Ch2 1
#define ANALOG_IN_Ch3 2

VOID Setup
{
Serial.begin(9600);
}

void loop
{
int val1 = analogRead(ANALOG_IN_Ch1); / * Leest van waarden van analoge Pin0 = Kanaal1 * /
int val2 = analogRead (ANALOG_IN_Ch2); / * Leest van waarden van analoge Pin1 = Channel2 * /
int val3 = analogRead (ANALOG_IN_Ch3); / * Leest van waarden van analoge Pin2 = Channel3 * /

Serial.Print('H'); / * Unieke kop te identificeren begin van bericht * /
Serial.Print(",");
Serial.Print(val1,DEC);
Serial.Print(",");
Serial.Print(val2,DEC);
Serial.Print(",");
Serial.Print(val3,DEC);
Serial.Print(",");  / * Merk op dat een komma na het laatste veld is verzonden * /
Serial.println();  / * Stuur een cr/lf * /
delay(50);
}

2-kanaals Code verwerken:
/*
* Oscilloscoop
* Geeft een visuele weergave van drie analoge pinnen in realtime.
*
* Deze Software breidt het kanaal bedrag van een vorige versie.
* De vorige versie was een project dat deel uitmaakt van Accrochages
* Zie http://accrochages.drone.ws
*
* De auteur van deze aangepaste software heeft geen verband met Accrochages.
* Hij dankt hen voor de grote sjabloon en de inspiratie om deze software te schrijven.
*
* De volgende verklaring was onderdeel van de oorspronkelijke software.
* Dit is voor uw gegevens.
*
* (c) 2008 Sofian Audry (info
*
* Dit programma is vrije software: je kunt het herdistribueren en/of wijzigen
* het onder de voorwaarden van de GNU General Public License zoals gepubliceerd door
* de Free Software Foundation, hetzij versie 3 van de licentie, of
* (naar uw keuze) een latere versie.
*
* Deze software wordt verspreid in de hoop dat het bruikbaar,
* maar zonder enige garantie; zelfs zonder de impliciete garantie van
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Zie de
* De GNU General Public License voor meer details.
*
* U moet hebt ontvangen een kopie van de GNU General Public License
* samen met dit programma. Zo niet, zie < http://www.gnu.org/licenses/>.
*/
importeren van processing.serial.*;

Seriële myPort; / * Object maakt van seriële klasse * /
char HEADER = "H"; / * karakter te identificeren van het begin van een bericht * /
korte LF = 10; / * ASCII regelinvoer * /
korte portIndex = 0; / * bepaalt de USB poort gebruikt * /
int [] val = {-1, -1}; / * Variabele wordt gebruikt voor getY functie, 2 posities voor 2 kanalen * /
int [] valuesCh1; / * De volgende drie variabelen zal de gegevens van het venster in het geheugen houden zodat ze kunnen worden geduwd en weergegeven * /
int [] valuesCh2;
float zoom; / * Define "zoom" als drijvende variabele * /

VOID Setup
{
size(1014, 690); / * Opent een venster met specifieke grootte, maximale grootte van het scherm van mijn laptop, vertragingen kunnen optreden * /
grootte (600, 400); / * kleiner scherm = > minder om te berekenen = > geen vertraging problemen * /
myPort = nieuwe Serial (dit, Serial.list() [portIndex], 9600); / * Open de poort waarop de Raad van bestuur is aangesloten en gebruik van dezelfde snelheid (9600 bps) * /
valuesCh1 = nieuwe int [breedte]; / * Define array met zoveel elementen als x-pixel in venster, gebruikt voor het uitzetten van gegevens van Kanaal1 * /
valuesCh2 = nieuwe int [breedte]; / *... van Channel2 * /
Zoom = 1.0f; / * Start met 1 x zoomfactor * /
Smooth(); / * Tekenen van afbeeldingen met vloeiende randen * /
}

/ * Deze functie converteert een gegevenswaarde kanaal naar pixels getoond van
* top van grafiek (dat is de 0 positie)
* deze functie retourneert een integer-waarde * /
int getY(int val)
{
retourneren (int) (hoogte - val/1023.0f * (hoogte - 1));
}

/ * Functie die leest de seriële tekenreeksgegevens die zijn verzonden door arduino
* Steekt een matrix met de drie waarden voor de arduino
* Functie heet in draw functie * /
int [] getData()
{
int [] ChValues = {-1, -1}; / * Define array voor deze functie * /
Bericht van het koord = myPort.readStringUntil(LF); / * Lees in de tekenreeks van de seriële data verzonden door arduino * /
Als (bericht! = null) / * doe dit alleen als een volledige geldige bericht ontving * /
{
String [] gegevens = message.split(","); / * Het bericht kommagescheiden gesplitst zijn segmenten * /
if(data[0].charAt(0) == HEADER) / * Check voor koptekst teken in het eerste veld, altijd waar voor volledige bericht * /
{
voor (int i = 1; ik < data.length-1; i ++) / * overslaan van de header en beëindigen van cr- en lf = > alleen kijken naar de drie gegevenspunten * /
{
ChValues [i-1] = Integer.parseInt(data[i]); / * Schrijven gegevens kanaal in array, ik verschoven van gegevens aan array door 1 als gevolg van koptekst * /
}
}
}
Return ChValues; / * Rendement array ChValues die kanaal gegevens bevat * /
}

/ * Deze functie duwt alle de gegevenspunten van het venster wordt één positie naar aanleiding van de links, dan voegt het gegevenspunt dat was gewoon lezen * /
VOID pushValue (int [] waarde)
{
for (int i = 0; ik < breedte-1; i ++)
{
valuesCh1 [i] = valuesCh1 [i + 1]; / * Zet het gegevenspunt door op positie * /
valuesCh2 [i] = valuesCh2 [i + 1];
}

valuesCh1 [breedte-1] = waarde [0]; / * Gegevenspunt toevoegen * /
valuesCh2 [breedte-1] = waarde [1];
}

/ * Deze functie tekent de gegevens in het venster * /
VOID drawLines()
{
int. displayWidth = (int) (breedte / zoom); / * Breedte van venster, gelet op de x-wijziging als een zoom is ingesteld berekent * /
int k = valuesCh1.length - displayWidth; / * Dit positie berekent op waarin de gegevenspunten worden weergegeven * /
int x0 = 0; / * x zeer de waarde links van het venster (= 0) is toegewezen aan x0 en gebruikt voor alle kanalen * /
int ya0 = getY(valuesCh1[k]); / * y-waarde van het laatste punt dat getoond wordt toegewezen aan ya0 voor Kanaal1 * /
int yb0 = getY(valuesCh2[k]); / * y-waarde van het laatste punt dat getoond wordt toegewezen aan yb0 voor channel2 * /
voor (int i = 1; ik < displayWidth-1; i ++) / * lus die van het punt k tot de zeer rechterkant van venster loopt * /
{
k ++; / * Verhogen k voor volgende gegevenspunt * /
int. x1 = (int) (ik * (breedte-1) / (displayWidth-1)); / * Berekenen volgende x waarde * /
int Yg1 = getY(valuesCh1[k]); / * Krijg volgende y-waarde voor Kanaal1 * /
int yb1 = getY(valuesCh2[k]); / * Krijg volgende y-waarde voor channel2 * /
strokeWeight(2);  / * Dikkere lijnen tekenen * /
beroerte (255, 0, 0); / * Tekenen van een rode lijn voor Kanaal1 * /
lijn (x0, ya0, x1, Yg1); / * Plot een lijnsegment voor Kanaal1 * /
beroerte (0, 0, 255); / * Een groene streep voor channel2 * /
lijn (x0, yb0, x1, yb1); / * Plot een lijnsegment voor channel2 * /
x0 = x1; / * Shift x-waarde voor de berekening van de volgende lijnsegmenten * /
ya0 = Yg1; / * Verschuiving van de y-waarde voor Kanaal1 voor het berekenen van de volgende lijnsegmenten * /
yb0 = yb1; / * Verschuiving van de y-waarde voor channel2 voor het berekenen van de volgende lijnsegmenten * /
}
}

/ * Deze functie tekent rasterlijnen in het venster
* Ik verdeelde de lijnen zodat zij stappen van 10% en 20% in 2 verschillende kleuren vertegenwoordigen
* Voor signalen van 5V max, dat is 0,5 & 1.0V stappen * /
VOID drawGrid()
{
beroerte (150, 150, 0);
lijn (0, hoogte/5, breedte, hoogte/5);
lijn (0, hoogte * 2/5, breedte, hoogte * 2/5);
lijn (0, hoogte * 3/5, breedte, hoogte * 3/5);
lijn (0, hoogte * 4/5, breedte, hoogte * 4/5);
beroerte (150, 150, 150);
lijn (0, hoogte/10, breedte, hoogte/10);
lijn (0, hoogte * 3/10, breedte, hoogte * 3/10);
lijn (0, hoogte * 5/10, breedte, hoogte * 5/10);
lijn (0, hoogte * 7/10, breedte, hoogte * 7/10);
lijn (0, hoogte * 9/10, breedte, hoogte * 9/10);
}

/ * Deze functie kunt inzoomen op de x-as van de gegevens
* Het draait op de achtergrond en aankondigingen wanneer de juiste toets is ingedrukt
* Inzoomen met dringende "+"
* Uitzoomen met persen "-" * /
VOID keyReleased()
{
schakelaar (sleutel)
{
geval '+':
zoom * = 2.0f;
println(zoom);
Als ((int) (breedte / zoom) < = 1)
zoom / = 2.0f;
breken;
geval '-':
zoom / = 2.0f;
Als (zoom < 1.0f)
zoom * = 2.0f;
breken;
}
}

/ * Dit is de belangrijkste functie die de andere functies aanroept
* Deze functie draait continu * /
VOID draw()
{
Background(1); / * Stelt de achtergrond van het venster * /
drawGrid(); / * Trekt het raster in het venster * /
Val = getData(); / * Leest de gegevens van de drie kanalen zoals verzonden door de arduino in een array * /
Als (val [0]! = -1) / * als gegevens in de eerste kanaal, vervolgens verrichten functie * /
{
pushValue(val); / * Gegevens één positie omlaag duwt en voegt één nieuwe gegevenspunt * /
}
drawLines(); / * De volgende gegevensset toevoegen aan het venster * /
Als (mousePressed) / * actie uitvoeren als de muisknop wordt ingedrukt * /
{
Save("/YourPathHere/OsciData1.png");  / * Screenshot van venster gegevens opslaan, maar pas op afbeelding worden overschreven met de tweede muisklik * /
}
}

3-kanaals Code verwerken:

/*
* Oscilloscoop
* Geeft een visuele weergave van drie analoge pinnen in realtime.
*
* Deze Software breidt het kanaal bedrag van een vorige versie.
* De vorige versie was een project dat deel uitmaakt van Accrochages
* Zie http://accrochages.drone.ws
*
* De auteur van deze aangepaste software heeft geen verband met Accrochages.
* Hij dankt hen voor de grote sjabloon en de inspiratie om deze software te schrijven.
*
* De volgende verklaring was onderdeel van de oorspronkelijke software.
* Dit is voor uw gegevens.
*
* (c) 2008 Sofian Audry (info
*
* Dit programma is vrije software: je kunt het herdistribueren en/of wijzigen
* het onder de voorwaarden van de GNU General Public License zoals gepubliceerd door
* de Free Software Foundation, hetzij versie 3 van de licentie, of
* (naar uw keuze) een latere versie.
*
* Deze software wordt verspreid in de hoop dat het bruikbaar,
* maar zonder enige garantie; zelfs zonder de impliciete garantie van
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Zie de
* De GNU General Public License voor meer details.
*
* U moet hebt ontvangen een kopie van de GNU General Public License
* samen met dit programma. Zo niet, zie < http://www.gnu.org/licenses/>.
*/
importeren van processing.serial.*;

Seriële myPort; / * Object maakt van seriële klasse * /
char HEADER = "H"; / * karakter te identificeren van het begin van een bericht * /
korte LF = 10; / * ASCII regelinvoer * /
korte portIndex = 0; / * bepaalt de USB poort gebruikt * /
int [] val = {-1, -1, -1}; / * Variabele wordt gebruikt voor getY functie, 3 posities voor 3channels * /
int [] valuesCh1; / * De volgende drie variabelen zal de gegevens van het venster in het geheugen houden zodat ze kunnen worden geduwd en weergegeven * /
int [] valuesCh2;
int [] valuesCh3;
float zoom; / * Define "zoom" als drijvende variabele * /

VOID Setup
{
size(1014, 690); / * Opent een venster met specifieke grootte, maximale grootte van het scherm van mijn laptop, problemen vertragen de helft door raam * /
grootte (600, 400); / * kleiner scherm = > minder om te berekenen = > geen vertraging problemen * /
myPort = nieuwe Serial (dit, Serial.list() [portIndex], 9600); / * Open de poort waarop de Raad van bestuur is aangesloten en gebruik van dezelfde snelheid (9600 bps) * /
valuesCh1 = nieuwe int [breedte]; / * Define array met zoveel elementen als x-pixel in venster, gebruikt voor het uitzetten van gegevens van Kanaal1 * /
valuesCh2 = nieuwe int [breedte]; / *... van Channel2 * /
valuesCh3 = nieuwe int [breedte]; / *... van Channel3 * /
Zoom = 1.0f; / * Start met 1 x zoomfactor * /
Smooth(); / * Tekenen van afbeeldingen met vloeiende randen * /
}

/ * Deze functie converteert een gegevenswaarde kanaal naar pixels getoond van
* top van grafiek (dat is de 0 positie)
* deze functie retourneert een integer-waarde * /
int getY(int val)
{
retourneren (int) (hoogte - val/1023.0f * (hoogte - 1));
}

/ * Functie die leest de seriële tekenreeksgegevens die zijn verzonden door arduino
* Steekt een matrix met de drie waarden voor de arduino
* Functie heet in draw functie * /
int [] getData()
{
int [] ChValues = {-1, -1, -1}; / * Define array voor deze functie * /
Bericht van het koord = myPort.readStringUntil(LF); / * Lees in de tekenreeks van de seriële data verzonden door arduino * /
Als (bericht! = null) / * doe dit alleen als een volledige geldige bericht ontving * /
{
String [] gegevens = message.split(","); / * Het bericht kommagescheiden gesplitst zijn segmenten * /
if(data[0].charAt(0) == HEADER) / * Check voor koptekst teken in het eerste veld, altijd waar voor volledige bericht * /
{
voor (int i = 1; ik < data.length-1; i ++) / * overslaan van de header en beëindigen van cr- en lf = > alleen kijken naar de drie gegevenspunten * /
{
ChValues [i-1] = Integer.parseInt(data[i]); / * Schrijven gegevens kanaal in array, ik verschoven van gegevens aan array door 1 als gevolg van koptekst * /
}
}
}
Return ChValues; / * Rendement array ChValues die kanaal gegevens bevat * /
}

/ * Deze functie duwt alle de gegevenspunten van het venster wordt één positie naar aanleiding van de links, dan voegt het gegevenspunt dat was gewoon lezen * /
VOID pushValue (int [] waarde)
{
for (int i = 0; ik < breedte-1; i ++)
{
valuesCh1 [i] = valuesCh1 [i + 1]; / * Zet het gegevenspunt door op positie * /
valuesCh2 [i] = valuesCh2 [i + 1];
valuesCh3 [i] = valuesCh3 [i + 1];
}

valuesCh1 [breedte-1] = waarde [0]; / * Gegevenspunt toevoegen * /
valuesCh2 [breedte-1] = waarde [1];
valuesCh3 [breedte-1] = waarde [2];
}

/ * Deze functie tekent de gegevens in het venster * /
VOID drawLines()
{
int. displayWidth = (int) (breedte / zoom); / * Breedte van venster, gelet op de x-wijziging als een zoom is ingesteld berekent * /
int k = valuesCh1.length - displayWidth; / * Dit positie berekent op waarin de gegevenspunten worden weergegeven * /
int x0 = 0; / * x zeer de waarde links van het venster (= 0) is toegewezen aan x0 en gebruikt voor alle kanalen * /
int ya0 = getY(valuesCh1[k]); / * y-waarde van het laatste punt dat getoond wordt toegewezen aan ya0 voor Kanaal1 * /
int yb0 = getY(valuesCh2[k]); / * y-waarde van het laatste punt dat getoond wordt toegewezen aan yb0 voor channel2 * /
int yc0 = getY(valuesCh3[k]); / * y-waarde van het laatste punt dat getoond wordt toegewezen aan yc0 voor channel3 * /
voor (int i = 1; ik < displayWidth-1; i ++) / * lus die van het punt k tot de zeer rechterkant van venster loopt * /
{
k ++; / * Verhogen k voor volgende gegevenspunt * /
int. x1 = (int) (ik * (breedte-1) / (displayWidth-1)); / * Berekenen volgende x waarde * /
int Yg1 = getY(valuesCh1[k]); / * Krijg volgende y-waarde voor Kanaal1 * /
int yb1 = getY(valuesCh2[k]); / * Krijg volgende y-waarde voor channel2 * /
int yc1 = getY(valuesCh3[k]); / * Krijg volgende y-waarde voor channel3 * /
strokeWeight(2);  / * Dikkere lijnen tekenen * /
beroerte (255, 0, 0); / * Tekenen van een rode lijn voor Kanaal1 * /
lijn (x0, ya0, x1, Yg1); / * Plot een lijnsegment voor Kanaal1 * /
beroerte (0, 0, 255); / * Een groene streep voor channel2 * /
lijn (x0, yb0, x1, yb1); / * Plot een lijnsegment voor channel2 * /
beroerte (0, 0, 255); / * Een blauwe streep voor channel3 * /
lijn (x0, yc0, x1, yc1); / * Plot een lijnsegment voor channel3 * /
x0 = x1; / * Shift x-waarde voor de berekening van de volgende lijnsegmenten * /
ya0 = Yg1; / * Verschuiving van de y-waarde voor Kanaal1 voor het berekenen van de volgende lijnsegmenten * /
yb0 = yb1; / * Verschuiving van de y-waarde voor channel2 voor het berekenen van de volgende lijnsegmenten * /
yc0 = yc1; / * Verschuiving van de y-waarde voor channel3 voor het berekenen van de volgende lijnsegmenten * /
}
}

/ * Deze functie tekent rasterlijnen in het venster
* Ik verdeelde de lijnen zodat zij stappen van 10% en 20% in 2 verschillende kleuren vertegenwoordigen
* Voor signalen van 5V max, dat is 0,5 & 1.0V stappen * /
VOID drawGrid()
{
beroerte (150, 150, 0);
lijn (0, hoogte/5, breedte, hoogte/5);
lijn (0, hoogte * 2/5, breedte, hoogte * 2/5);
lijn (0, hoogte * 3/5, breedte, hoogte * 3/5);
lijn (0, hoogte * 4/5, breedte, hoogte * 4/5);
beroerte (150, 150, 150);
lijn (0, hoogte/10, breedte, hoogte/10);
lijn (0, hoogte * 3/10, breedte, hoogte * 3/10);
lijn (0, hoogte * 5/10, breedte, hoogte * 5/10);
lijn (0, hoogte * 7/10, breedte, hoogte * 7/10);
lijn (0, hoogte * 9/10, breedte, hoogte * 9/10);
}

/ * Deze functie kunt inzoomen op de x-as van de gegevens
* Het draait op de achtergrond en aankondigingen wanneer de juiste toets is ingedrukt
* Inzoomen met dringende "+"
* Uitzoomen met persen "-" * /
VOID keyReleased()
{
schakelaar (sleutel)
{
geval '+':
zoom * = 2.0f;
println(zoom);
Als ((int) (breedte / zoom) < = 1)
zoom / = 2.0f;
breken;
geval '-':
zoom / = 2.0f;
Als (zoom < 1.0f)
zoom * = 2.0f;
breken;
}
}

/ * Dit is de belangrijkste functie die de andere functies aanroept
* Deze functie draait continu * /
VOID draw()
{
Background(1); / * Stelt de achtergrond van het venster * /
drawGrid(); / * Trekt het raster in het venster * /
Val = getData(); / * Leest de gegevens van de drie kanalen zoals verzonden door de arduino in een array * /
Als (val [0]! = -1) / * als gegevens in de eerste kanaal, vervolgens verrichten functie * /
{
pushValue(val); / * Gegevens één positie omlaag duwt en voegt één nieuwe gegevenspunt * /
}
drawLines(); / * De volgende gegevensset toevoegen aan het venster * /
Als (mousePressed) / * actie uitvoeren als de muisknop wordt ingedrukt * /
{
Save("/YourPathHere/OsciData1.png");  / * Screenshot van venster gegevens opslaan, maar pas op afbeelding worden overschreven met de tweede muisklik * /
}
}

Gerelateerde Artikelen

Poor Man's 3D-Printer

Poor Man's 3D-Printer

Mijn doel was om het bouwen van een goedkope en goedkope 3D-Printer voor minder dan 100 Dollar/EuroWat zijn de kenmerken van de Poor Man's 3D Printer?-Fused deposition modeling ABS/PLA-Warmte bed-gebruik van opensource-firmware, gewijzigde versie van
Q & D-Poor man's-Skinner-Sadist-gevaar spel

Q & D-Poor man's-Skinner-Sadist-gevaar spel

In dit instructable leert u hoe om een Q & D-Poor man's-Skinner-Sadist-gevaar spel te maken.Eerst uitgeschakeld, de disclaimer: ik ben niet verantwoordelijk voor wat je ook doet. Je moet weten dat met een grote macht komt... bla-bla-bla. Gewoon voorz
How To Make: Poor Man's Gumbo

How To Make: Poor Man's Gumbo

Als een native Louisianian vrouw is leren koken een goede gumbo een verplichte rite de passage, net als het leren lopen en binden van uw schoenen. Gumbo (uitgesproken als Gum - bo) is een inheems in Louisiana schotel die eerste gestarte voorkomt in d
Poor Man's Fret baan

Poor Man's Fret baan

In dit instructable zal ik proberen om een naar beneden en vuile proces voor opnieuw piekeren een gitaar en het invullen van het gutsen aan boord van de fret.DISCLAIMER: ik nemen geen verantwoordelijkheid voor schade aan uw instrument. De naam van he
Poor Man's Cell Phone IR-Filter

Poor Man's Cell Phone IR-Filter

IR fotografie is leuk. Krijgen van een juiste IR-filter (technisch een zichtbaar licht filter maar wat dan ook) voor uw camera kan echter een pijn, vooral als u slechts een punt en schieten, of in mijn geval, een mobiele telefoon. Steken trouw aan mi
Poor Man's Console van het gokken van de draagbare RetroPie

Poor Man's Console van het gokken van de draagbare RetroPie

Ik hou van videospelletjes. Ik graag willen kunnen om ze overal die ik ga ze af te spelen. Maar, ik heb een probleem. Ik heb niet te veel geld te besteden op video games. Dat is waarom ik nam een van de dingen die ik hou (video games), maakte het dra
De Poor Man's verstelbaar Bed apparaat

De Poor Man's verstelbaar Bed apparaat

dit is mijn Instructable over hoe te maken van "De Poor Man's verstelbaar Bed apparaat" voor een twin size bed. (Updated, zie vorige stap)(Opmerkingen gewaardeerd!) : DMaterialen die je nodig hebt:1. twee multiplex platen aprox. (35 "x 31&q
Pizzabox Cyclorama - The Poor man's Studio

Pizzabox Cyclorama - The Poor man's Studio

Het klikken van ontzagwekkende fotografen is wat die elke maker wil, met name voor hun product.Het beste te klikken awesome foto's gebruikt een cyclorama. Dus wat is een cyclorama?Een cyclorama is een groot gordijn of muur, vaak holle, gepositioneerd
Poor Man's auto Laptop staan

Poor Man's auto Laptop staan

eerste, een woord van voorzichtigheid.  Gebruik uw computer niet terwijl het drijven!  Dit apparaat hecht aan het stuurwiel.  Ik noem het de Poor Man's auto Laptop staan.Stap 1: Materialen en gereedschappen Om te beginnen zullen we 5 tot en met 6 voe
Poor Man's microfoon Shock Mount

Poor Man's microfoon Shock Mount

ik weet wat je gaat zeggen... "Er zijn al vele gemakkelijke manieren om shock mounts voor goedkoop." En ja, er zijn. Echter, ik nam het een stap verder, en ontworpen een schok-mount dat A) kan gemakkelijk worden gebruikt met een statief Bureau,
Hoe uw kamer Geluiddichte? Poor Mans echoloze kamer.

Hoe uw kamer Geluiddichte? Poor Mans echoloze kamer.

H ello iedereen, deze tijd m gaat aan te tonen u super geluidsgeïsoleerd je kamer, of u in een appartement gebouw, dorpshuis of kelder woont. Deze tutorial is geïnspireerd door NASA's geluidsexperiment kamers.Hier is hoe ik klinken het bewijs van de
Poor Man's centrale stofzuiger

Poor Man's centrale stofzuiger

Een centrale stofzuiger is een systeem van in-house voert, verbonden met een vaste stofzuiger. Gekoppeld aan de voert, meestal via een luchtuitlaat, een draagbare en lange inlaat slang wordt gebruikt voor het doen van de werkelijke stofzuigen.Drie vo
ACR Poor Man's bom Crafting tabel

ACR Poor Man's bom Crafting tabel

na het zien van het spul in Assassin's Creed openbaringen, ik was echt onder de indruk van wat de makers van het spel gestoken. Ik wilde maken van een echt goede hookblade, maar blijkbaar zou het illegaal maken een blad wapen dat gebruikmaakt van ver
Arduino - verbeterde Poor Man's oscilloscoop

Arduino - verbeterde Poor Man's oscilloscoop

dit Instructable blijft het werk hier gepresenteerd.  Het verstrekt een snelle en gemakkelijke manier om te zetten uw Arduino in een oscilloscoop, al vond ik dat bruikbaarheid ontbrak.  Ik vernieuwde de software als u wilt toestaan voor een veel bete