Skip to content

Instantly share code, notes, and snippets.

@pschatzmann
Created April 6, 2020 14:33
Show Gist options
  • Save pschatzmann/5c8ce913c2e66c667d5a9db28d52c1d8 to your computer and use it in GitHub Desktop.
Save pschatzmann/5c8ce913c2e66c667d5a9db28d52c1d8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Modelling Control Surfaces on Airfoils in OpenSCAD\n\nI was struggling with this topic quite a bit because I wanted to have a generic solution\n- that can be applied to different airfoils\n- that does not disturb the airodynamics too much\n- which is simple to use\n\nFirst I was thinking to use hinges to attach the control surfaces to the wing. But I finally found a better approach."},{"metadata":{},"cell_type":"markdown","source":"## Cut the Control Surface from the Wing / Movable Section\nWe will use a hollow pipe cut in half in order to separate the control surface from the wing. This allows the control serface to move up and down w/o hitting any obstacles on the wing. \n\nThe shape of the cut of control surface will be convex and the corresponding wing section is concave!\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"$fn = 60;\n\nmodule cutComponents2(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=10,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos=5) {\n translate([innerXPos,innerYPos,zPos]) rotate([0,90,0]) {\n difference() {\n cylinder(h=innerX,d=height+cutWidth);\n translate([0,0,0]) cylinder(h=innerX,d=height) ; \n translate([-cutoutHeight/2,0,0]) cube([cutoutHeight,height+cutWidth,innerX]);\n }\n }\n}\n\n%display cutComponents2();","execution_count":25,"outputs":[{"name":"stdout","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 3 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"## Cut the Control Surface from the Wing - Direction of Flight\n\nWe will use 2 cubes to cut off the control surface from the wing on each side:"},{"metadata":{"trusted":true},"cell_type":"code","source":"module cutComponents1(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=10,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos=5) {\n translate([innerXPos,innerYPos-height/2 ,zPos-cutoutHeight/2]) cube([cutWidth,innerY,cutoutHeight]);\n translate([innerXPos+innerX,innerYPos-height/2,zPos-cutoutHeight/2]) cube([cutWidth,innerY,cutoutHeight]); cutComponents2(height,cutoutHeight,cutWidth,pinDiameter,pinLength,innerX,innerXPos,innerYPos,innerY, zPos);\n}\n\n%display cutComponents1();","execution_count":26,"outputs":[{"name":"stdout","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 5 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"## Attaching Control Surfaces to the Wing\nThe movable parts are structured around 2 outer fixed cylinders which need to be connected to the wing and an inner cylinder which will \nbe connected to the control surface.\n\nThe big cylinder we make a little bit bigger then the small one (by the cutWithMin). We also displace the smaller cylinder by cutWithMin to the inside. "},{"metadata":{"trusted":true},"cell_type":"code","source":"module surfacePins1(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=4,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos=5) {\n // big diameter pins on wing\n cutWithMin = cutWidth>0 ? cutWidth : 0.5;\n translate([innerXPos-pinLength,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength,d=pinDiameter+cutWithMin);\n translate([innerXPos+innerX,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength,d=pinDiameter+cutWithMin);\n \n // small diameter inner cylinders on control surface\n translate([innerXPos-pinLength+cutWidth,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength*2,d=pinDiameter);\n translate([innerXPos+innerX-pinLength-cutWidth,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength*2,d=pinDiameter);\n\n}\n\n%display surfacePins1();","execution_count":27,"outputs":[{"name":"stdout","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 4 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"## The controlSurface Module\n\nFinally I define an operation module which we can apply to the wing shape. We test it with a simple cube:"},{"metadata":{"trusted":true},"cell_type":"code","source":"module controlSurface(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=4,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos) {\n zPos = zPos==undef ? height/2 : zPos;\n difference() {\n children();\n cutComponents1(height,cutoutHeight,cutWidth,pinDiameter,pinLength,innerX,innerXPos,innerYPos,innerY, zPos);\n }\n surfacePins1(height,cutoutHeight,cutWidth,pinDiameter,pinLength,innerX,innerXPos,innerYPos,innerY, zPos);\n}\n\n%display controlSurface(height=4,pinDiameter=3, cutWidth=1) cube([110,100,4]);\n","execution_count":28,"outputs":[{"name":"stdout","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 16 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"## The Airfoil\n\nNow, we replace the test cube from above with a real airfoil, so we define it first:\nFrom the site http://chaaawa.com/airfoils/ we select an airfoil. e.g AG17 and copy the generated scad code.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"module airfoil() {\n ag17_points = [[999.985,0.254],[994.06,0.877],[982.067,2.158],[968.523,3.57],[954.679,4.997],[940.794,6.406],[926.907,7.801],[913.017,9.183],[899.126,10.558],[885.237,11.924],[871.348,13.28],[857.464,14.625],[843.579,15.9599],[829.697,17.281],[815.815,18.589],[801.93,19.883],[788.05,21.162],[774.167,22.424],[760.282,23.672],[746.399,24.905],[732.513,26.123],[718.624,27.325],[704.739,28.513],[690.854,29.685],[676.966,30.839],[663.0819,31.975],[649.2019,33.09],[635.318,34.18],[621.435,35.246],[607.557,36.286],[593.678,37.3],[579.7989,38.286],[565.925,39.244],[552.052,40.17],[538.178,41.065],[524.307,41.927],[510.4419,42.754],[496.577,43.544],[482.711,44.298],[468.851,45.013],[454.997,45.687],[441.142,46.32],[427.293,46.91],[413.451,47.453],[399.61,47.949],[385.774,48.396],[371.948,48.79],[358.1269,49.13],[344.31,49.414],[330.505,49.638],[316.712,49.797],[302.923,49.888],[289.15,49.9109],[275.394,49.856],[261.644,49.721],[247.916,49.5],[234.209,49.186],[220.519,48.772],[206.8599,48.25],[193.2329,47.61],[179.639,46.842],[166.099,45.9349],[152.607,44.871],[139.184,43.639],[125.846,42.218],[112.599,40.587],[99.4879,38.723],[86.527,36.593],[73.782,34.165],[61.297,31.395],[49.192,28.241],[37.643,24.669],[27.028,20.699],[18.0449,16.557],[11.377,12.72],[6.944,9.528],[4.076,6.955],[2.198,4.819],[0.966,2.984],[0.232,1.348],[0,-0.158],[0.353,-1.632],[1.387,-3.053],[3.064,-4.384],[5.465,-5.74],[8.937,-7.231],[14.154,-8.951],[21.949,-10.873],[32.2459,-12.732],[44.105,-14.262],[56.736,-15.45],[69.736,-16.335],[82.955,-16.967],[96.323,-17.399],[109.792,-17.665],[123.336,-17.797],[136.936,-17.812],[150.585,-17.728],[164.266,-17.555],[177.981,-17.301],[191.719,-16.977],[205.476,-16.593],[219.253,-16.155],[233.046,-15.669],[246.85,-15.141],[260.671,-14.578],[274.503,-13.983],[288.347,-13.366],[302.207,-12.732],[316.079,-12.08],[329.962,-11.417],[343.862,-10.744],[357.774,-10.065],[371.6979,-9.382],[385.636,-8.701],[399.584,-8.019],[413.536,-7.342],[427.477,-6.673],[441.406,-6.013],[455.325,-5.363],[469.238,-4.729],[483.14,-4.112],[497.034,-3.513],[510.923,-2.931],[524.811,-2.372],[538.693,-1.834],[552.571,-1.319],[566.445,-0.828],[580.319,-0.364],[594.185,0.0749],[608.0489,0.486],[621.908,0.87],[635.763,1.224],[649.612,1.549],[663.46,1.844],[677.307,2.109],[691.153,2.342],[704.999,2.543],[718.847,2.714],[732.698,2.8509],[746.549,2.956],[760.403,3.032],[774.259,3.071],[788.116,3.08],[801.978,3.057],[815.846,2.999],[829.713,2.909],[843.583,2.787],[857.456,2.6319],[871.329,2.447],[885.203,2.232],[899.081,1.983],[912.957,1.702],[926.835,1.395],[940.713,1.061],[954.593,0.693],[968.446,0.298],[982.051,-0.118],[994.064,-0.501]];\n rotate([90,0,90])\n linear_extrude(height=100)\n scale([20, 20])\n scale(0.001)\n polygon(points=ag17_points);\n}\n\n%display airfoil();","execution_count":29,"outputs":[{"name":"stdout","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 1 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"## Control Surface on Airfoil\n\nFinally we can apply the controlSurface module to the airfoil"},{"metadata":{"trusted":true},"cell_type":"code","source":"%%display \n\n controlSurface(pinLength=2, innerX=90,innerXPos=5,innerYPos=5, height=4,pinDiameter=1, cutWidth=1, zPos=0.2) \n airfoil();\n","execution_count":30,"outputs":[{"name":"stdout","output_type":"stream","text":"Compiling design (CSG Products normalization)...\nNormalized CSG tree has 16 elements\n"},{"data":{"image/png":"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"},"metadata":{"image/png":{"height":400,"width":600}},"output_type":"display_data","source":"kernel"}]},{"metadata":{},"cell_type":"markdown","source":"## The Source Code\n\nAnd here is the complete source code:"},{"metadata":{"trusted":true},"cell_type":"code","source":"%displayCode","execution_count":31,"outputs":[{"name":"stdout","output_type":"stream","text":"$fn = 60;\n\nmodule cutComponents2(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=10,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos=5) {\n translate([innerXPos,innerYPos,zPos]) rotate([0,90,0]) {\n difference() {\n cylinder(h=innerX,d=height+cutWidth);\n translate([0,0,0]) cylinder(h=innerX,d=height) ; \n translate([-cutoutHeight/2,0,0]) cube([cutoutHeight,height+cutWidth,innerX]);\n }\n }\n}\n\nmodule cutComponents1(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=10,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos=5) {\n translate([innerXPos,innerYPos-height/2 ,zPos-cutoutHeight/2]) cube([cutWidth,innerY,cutoutHeight]);\n translate([innerXPos+innerX,innerYPos-height/2,zPos-cutoutHeight/2]) cube([cutWidth,innerY,cutoutHeight]); cutComponents2(height,cutoutHeight,cutWidth,pinDiameter,pinLength,innerX,innerXPos,innerYPos,innerY, zPos);\n}\n\nmodule surfacePins1(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=4,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos=5) {\n // big diameter pins on wing\n cutWithMin = cutWidth>0 ? cutWidth : 0.5;\n translate([innerXPos-pinLength,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength,d=pinDiameter+cutWithMin);\n translate([innerXPos+innerX,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength,d=pinDiameter+cutWithMin);\n \n // small diameter inner cylinders on control surface\n translate([innerXPos-pinLength+cutWidth,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength*2,d=pinDiameter);\n translate([innerXPos+innerX-pinLength-cutWidth,innerYPos,zPos]) rotate([0,90,0]) cylinder(h=pinLength*2,d=pinDiameter);\n\n}\n\nmodule controlSurface(height=10,cutoutHeight=50,cutWidth=0.5,pinDiameter=5,pinLength=4,innerX=50,innerXPos=10,innerYPos=50,innerY=1000, zPos) {\n zPos = zPos==undef ? height/2 : zPos;\n difference() {\n children();\n cutComponents1(height,cutoutHeight,cutWidth,pinDiameter,pinLength,innerX,innerXPos,innerYPos,innerY, zPos);\n }\n surfacePins1(height,cutoutHeight,cutWidth,pinDiameter,pinLength,innerX,innerXPos,innerYPos,innerY, zPos);\n}\n\nmodule airfoil() {\n ag17_points = [[999.985,0.254],[994.06,0.877],[982.067,2.158],[968.523,3.57],[954.679,4.997],[940.794,6.406],[926.907,7.801],[913.017,9.183],[899.126,10.558],[885.237,11.924],[871.348,13.28],[857.464,14.625],[843.579,15.9599],[829.697,17.281],[815.815,18.589],[801.93,19.883],[788.05,21.162],[774.167,22.424],[760.282,23.672],[746.399,24.905],[732.513,26.123],[718.624,27.325],[704.739,28.513],[690.854,29.685],[676.966,30.839],[663.0819,31.975],[649.2019,33.09],[635.318,34.18],[621.435,35.246],[607.557,36.286],[593.678,37.3],[579.7989,38.286],[565.925,39.244],[552.052,40.17],[538.178,41.065],[524.307,41.927],[510.4419,42.754],[496.577,43.544],[482.711,44.298],[468.851,45.013],[454.997,45.687],[441.142,46.32],[427.293,46.91],[413.451,47.453],[399.61,47.949],[385.774,48.396],[371.948,48.79],[358.1269,49.13],[344.31,49.414],[330.505,49.638],[316.712,49.797],[302.923,49.888],[289.15,49.9109],[275.394,49.856],[261.644,49.721],[247.916,49.5],[234.209,49.186],[220.519,48.772],[206.8599,48.25],[193.2329,47.61],[179.639,46.842],[166.099,45.9349],[152.607,44.871],[139.184,43.639],[125.846,42.218],[112.599,40.587],[99.4879,38.723],[86.527,36.593],[73.782,34.165],[61.297,31.395],[49.192,28.241],[37.643,24.669],[27.028,20.699],[18.0449,16.557],[11.377,12.72],[6.944,9.528],[4.076,6.955],[2.198,4.819],[0.966,2.984],[0.232,1.348],[0,-0.158],[0.353,-1.632],[1.387,-3.053],[3.064,-4.384],[5.465,-5.74],[8.937,-7.231],[14.154,-8.951],[21.949,-10.873],[32.2459,-12.732],[44.105,-14.262],[56.736,-15.45],[69.736,-16.335],[82.955,-16.967],[96.323,-17.399],[109.792,-17.665],[123.336,-17.797],[136.936,-17.812],[150.585,-17.728],[164.266,-17.555],[177.981,-17.301],[191.719,-16.977],[205.476,-16.593],[219.253,-16.155],[233.046,-15.669],[246.85,-15.141],[260.671,-14.578],[274.503,-13.983],[288.347,-13.366],[302.207,-12.732],[316.079,-12.08],[329.962,-11.417],[343.862,-10.744],[357.774,-10.065],[371.6979,-9.382],[385.636,-8.701],[399.584,-8.019],[413.536,-7.342],[427.477,-6.673],[441.406,-6.013],[455.325,-5.363],[469.238,-4.729],[483.14,-4.112],[497.034,-3.513],[510.923,-2.931],[524.811,-2.372],[538.693,-1.834],[552.571,-1.319],[566.445,-0.828],[580.319,-0.364],[594.185,0.0749],[608.0489,0.486],[621.908,0.87],[635.763,1.224],[649.612,1.549],[663.46,1.844],[677.307,2.109],[691.153,2.342],[704.999,2.543],[718.847,2.714],[732.698,2.8509],[746.549,2.956],[760.403,3.032],[774.259,3.071],[788.116,3.08],[801.978,3.057],[815.846,2.999],[829.713,2.909],[843.583,2.787],[857.456,2.6319],[871.329,2.447],[885.203,2.232],[899.081,1.983],[912.957,1.702],[926.835,1.395],[940.713,1.061],[954.593,0.693],[968.446,0.298],[982.051,-0.118],[994.064,-0.501]];\n rotate([90,0,90])\n linear_extrude(height=100)\n scale([20, 20])\n scale(0.001)\n polygon(points=ag17_points);\n}\n\n\n"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"name":"openscad","display_name":"OpenSCAD","language":"application-xopenscad"},"language_info":{"name":"OpenSCAD","mimetype":"application/x-openscad","extension":".scad"},"toc-autonumbering":false,"toc":{"nav_menu":{},"number_sections":false,"sideBar":false,"skip_h1_title":false,"base_numbering":1,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":false,"toc_position":{},"toc_section_display":false,"toc_window_display":false}},"nbformat":4,"nbformat_minor":4}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment